// Copyright 2021 NVIDIA Corporation
//
// SPDX-License-Identifier: CC-BY-4.0

include::{generated}/meta/{refprefix}VK_EXT_application_parameters.adoc[]

=== Other Extension Metadata

*Last Modified Date*::
    2021-12-14
*Contributors*::
  - Daniel Koch, NVIDIA
  - Jonathan Mccaffrey, NVIDIA
  - Aidan Fabius, CoreAVI

=== Description

This instance extension enables an application to pass application
parameters to the implementation at instance or device creation time.

The application parameters consist of a set of vendor-specific keys and
values.
Each key is a 32-bit enum, and each value is a 64-bit integer.
The valid keys, range of values, and default values are documented external
to this specification in implementation-specific documentation.

This extension is an instance extension rather than a device extension so
that the implementation can modify reported sname:VkPhysicalDevice
properties or features as needed.

include::{generated}/interfaces/VK_EXT_application_parameters.adoc[]

=== Issues

. How should the pname:key enumerants be assigned?
+
--
*RESOLVED*: The pname:key enumerants are completely implementation-specific
and do not need to be centrally reserved.
They should be documented in the implementation-specific documentation.
The vendor ID and optionally the device ID are provided to disambiguate
between multiple ICDs or devices.
--

. How does an application know what application parameters are valid on a
particular implementation?
+
--
*DISCUSSION*: There is no ability to enumerate device or system properties
before an instance is created, however pname:key and pname:values must: be
recognized by an implementation in order for instance or device creation to
succeed.
The vendor and optionally the device ID are provided to identify which ICD
or device the application parameters are targeted at.
--

. Is it OK if the "valid value" for specified keys is not from static
documented values, but must be consistent-with/interdependent-on other
sname:VkApplicationParametersEXT?
+
--
*DISCUSSION*: Yes this is fine.
Examples for how this could be used include:

  * a checksum pname:key where the pname:value is computed based on other
    slink:VkApplicationParametersEXT structures in the pname:pNext chain.
  * an "application key" which either implies or explicitly lists a set of
    prevalidated key/value pairs.
--

=== Version History

  * Revision 1, 2021-12-14 (Daniel Koch)
  ** Initial revision
