Change log for December 3, 2018 Vulkan 1.1.95 spec update:

* Update release number to 95.

Public Issues:

  * Fix valid usage and XML issues found in public issues 789 and 790 for
    the `VK_EXT_debug_utils` extension (public pull request 794).
  * Replace references to `VK_NV_dedicated_allocation` with links to the
    corresponding slink:slink:VkMemoryDedicatedRequirements and
    slink:slink:VkMemoryDedicatedAllocateInfo structures in the description
    of elink:VkExternalMemoryFeatureFlagBits (public issue 801).
  * Fix miscellaneous minor markup and spelling issues in
    `VK_NV_ray_tracing` extension (public pull request 860).
  * Remove "returnedonly" from XML for
    slink:VkPhysicalDeviceInlineUniformBlockFeaturesEXT and
    slink:VkPhysicalDeviceVulkanMemoryModelFeaturesKHR (public issue 862).

Internal Issues:

  * Add to the description of the
    <<features-limits-maxComputeSharedMemorySize,
    pname:maxCompureSharedMemorySize>> feature to state the shared variables
    should be packed at least as tightly as std430 (internal issue 1386).
  * Fix and clarify various references to image and image view usage in
    flink:vkCmdBindShadingRateImageNV, flink:vkCmdBeginRenderPass, and
    slink:VkImageStencilUsageCreateInfoEXT (internal issue 1432).
  * Require that the slink:VkImage mipmap chain match the Android hardware
    buffer mipmap chain for slink:VkMemoryAllocateInfo (internal issue
    1479).
  * Fix the definition of slink:VkSwapchainCreateInfoKHR valid usage
    statement 01778 (Vulkan-ValidationLayers!15)
  * Fix descriptions of <<interfaces-builtin-variables-launchid,
    code:LaunchIDNV>> and <<interfaces-builtin-variables-launchsize,
    code:LaunchSizeNV>> to code:uvec3.

New Extensions:

  * `VK_KHR_shader_float16_int8`
  * `VK_KHR_shader_float_controls`
This commit is contained in:
Jon Leech 2018-12-03 02:41:34 -08:00
parent f5ae29c4f5
commit ef29cea94b
22 changed files with 1030 additions and 165 deletions

View File

@ -115,7 +115,7 @@ VERBOSE =
# ADOCOPTS options for asciidoc->HTML5 output
NOTEOPTS = -a editing-notes -a implementation-guide
PATCHVERSION = 94
PATCHVERSION = 95
ifneq (,$(findstring VK_VERSION_1_1,$(VERSIONS)))
SPECREVISION = 1.1.$(PATCHVERSION)
else

View File

@ -0,0 +1,53 @@
// Copyright (c) 2014-2018 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/
include::meta/VK_KHR_shader_float16_int8.txt[]
*Last Modified Date*::
2018-03-07
*IP Status*::
No known IP claims.
*Interactions and External Dependencies*::
- This extension interacts with `<<VK_KHR_8bit_storage>>`
- This extension interacts with `<<VK_KHR_16bit_storage>>`
- This extension interacts with `<<VK_KHR_shader_float_controls>>`
*Contributors*::
- Alexander Galazin, Arm
- Jan-Harald Fredriksen, Arm
- Jeff Bolz, NVIDIA
- Graeme Leese, Broadcom
- Daniel Rakos, AMD
=== Description
The `VK_KHR_shader_float16_int8` extension allows use of 16-bit
floating-point types and 8-bit integer types in shaders for arithmetic
operations.
It introduces two new optional features pname:shaderFloat16 and
pname:shaderInt8 which directly map to the code:Float16 and the code:Int8
SPIR-V capabilities.
The `VK_KHR_shader_float16_int8` extension also specifies precision
requirements for half-precision floating-point SPIR-V operations.
This extension doesn't enable use of 8-bit integer types or 16-bit
floating-point types in any <<interfaces-iointerfaces, shader input and
output interfaces>> and therefore doesn't supersede the
`<<VK_KHR_8bit_storage>>` or `<<VK_KHR_16bit_storage>>` extensions.
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR
=== New Structures
* slink:VkPhysicalDeviceFloat16Int8FeaturesKHR
=== New Functions
* None
=== Version History
* Revision 1, 2018-03-07 (Alexander Galazin)
- Initial draft

View File

@ -0,0 +1,102 @@
// Copyright (c) 2014-2018 Khronos Group. This work is licensed under a
// Creative Commons Attribution 4.0 International License; see
// http://creativecommons.org/licenses/by/4.0/
include::meta/VK_KHR_shader_float_controls.txt[]
*Last Modified Date*::
2018-09-11
*IP Status*::
No known IP claims.
*Interactions and External Dependencies*::
- This extension requires
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_float_controls.html[`SPV_KHR_float_controls`]
*Contributors*::
- Alexander Galazin, Arm
- Jan-Harald Fredriksen, Arm
- Jeff Bolz, NVIDIA
- Graeme Leese, Broadcom
- Daniel Rakos, AMD
=== Description
The `VK_KHR_shader_float_controls` extension enables efficient use of
floating-point computations through the ability to query and override the
implementation's default behavior for rounding modes, denormals, signed
zero, and infinity.
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR
=== New Enums
* None
=== New Structures
* slink:VkPhysicalDeviceFloatControlsPropertiesKHR
=== New Functions
* None
=== New SPIR-V Capabilities
* <<spirvenv-capabilities-table-shaderfloatcontrols,code:DenormPreserve>>
* <<spirvenv-capabilities-table-shaderfloatcontrols,code:DenormFlushToZero>>
* <<spirvenv-capabilities-table-shaderfloatcontrols,code:SignedZeroInfNanPreserve>>
* <<spirvenv-capabilities-table-shaderfloatcontrols,code:RoundingModeRTE>>
* <<spirvenv-capabilities-table-shaderfloatcontrols,code:RoundingModeRTZ>>
=== Issues
1) Which instructions must flush denorms?
*RESOLVED*: Only floating-point conversion, floating-point arithmetic,
floating-point relational (except code:OpIsNaN, code:OpIsInf), and
floating-point GLSL.std.450 extended instructions must flush denormals.
2) What is the denorm behavior for intermediate results?
*RESOLVED*: When a SPIR-V instruction is implemented as a sequence of other
instructions:
- in the code:DenormFlushToZero execution mode the intermediate
instructions may flush denormals, the final result of the sequence must:
not be denormal.
- in the code:DenormPreserve execution mode denormals must be preserved
throughout the whole sequence.
3) Do denorm and rounding mode controls apply to code:OpSpecConstantOp?
*RESOLVED*: Yes, except when the opcode is code:OpQuantizeToF16.
4) The SPIR-V specification says that code:OpConvertFToU and
code:OpConvertFToS unconditionally round towards zero.
Do the rounding mode controls specified through the execution modes apply to
them?
*RESOLVED*: No, these instructions unconditionally round towards zero.
5) Do any of the "Pack" GLSL.std.450 instructions count as conversion
instructions and have the rounding mode apply?
*RESOLVED*: No, only instructions listed in the section "3.32.11.
Conversion Instructions" of the SPIR-V specification count as conversion
instructions.
6) When using inf/nan-ignore mode, what is expected of code:OpIsNan and
code:OpIsInf?
*RESOLVED*: These instructions must always accurately detect inf/nan if it
is passed to them.
=== Version History
* Revision 3, 2018-09-11 (Alexander Galazin)
- Minor restructuring
* Revision 2, 2018-04-17 (Alexander Galazin)
- Added issues and resolutions
* Revision 1, 2018-04-11 (Alexander Galazin)
- Initial draft

View File

@ -201,9 +201,19 @@ ifdef::VK_EXT_descriptor_indexing[]
| code:UniformTexelBufferArrayNonUniformIndexingEXT | <<features-features-shaderUniformTexelBufferArrayNonUniformIndexing,shaderUniformTexelBufferArrayNonUniformIndexing>>
| code:StorageTexelBufferArrayNonUniformIndexingEXT | <<features-features-shaderStorageTexelBufferArrayNonUniformIndexing,shaderStorageTexelBufferArrayNonUniformIndexing>>
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_KHR_shader_float16_int8,VK_AMD_gpu_shader_half_float[]
| code:Float16 |
ifdef::VK_KHR_shader_float16_int8[]
<<features-features-shaderFloat16,shaderFloat16>>
endif::VK_KHR_shader_float16_int8[]
ifdef::VK_KHR_shader_float16_int8+VK_AMD_gpu_shader_half_float[or]
ifdef::VK_AMD_gpu_shader_half_float[]
| code:Float16 | `<<VK_AMD_gpu_shader_half_float>>`
`<<VK_AMD_gpu_shader_half_float>>`
endif::VK_AMD_gpu_shader_half_float[]
endif::VK_KHR_shader_float16_int8,VK_AMD_gpu_shader_half_float[]
ifdef::VK_KHR_shader_float16_int8[]
| code:Int8 | <<features-features-shaderInt8,shaderInt8>>
endif::VK_KHR_shader_float16_int8[]
ifdef::VK_KHR_8bit_storage[]
[[spirvenv-capabilities-table-8bitstorage]]
| code:StorageBuffer8BitAccess | <<features-features-storageBuffer8BitAccess,StorageBuffer8BitAccess>>
@ -215,6 +225,14 @@ ifdef::VK_KHR_vulkan_memory_model[]
| code:VulkanMemoryModelKHR | <<features-features-vulkanMemoryModel,vulkanMemoryModel>>
| code:VulkanMemoryModelDeviceScopeKHR | <<features-features-vulkanMemoryModel,vulkanMemoryModelDeviceScope>>
endif::VK_KHR_vulkan_memory_model[]
ifdef::VK_KHR_shader_float_controls[]
[[spirvenv-capabilities-table-shaderfloatcontrols]]
| code:DenormPreserve | <<features-features-shaderDenormPreserveFloat16,shaderDenormPreserveFloat16>>, <<features-features-shaderDenormPreserveFloat32,shaderDenormPreserveFloat32>>, <<features-features-shaderDenormPreserveFloat64,shaderDenormPreserveFloat64>>
| code:DenormFlushToZero | <<features-features-shaderDenormFlushToZeroFloat16,shaderDenormFlushToZeroFloat16>>, <<features-features-shaderDenormFlushToZeroFloat32,shaderDenormFlushToZeroFloat32>>, <<features-features-shaderDenormFlushToZeroFloat64,shaderDenormFlushToZeroFloat64>>
| code:SignedZeroInfNanPreserve | <<features-features-shaderSignedZeroInfNanPreserveFloat16,shaderSignedZeroInfNanPreserveFloat16>>, <<features-features-shaderSignedZeroInfNanPreserveFloat32,shaderSignedZeroInfNanPreserveFloat32>>, <<features-features-shaderSignedZeroInfNanPreserveFloat64,shaderSignedZeroInfNanPreserveFloat64>>
| code:RoundingModeRTE | <<features-features-shaderRoundingModeRTEFloat16,shaderRoundingModeRTEFloat16>>, <<features-features-shaderRoundingModeRTEFloat32,shaderRoundingModeRTEFloat32>>, <<features-features-shaderRoundingModeRTEFloat64,shaderRoundingModeRTEFloat64>>
| code:RoundingModeRTZ | <<features-features-shaderRoundingModeRTZFloat16,shaderRoundingModeRTZFloat16>>, <<features-features-shaderRoundingModeRTZFloat32,shaderRoundingModeRTZFloat32>>, <<features-features-shaderRoundingModeRTZFloat64,shaderRoundingModeRTZFloat64>>
endif::VK_KHR_shader_float_controls[]
ifdef::VK_NV_compute_shader_derivatives[]
[[spirvenv-capabilities-table-computederivatives-quads]]
| code:ComputeDerivativeGroupQuadsNV | <<features-features-computeShaderDerivativesQuads,computeDerivativeGroupQuads>>
@ -305,6 +323,11 @@ The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the `SPV_KHR_shader_draw_parameters` SPIR-V extension.
endif::VK_VERSION_1_1,VK_KHR_shader_draw_parameters[]
ifdef::VK_KHR_shader_float16_int8[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the code:Float16 or the code:Int8 SPIR-V capabilities.
endif::VK_KHR_shader_float16_int8[]
ifdef::VK_KHR_8bit_storage[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the `SPV_KHR_8bit_storage` SPIR-V extension.
@ -317,6 +340,13 @@ https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_16bit_storage.htm
SPIR-V extension.
endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
ifdef::VK_KHR_shader_float_controls[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_float_controls.html[`SPV_KHR_float_controls`]
SPIR-V extension.
endif::VK_KHR_shader_float_controls[]
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
The application can: pass a SPIR-V module to flink:vkCreateShaderModule that
uses the
@ -511,6 +541,27 @@ endif::VK_NV_ray_tracing[]
include at least one storage class.
** *SubgroupMemory*, *CrossWorkgroupMemory*, and *AtomicCounterMemory* are
ignored.
ifdef::VK_KHR_shader_float16_int8+!VK_KHR_8bit_storage[]
* Any code:OpVariable with the result type pointing to an 8-bit integer
object or an object containing an 8-bit integer element must: not have
one of the following as its code:Storage code:Class operand:
** *Uniform*
** *PushConstant*
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
** *StorageBuffer*
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
endif::VK_KHR_shader_float16_int8+!VK_KHR_8bit_storage[]
ifdef::VK_KHR_shader_float16_int8+!VK_KHR_16bit_storage[]
* Any code:OpVariable with the result type pointing to a 16-bit
floating-point object or an object containing a 16-bit floating-point
element must: not have one of the following as its code:Storage
code:Class operand:
** *Uniform*
** *PushConstant*
ifdef::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
** *StorageBuffer*
endif::VK_VERSION_1_1,VK_KHR_storage_buffer_storage_class[]
endif::VK_KHR_shader_float16_int8+!VK_KHR_16bit_storage[]
* Any code:OpVariable with an code:Initializer operand must: have one of
the following as its *Storage Class* operand:
** *Output*
@ -672,6 +723,76 @@ ifdef::VK_EXT_descriptor_indexing[]
(e.g. the pointer or sampled image operand) must: be decorated with
code:NonUniformEXT.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_KHR_shader_float_controls[]
* If
<<features-features-separateDenormSettings,pname:separateDenormSettings>>
is ename:VK_FALSE, then the entry point must: use the same denormals
execution mode for both 16-bit and 64-bit floating-point types.
* If
<<features-features-separateRoundingModeSettings,pname:separateRoundingModeSettings>>
is ename:VK_FALSE, then the entry point must: use the same rounding
execution mode for both 16-bit and 64-bit floating-point types.
* If
<<features-features-shaderSignedZeroInfNanPreserveFloat16,pname:shaderSignedZeroInfNanPreserveFloat16>>
is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 16-bit
floating-point type must: not be used.
* If
<<features-features-shaderSignedZeroInfNanPreserveFloat32,pname:shaderSignedZeroInfNanPreserveFloat32>>
is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 32-bit
floating-point type must: not be used.
* If
<<features-features-shaderSignedZeroInfNanPreserveFloat64,pname:shaderSignedZeroInfNanPreserveFloat64>>
is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 64-bit
floating-point type must: not be used.
* If
<<features-features-shaderDenormPreserveFloat16,pname:shaderDenormPreserveFloat16>>
is ename:VK_FALSE, then code:DenormPreserve for 16-bit floating-point
type must: not be used.
* If
<<features-features-shaderDenormPreserveFloat32,pname:shaderDenormPreserveFloat32>>
is ename:VK_FALSE, then code:DenormPreserve for 32-bit floating-point
type must: not be used.
* If
<<features-features-shaderDenormPreserveFloat64,pname:shaderDenormPreserveFloat64>>
is ename:VK_FALSE, then code:DenormPreserve for 64-bit floating-point
type must: not be used.
* If
<<features-features-shaderDenormFlushToZeroFloat16,pname:shaderDenormFlushToZeroFloat16>>
is ename:VK_FALSE, then code:DenormFlushToZero for 16-bit floating-point
type must: not be used.
* If
<<features-features-shaderDenormFlushToZeroFloat32,pname:shaderDenormFlushToZeroFloat32>>
is ename:VK_FALSE, then code:DenormFlushToZero for 32-bit floating-point
type must: not be used.
* If
<<features-features-shaderDenormFlushToZeroFloat64,pname:shaderDenormFlushToZeroFloat64>>
is ename:VK_FALSE, then code:DenormFlushToZero for 64-bit floating-point
type must: not be used.
* If
<<features-features-shaderRoundingModeRTEFloat16,pname:shaderRoundingModeRTEFloat16>>
is ename:VK_FALSE, then code:RoundingModeRTE for 16-bit floating-point
type must: not be used.
* If
<<features-features-shaderRoundingModeRTEFloat32,pname:shaderRoundingModeRTEFloat32>>
is ename:VK_FALSE, then code:RoundingModeRTE for 32-bit floating-point
type must: not be used.
* If
<<features-features-shaderRoundingModeRTEFloat64,pname:shaderRoundingModeRTEFloat64>>
is ename:VK_FALSE, then code:RoundingModeRTE for 64-bit floating-point
type must: not be used.
* If
<<features-features-shaderRoundingModeRTZFloat16,pname:shaderRoundingModeRTZFloat16>>
is ename:VK_FALSE, then code:RoundingModeRTZ for 16-bit floating-point
type must: not be used.
* If
<<features-features-shaderRoundingModeRTZFloat32,pname:shaderRoundingModeRTZFloat32>>
is ename:VK_FALSE, then code:RoundingModeRTZ for 32-bit floating-point
type must: not be used.
* If
<<features-features-shaderRoundingModeRTZFloat64,pname:shaderRoundingModeRTZFloat64>>
is ename:VK_FALSE, then code:RoundingModeRTZ for 64-bit floating-point
type must: not be used.
endif::VK_KHR_shader_float_controls[]
ifdef::VK_EXT_transform_feedback[]
* The code:Offset plus size of the type of each variable, in the output
interface of the entry point being compiled, decorated with
@ -743,9 +864,11 @@ ifdef::VK_NV_ray_tracing[]
shaders.
endif::VK_NV_ray_tracing[]
[[spirvenv-precision-operation]]
== Precision and Operation of SPIR-V Instructions
ifndef::VK_KHR_shader_float_controls[]
The following rules apply to both single and double-precision floating point
instructions:
@ -762,6 +885,101 @@ instructions:
Instructions that operate on a [eq]#NaN# may: not result in a [eq]#NaN#.
* Support for signaling [eq]##NaN##s is optional: and exceptions are never
raised.
endif::VK_KHR_shader_float_controls[]
ifdef::VK_KHR_shader_float_controls[]
The following rules apply to half, single, and double-precision floating
point instructions:
* Positive and negative infinities and positive and negative zeros are
generated as dictated by <<ieee-754,IEEE 754>>, but subject to the
precisions allowed in the following table.
* Dividing a non-zero by a zero results in the appropriately signed
<<ieee-754,IEEE 754>> infinity.
* Signaling [eq]##NaN##s are not required to be generated and exceptions
are never raised.
Signaling [eq]##NaN## may: be converted to quiet [eq]##NaN##s values by
any floating point instruction.
* By default, the implementation may: perform optimizations on half,
single, or double-precision floating-point instructions respectively
that ignore sign of a zero, or assume that arguments and results are not
[eq]##Nan##s or latexmath:[\pm\infty], this doesn't apply to
code:OpIsNan and code:OpIsInf, which must: always correctly detect
[eq]##Nan##s and latexmath:[\pm\infty].
If the entry point is declared with the code:SignedZeroInfNanPreserve
execution mode, then sign of a zero, [eq]##Nan##s, and
latexmath:[\pm\infty] must: not be ignored.
** The following core SPIR-V instructions must: respect the
code:SignedZeroInfNanPreserve execution mode: code:OpPhi,
code:OpSelect, code:OpReturnValue, code:OpVectorExtractDynamic,
code:OpVectorInsertDynamic, code:OpVectorShuffle,
code:OpCompositeConstruct, code:OpCompositeExtract,
code:OpCompositeInsert, code:OpCopyObject, code:OpTranspose,
code:OpFConvert, code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul,
code:OpStore.
This execution mode must: also be respected by code:OpLoad except for
loads from the code:Input storage class in the fragment shader stage
with the floating-point result type.
Other SPIR-V instruction may: also respect the
code:SignedZeroInfNanPreserve execution mode.
* Denormalized values are supported.
** By default, any half, single, or double-precision denormalized value
input into a shader or potentially generated by any instruction or any
extended instructions for GLSL in a shader may: be flushed to zero.
** If the entry point is declared with the code:DenormFlushToZero
execution mode then for the affected instuctions the denormalized
result must: be flushed to zero and the denormalized operands may: be
flushed to zero.
Denormalized values obtained via unpacking an integer into a vector of
values with smaller bit width and interpreting those values as
floating-point numbers must: be flushed to zero.
** The following core SPIR-V instructions must: respect the
code:DenormFlushToZero execution mode: code:OpSpecConstantOp (except
when the opcode is code:OpQuantizeToF16), code:OpFConvert,
code:OpFNegate, code:OpFAdd, code:OpFSub, code:OpFMul, code:OpFDiv,
code:OpFRem, code:OpFMod, code:OpVectorTimesScalar,
code:OpMatrixTimesScalar, code:OpVectorTimesMatrix,
code:OpMatrixTimesVector, code:OpMatrixTimesMatrix,
code:OpOuterProduct, code:OpDot; and the following extended
instructions for GLSL: code:Round, code:RoundEven, code:Trunc,
code:FAbs, code:Floor, code:Ceil, code:Fract, code:Radians,
code:Degrees, code:Sin, code:Cos, code:Tan, code:Asin, code:Acos,
code:Atan, code:Sinh, code:Cosh, code:Tanh, code:Asinh, code:Acosh,
code:Atanh, code:Atan2, code:Pow, code:Exp, code:Log, code:Exp2,
code:Log2, code:Sqrt, code:InverseSqrt, code:Determinant,
code:MatrixInverse, code:Modf, code:ModfStruct, code:FMin, code:FMax,
code:FClamp, code:FMix, code:Step, code:SmoothStep, code:Fma,
code:UnpackHalf2x16, code:UnpackDouble2x32, code:Length, code:Distance,
code:Cross, code:Normalize, code:FaceForward, code:Reflect,
code:Refract, code:NMin, code:NMax, code:NClamp.
Other SPIR-V instruction may: also respect the code:DenormFlushToZero
execution mode.
** The following core SPIR-V instructions must: respect the
code:DenormPreserve execution mode: code:OpPhi, code:OpSelect,
code:OpReturnValue, code:OpVectorExtractDynamic,
code:OpVectorInsertDynamic, code:OpVectorShuffle,
code:OpCompositeConstruct, code:OpCompositeExtract,
code:OpCompositeInsert, code:OpCopyObject, code:OpTranspose,
code:OpStore, code:OpSpecConstantOp, code:OpFConvert, code:OpFNegate,
code:OpFAdd, code:OpFSub, code:OpFMul, code:OpVectorTimesScalar,
code:OpMatrixTimesScalar, code:OpVectorTimesMatrix,
code:OpMatrixTimesVector, code:OpMatrixTimesMatrix,
code:OpOuterProduct, code:OpDot, code:OpFOrdEqual, code:OpFUnordEqual,
code:OpFOrdNotEqual, code:OpFUnordNotEqual, code:OpFOrdLessThan,
code:OpFUnordLessThan, code:OpFOrdGreaterThan,
code:OpFUnordGreaterThan, code:OpFOrdLessThanEqual,
code:OpFUnordLessThanEqual, code:OpFOrdGreaterThanEqual,
code:OpFUnordGreaterThanEqual; and the following extended instructions
for GLSL: code:FAbs, code:FSign, code:Radians, code:Degrees, code:FMin,
code:FMax, code:FClamp, code:FMix, code:Fma, code:PackHalf2x16,
code:PackDouble2x32, code:UnpackHalf2x16, code:UnpackDouble2x32,
code:NMin, code:NMax, code:NClamp.
This execution mode must: also be respected by code:OpLoad except for
loads from the code:Input storage class in the fragment shader stage
with the floating-point result type.
Other SPIR-V instruction may: also respect the code:DenormPreserve
execution mode.
endif::VK_KHR_shader_float_controls[]
The precision of double-precision instructions is at least that of single
precision.
@ -773,8 +991,18 @@ error bound in ULP, or as inherited from a formula as follows.
Operations described as "`correctly rounded`" will return the infinitely
precise result, [eq]#x#, rounded so as to be representable in
floating-point.
The rounding mode used is not defined but if [eq]#x# is exactly
representable then [eq]#x# will be returned.
ifdef::VK_KHR_shader_float_controls[]
The rounding mode is not specified, unless the entry point is declared with
the code:RoundingModeRTE or the code:RoundingModeRTZ execution mode.
These execution modes affect only correctly rounded SPIR-V instructions.
These execution modes do not affect code:OpQuantizeToF16.
If the rounding mode is not specified then this rounding is implementation
specific, subject to the following rules.
endif::VK_KHR_shader_float_controls[]
ifndef::VK_KHR_shader_float_controls[]
The rounding mode used is not defined but must: obey the following rules.
endif::VK_KHR_shader_float_controls[]
If [eq]#x# is exactly representable then [eq]#x# will be returned.
Otherwise, either the floating-point value closest to and no less than
[eq]#x# or the value closest to and no greater than [eq]#x# will be
returned.
@ -813,7 +1041,170 @@ be [eq]#F~max~# and the smallest be [eq]#F~min~#.
The operation must return a value in the range [eq]#[x - E, x + E]# where
latexmath:[E = \mathrm{max} \left( | x - F_{\mathrm{min}} |, | x -
F_{\mathrm{max}} | \right) ].
ifdef::VK_KHR_shader_float_controls[]
If the entry point is declared with the code:DenormFlushToZero execution
mode, then any intermediate denormal value(s) while evaluating the formula
may: be flushed to zero.
Denormal final results must: be flushed to zero.
If the entry point is declared with the code:DenormPreserve execution mode,
then denormals must: be preserved throughout the formula.
endif::VK_KHR_shader_float_controls[]
ifdef::VK_KHR_shader_float16_int8[]
For half- (16 bit) and single- (32 bit) precision instructions, precisions
are required: to be at least as follows:
.Precision of core SPIR-V Instructions
[options="header", cols=",,"]
|====
| Instruction
| Single precision, unless decorated with RelaxedPrecision | Half precision
| code:OpFAdd
2+| Correctly rounded.
| code:OpFSub
2+| Correctly rounded.
| code:OpFMul
2+| Correctly rounded.
| code:OpDot(x, y)
2+| Inherited from latexmath:[\sum_{i = 0}^{n - 1} x_{i} \times y_{i}].
| code:OpFOrdEqual, code:OpFUnordEqual
2+| Correct result.
| code:OpFOrdLessThan, code:OpFUnordLessThan
2+| Correct result.
| code:OpFOrdGreaterThan, code:OpFUnordGreaterThan
2+| Correct result.
| code:OpFOrdLessThanEqual, code:OpFUnordLessThanEqual
2+| Correct result.
| code:OpFOrdGreaterThanEqual, code:OpFUnordGreaterThanEqual
2+| Correct result.
| code:OpFDiv(x,y)
| 2.5 ULP for y in the range [2^-126^, 2^126^]. | 2.5 ULP for y in the range [2^-14^, 2^14^].
| code:OpFRem(x,y)
| Inherited from [eq]#x - y {times} trunc(x/y)#, for y in the range [2^-126^, 2^126^].
| Inherited from [eq]#x - y {times} trunc(x/y)#, for y in the range [2^-14^, 2^14^].
| code:OpFMod(x,y)
| Inherited from [eq]#x - y {times} floor(x/y)#, for y in the range [2^-126^, 2^126^].
| Inherited from [eq]#x - y {times} floor(x/y)#, for y in the range [2^-14^, 2^14^].
| conversions between types
2+| Correctly rounded.
|====
[NOTE]
.Note
====
The code:OpFRem and code:OpFMod instructions use cheap approximations of
remainder, and the error can be large due to the discontinuity in trunc()
and floor().
This can produce mathematically unexpected results in some cases, such as
FMod(x,x) computing x rather than 0, and can also cause the result to have a
different sign than the infinitely precise result.
====
.Precision of GLSL.std.450 Instructions
[options="header", cols=",,"]
|====
|Instruction
| Single precision, unless decorated with RelaxedPrecision | Half precision
| code:fma()
2+| Inherited from code:OpFMul followed by code:OpFAdd.
| code:exp(x), code:exp2(x)
| [eq]#3 + 2 {times} {vert}x{vert}# ULP. | [eq]#1 + 2 {times} {vert}x{vert}# ULP.
| code:log(), code:log2()
| 3 ULP outside the range [eq]#[0.5, 2.0]#. Absolute error < [eq]#2^-21^# inside the range [eq]#[0.5, 2.0]#.
| 3 ULP outside the range [eq]#[0.5, 2.0]#. Absolute error < [eq]#2^-7^# inside the range [eq]#[0.5, 2.0]#.
| code:pow(x, y)
2+| Inherited from code:exp2(y {times} code:log2(x)).
| code:sqrt()
2+| Inherited from 1.0 / code:inversesqrt().
| code:inversesqrt()
2+| 2 ULP.
| code:radians(x)
2+| Inherited from latexmath:[\frac{x \times \pi}{180}].
| code:degrees(x)
2+| Inherited from latexmath:[\frac{x \times 180}{\pi}].
| code:sin()
| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. | Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
| code:cos()
| Absolute error latexmath:[\leq 2^{-11}] inside the range latexmath:[[-\pi, \pi\]]. | Absolute error latexmath:[\leq 2^{-7}] inside the range latexmath:[[-\pi, \pi\]].
| code:tan()
2+| Inherited from latexmath:[\frac{sin()}{cos()}].
| code:asin(x)
2+| Inherited from latexmath:[atan2(x, sqrt(1.0 - x^2))].
| code:acos(x)
2+| Inherited from latexmath:[atan2(sqrt(1.0 - x^2), x)].
| code:atan(), code:atan2()
| 4096 ULP | 5 ULP.
| code:sinh(x)
2+| Inherited from latexmath:[(exp(x) - exp(-x)) \times 0.5].
| code:cosh(x)
2+| Inherited from latexmath:[(exp(x) + exp(-x)) \times 0.5].
| code:tanh()
2+| Inherited from latexmath:[\frac{sinh()}{cosh()}].
| code:asinh(x)
2+| Inherited from latexmath:[log(x + sqrt(x^2 + 1.0))].
| code:acosh(x)
2+| Inherited from latexmath:[log(x + sqrt(x^2 - 1.0))].
| code:atanh(x)
2+| Inherited from latexmath:[log(\frac{1.0 + x}{1.0 - x}) \times 0.5].
| code:frexp()
2+| Correctly rounded.
| code:ldexp()
2+| Correctly rounded.
| code:length(x)
2+| Inherited from latexmath:[sqrt(dot(x, x))].
| code:distance(x, y)
2+| Inherited from latexmath:[length(x - y)].
| code:cross()
2+| Inherited from [eq]#code:OpFSub(code:OpFMul, code:OpFMul)#.
| code:normalize(x)
2+| Inherited from latexmath:[\frac{x}{length(x)}].
| code:faceforward
2+| Correctly rounded.
| code:reflect(x, y)
2+| Inherited from [eq]#x - 2.0 {times} code:dot(y, x) {times} y#.
| code:refract(I, N, eta)
2+| Inherited from [eq]#eta {times} I - (eta {times} code:dot(N, I) + code:sqrt(k)) {times} N#.
| code:round
2+| Correctly rounded.
| code:roundEven
2+| Correctly rounded.
| code:trunc
2+| Correctly rounded.
| code:fabs
2+| Correctly rounded.
| code:fsign
2+| Correctly rounded.
| code:floor
2+| Correctly rounded.
| code:ceil
2+| Correctly rounded.
| code:fract
2+| Correctly rounded.
| code:modf
2+| Correctly rounded.
| code:fmin
2+| Correctly rounded.
| code:fmax
2+| Correctly rounded.
| code:fclamp
2+| Correctly rounded.
| code:fmix(x, y, a)
2+| Inherited from [eq]#x {times} (1.0 - a) + y {times} a#.
| code:step
2+| Correctly rounded.
| code:smoothStep(edge0, edge1, x)
2+| Inherited from [eq]#t {times} t {times} (3.0 - 2.0 {times} t)#,
where latexmath:[t = clamp(\frac{x - edge0}{edge1 - edge0}, 0.0, 1.0)].
| code:nmin
2+| Correctly rounded.
| code:nmax
2+| Correctly rounded.
| code:nclamp
2+| Correctly rounded.
|====
endif::VK_KHR_shader_float16_int8[]
ifndef::VK_KHR_shader_float16_int8[]
For single precision (32 bit) instructions, precisions are required: to be
at least as follows, unless decorated with RelaxedPrecision:
@ -844,6 +1235,7 @@ at least as follows, unless decorated with RelaxedPrecision:
| code:sqrt() | Inherited from 1.0 / code:inversesqrt().
| code:inversesqrt() | 2 ULP.
|====
endif::VK_KHR_shader_float16_int8[]
GLSL.std.450 extended instructions specifically defined in terms of the
above instructions inherit the above errors.

View File

@ -44,8 +44,11 @@ include::../api/protos/vkSetDebugUtilsObjectNameEXT.txt[]
.Valid Usage
****
* pname:pNameInfo\->pname:objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
* pname:pNameInfo\->pname:objectHandle must: not be dlink:VK_NULL_HANDLE
* [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02587]]
pname:pNameInfo\->pname:objectType must: not be
ename:VK_OBJECT_TYPE_UNKNOWN
* [[VUID-vkSetDebugUtilsObjectNameEXT-pNameInfo-02588]]
pname:pNameInfo\->pname:objectHandle must: not be dlink:VK_NULL_HANDLE
****
include::../validity/protos/vkSetDebugUtilsObjectNameEXT.txt[]
@ -74,12 +77,13 @@ removed.
.Valid Usage
****
* If pname:objectType is ename:VK_OBJECT_TYPE_UNKNOWN,
pname:objectHandle must: not be dlink:VK_NULL_HANDLE
* If pname:objectType is not ename:VK_OBJECT_TYPE_UNKNOWN,
pname:objectHandle must: be dlink:VK_NULL_HANDLE or
a valid Vulkan handle of the type associated with pname:objectType
as defined in the
* [[VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02589]]
If pname:objectType is ename:VK_OBJECT_TYPE_UNKNOWN, pname:objectHandle
must: not be dlink:VK_NULL_HANDLE
* [[VUID-VkDebugUtilsObjectNameInfoEXT-objectType-02590]]
If pname:objectType is not ename:VK_OBJECT_TYPE_UNKNOWN,
pname:objectHandle must: be dlink:VK_NULL_HANDLE or a valid Vulkan
handle of the type associated with pname:objectType as defined in the
<<debugging-object-types, VkObjectType and Vulkan Handle Relationship>>
table
****
@ -143,9 +147,8 @@ be used by that implementation.
pname:objectType must: not be ename:VK_OBJECT_TYPE_UNKNOWN
* [[VUID-VkDebugUtilsObjectTagInfoEXT-objectHandle-01910]]
pname:objectHandle must: be a valid Vulkan handle of the type associated
with pname:objectType as defined in the
<<debugging-object-types, VkObjectType and Vulkan Handle Relationship>>
table
with pname:objectType as defined in the <<debugging-object-types,
VkObjectType and Vulkan Handle Relationship>> table
****
include::../validity/structs/VkDebugUtilsObjectTagInfoEXT.txt[]
@ -385,8 +388,8 @@ include::../api/protos/vkCreateDebugUtilsMessengerEXT.txt[]
include::../validity/protos/vkCreateDebugUtilsMessengerEXT.txt[]
The application must: ensure that flink:vkCreateDebugUtilsMessengerEXT is not
executed in parallel with any Vulkan command that is also called with
The application must: ensure that flink:vkCreateDebugUtilsMessengerEXT is
not executed in parallel with any Vulkan command that is also called with
pname:instance or child of pname:instance as the dispatchable argument.
--
@ -677,7 +680,8 @@ registered.
.Valid Usage
****
* pname:objectType member of each element of
* [[VUID-vkSubmitDebugUtilsMessageEXT-objectType-02591]]
pname:objectType member of each element of
pname:pCallbackData\->pname:pObjects must: not be
ename:VK_OBJECT_TYPE_UNKNOWN
****
@ -715,8 +719,8 @@ include::../api/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
include::../validity/protos/vkDestroyDebugUtilsMessengerEXT.txt[]
The application must: ensure that flink:vkDestroyDebugUtilsMessengerEXT is not
executed in parallel with any Vulkan command that is also called with
The application must: ensure that flink:vkDestroyDebugUtilsMessengerEXT is
not executed in parallel with any Vulkan command that is also called with
pname:instance or child of pname:instance as the dispatchable argument.
--

View File

@ -343,10 +343,9 @@ endif::VK_VERSION_1_1,VK_KHR_device_group[]
must: be a non-retired swapchain associated with native window referred
to by pname:surface
* [[VUID-VkSwapchainCreateInfoKHR-imageFormat-01778]]
pname:imageFormat, pname:imageUsage, pname:imageExtent, and
pname:imageArrayLayers must: be supported for ename:VK_IMAGE_TYPE_2D
ename:VK_IMAGE_TILING_OPTIMAL images as reported by
flink:vkGetPhysicalDeviceImageFormatProperties.
The <<swapchain-wsi-image-create-info, implied image creation
parameters>> of the swapchain must: be supported as reported by
flink:vkGetPhysicalDeviceImageFormatProperties
ifdef::VK_KHR_swapchain_mutable_format[]
* [[VUID-VkSwapchainCreateInfoKHR-flags-03168]]
If pname:flags contains ename:VK_SWAPCHAIN_CREATE_MUTABLE_FORMAT_BIT_KHR

View File

@ -82,8 +82,8 @@ Derivatives>>.
****
* [[VUID-VkRayTracingPipelineCreateInfoNV-flags-02404]]
If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineIndex is `-1`, pname:basePipelineHandle must:
be a valid handle to a ray tracing sname:VkPipeline
flag, and pname:basePipelineIndex is `-1`, pname:basePipelineHandle
must: be a valid handle to a ray tracing sname:VkPipeline
* [[VUID-VkRayTracingPipelineCreateInfoNV-flags-02405]]
If pname:flags contains the ename:VK_PIPELINE_CREATE_DERIVATIVE_BIT
flag, and pname:basePipelineHandle is dlink:VK_NULL_HANDLE,

View File

@ -75,9 +75,8 @@ include::../../api/structs/VkAccelerationStructureCreateInfoNV.txt[]
.Valid Usage
****
* [[VUID-VkAccelerationStructureCreateInfoNV-compactedSize-02421]]
If pname:compactedSize is not `0` then both
pname:info.geometryCount and pname:info.instanceCount
must: be `0`
If pname:compactedSize is not `0` then both pname:info.geometryCount and
pname:info.instanceCount must: be `0`
****
include::../../validity/structs/VkAccelerationStructureCreateInfoNV.txt[]
@ -127,7 +126,8 @@ flink:vkCmdBuildAccelerationStructureNV.
* [[VUID-VkAccelerationStructureInfoNV-type-02426]]
If pname:type is ename:VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_NV
then pname:instanceCount must: be `0`
* If pname:flags has the
* [[VUID-VkAccelerationStructureInfoNV-flags-02592]]
If pname:flags has the
ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_NV bit set,
then it must: not have the
ename:VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_NV bit set
@ -511,18 +511,21 @@ include::../../api/structs/VkBindAccelerationStructureMemoryInfoNV.txt[]
object
* [[VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-02451]]
pname:memoryOffset must: be less than the size of pname:memory
* pname:memory must: have been allocated using one of the memory types
* [[VUID-VkBindAccelerationStructureMemoryInfoNV-memory-02593]]
pname:memory must: have been allocated using one of the memory types
allowed in the pname:memoryTypeBits member of the
slink:VkMemoryRequirements structure returned from a call to
flink:vkGetAccelerationStructureMemoryRequirementsNV with
pname:accelerationStructure and pname:type of
ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
* pname:memoryOffset must: be an integer multiple of the pname:alignment
* [[VUID-VkBindAccelerationStructureMemoryInfoNV-memoryOffset-02594]]
pname:memoryOffset must: be an integer multiple of the pname:alignment
member of the slink:VkMemoryRequirements structure returned from a call
to flink:vkGetAccelerationStructureMemoryRequirementsNV with
pname:accelerationStructure and pname:type of
ename:VK_ACCELERATION_STRUCTURE_MEMORY_REQUIREMENTS_TYPE_OBJECT_NV
* The pname:size member of the sname:VkMemoryRequirements structure
* [[VUID-VkBindAccelerationStructureMemoryInfoNV-size-02595]]
The pname:size member of the sname:VkMemoryRequirements structure
returned from a call to
flink:vkGetAccelerationStructureMemoryRequirementsNV with
pname:accelerationStructure and pname:type of

View File

@ -23,8 +23,8 @@ Interaction between the different shader stages in the ray tracing pipeline
== Ray Tracing Commands
_Ray tracing commands_ provoke work in the ray tracing pipeline.
Ray tracing commands are recorded into a command buffer and when executed by
a queue will produce work that executes according to the currently bound
ray tracing pipeline.
a queue will produce work that executes according to the currently bound ray
tracing pipeline.
A ray tracing pipeline must: be bound to a command buffer before any ray
tracing commands are recorded in that command buffer.
@ -404,7 +404,8 @@ bytes of data.
slink:VkGeometryInstanceFlagBitsNV values that apply to this instance.
* pname:accelerationStructure.
The 8 byte value returned by flink:vkGetAccelerationStructureHandleNV
for the bottom level acceleration structure referred to by this instance.
for the bottom level acceleration structure referred to by this
instance.
[NOTE]
.Note
@ -437,9 +438,9 @@ include::../../api/enums/VkGeometryInstanceFlagBitsNV.txt[]
* ename:VK_GEOMETRY_INSTANCE_TRIANGLE_CULL_DISABLE_BIT_NV disables face
culling for this instance.
* ename:VK_GEOMETRY_INSTANCE_TRIANGLE_FRONT_COUNTERCLOCKWISE_BIT_NV
indicates that the front face of the triangle for culling purposes
is the face that is counter clockwise in object space relative to the
ray origin.
indicates that the front face of the triangle for culling purposes is
the face that is counter clockwise in object space relative to the ray
origin.
Because the facing is determined in object space, an instance transform
matrix does not change the winding, but a geometry transform does.
* ename:VK_GEOMETRY_INSTANCE_FORCE_OPAQUE_BIT_NV causes this instance to
@ -536,8 +537,8 @@ include::../../api/protos/vkCmdBuildAccelerationStructureNV.txt[]
If pname:update is ename:VK_TRUE, pname:src must: not be
ename:VK_NULL_HANDLE
* [[VUID-vkCmdBuildAccelerationStructureNV-update-02490]]
If pname:update is ename:VK_TRUE, pname:src must: have been built before with
ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV set in
If pname:update is ename:VK_TRUE, pname:src must: have been built before
with ename:VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_NV set in
slink:VkAccelerationStructureInfoNV::pname:flags
* [[VUID-vkCmdBuildAccelerationStructureNV-update-02491]]
If pname:update is ename:VK_FALSE, The pname:size member of the

View File

@ -20,10 +20,10 @@ commands are recorded in that command buffer.
ifdef::VK_NV_mesh_shader[]
Drawing can be achieved in two modes:
* <<drawing-mesh-shading,Programmable Mesh Shading>>, the mesh shader
assembles primitives, or
* <<drawing-primitive-shading,Programmable Primitive Shading>>, the input
primitives are assembled
* <<drawing-mesh-shading,Programmable Mesh Shading>>, the mesh shader
assembles primitives, or
* <<drawing-primitive-shading,Programmable Primitive Shading>>, the input
primitives are assembled
as follows.
endif::VK_NV_mesh_shader[]

View File

@ -383,19 +383,19 @@ binding for that vertex shader invocation are considered out of bounds.
* [[features-features-multiViewport]] pname:multiViewport specifies
whether more than one viewport is supported.
If this feature is not enabled:
** The pname:viewportCount and pname:scissorCount members of the
sname:VkPipelineViewportStateCreateInfo structure must: be set to 1.
** The pname:firstViewport and pname:viewportCount parameters to the
fname:vkCmdSetViewport command must: be set to 0 and 1, respectively.
** The pname:firstScissor and pname:scissorCount parameters to the
fname:vkCmdSetScissor command must: be set to 0 and 1, respectively.
** The pname:viewportCount and pname:scissorCount members of the
sname:VkPipelineViewportStateCreateInfo structure must: be set to 1.
** The pname:firstViewport and pname:viewportCount parameters to the
fname:vkCmdSetViewport command must: be set to 0 and 1, respectively.
** The pname:firstScissor and pname:scissorCount parameters to the
fname:vkCmdSetScissor command must: be set to 0 and 1, respectively.
ifdef::VK_NV_scissor_exclusive[]
** The pname:exclusiveScissorCount member of the
sname:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
must: be set to 0 or 1.
** The pname:firstExclusiveScissor and pname:exclusiveScissorCount
parameters to the fname:vkCmdSetExclusiveScissorNV command must: be
set to 0 and 1, respectively.
** The pname:exclusiveScissorCount member of the
sname:VkPipelineViewportExclusiveScissorStateCreateInfoNV structure
must: be set to 0 or 1.
** The pname:firstExclusiveScissor and pname:exclusiveScissorCount
parameters to the fname:vkCmdSetExclusiveScissorNV command must: be set
to 0 and 1, respectively.
endif::VK_NV_scissor_exclusive[]
* [[features-features-samplerAnisotropy]] pname:samplerAnisotropy
specifies whether anisotropic filtering is supported.
@ -910,8 +910,6 @@ include::../validity/structs/VkPhysicalDeviceShaderAtomicInt64FeaturesKHR.txt[]
--
endif::VK_KHR_shader_atomic_int64[]
ifdef::VK_KHR_8bit_storage[]
[open,refpage='VkPhysicalDevice8BitStorageFeaturesKHR',desc='Structure describing features supported by VK_KHR_8bit_storage',type='structs']
--
@ -1021,8 +1019,39 @@ include::../validity/structs/VkPhysicalDevice16BitStorageFeatures.txt[]
--
endif::VK_VERSION_1_1,VK_KHR_16bit_storage[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_KHR_shader_float16_int8[]
[open,refpage='VkPhysicalDeviceFloat16Int8FeaturesKHR',desc='Structure describing features supported by VK_KHR_shader_float16_int8',type='structs']
--
To query features additionally supported by the +VK_KHR_shader_float16_int8+
extension, call flink:vkGetPhysicalDeviceFeatures2KHR with a
sname:VkPhysicalDeviceFloat16Int8FeaturesKHR structure in the pname:pNext
chain.
The sname:VkPhysicalDeviceFloat16Int8FeaturesKHR structure can: also be in
the pname:pNext chain of a slink:VkDeviceCreateInfo structure, in which case
it controls which additional features are enabled in the device.
The sname:VkPhysicalDeviceFloat16Int8FeaturesKHR structure is defined as:
include::../api/structs/VkPhysicalDeviceFloat16Int8FeaturesKHR.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[features-features-shaderFloat16]] pname:shaderFloat16 indicates
whether 16-bit floats (halfs) are supported in shader code.
This also indicates whether shader modules can: declare the code:Float16
capability.
* [[features-features-shaderInt8]] pname:shaderInt8 indicates whether
8-bit integers (signed and unsigned) are supported in shader code.
This also indicates whether shader modules can: declare the code:Int8
capability.
include::../validity/structs/VkPhysicalDeviceFloat16Int8FeaturesKHR.txt[]
--
endif::VK_KHR_shader_float16_int8[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
[open,refpage='VkPhysicalDeviceSamplerYcbcrConversionFeatures',desc='Structure describing Y\'CbCr conversion features that can be supported by an implementation',type='structs']
--
@ -1501,7 +1530,6 @@ include::../api/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
code:VulkanMemoryModelDeviceScopeKHR capability.
include::../validity/structs/VkPhysicalDeviceVulkanMemoryModelFeaturesKHR.txt[]
--
endif::VK_KHR_vulkan_memory_model[]
@ -2334,9 +2362,18 @@ endif::VK_EXT_descriptor_indexing[]
fragment shader stage.
* [[features-limits-maxComputeSharedMemorySize]]
pname:maxComputeSharedMemorySize is the maximum total storage size, in
bytes, of all variables declared with the code:WorkgroupLocal storage
bytes, available for variables declared with the code:Workgroup storage
class in shader modules (or with the code:shared storage qualifier in
GLSL) in the compute shader stage.
The amount of storage consumed by the variables declared with the
code:Workgroup storage class is implementation-dependent.
However, the amount of storage consumed may not exceed the largest block
size that would be obtained if all active variables declared with
code:Workgroup storage class were assigned offsets in an arbitrary order
by successively taking the smallest valid offset according to the
<<interfaces-resources-layout-std430,Standard Storage Buffer Layout>>
rules.
(This is equivalent to using the GLSL std430 layout rules.)
* [[features-limits-maxComputeWorkGroupCount]]
pname:maxComputeWorkGroupCount[3] is the maximum number of local
workgroups that can: be dispatched by a single dispatch command.
@ -2761,6 +2798,134 @@ include::../validity/structs/VkPhysicalDeviceMultiviewProperties.txt[]
endif::VK_VERSION_1_1,VK_KHR_multiview[]
ifdef::VK_KHR_shader_float_controls[]
[open,refpage='VkPhysicalDeviceFloatControlsPropertiesKHR',desc='Structure describing properties supported by VK_KHR_shader_float_controls',type='structs']
--
The members of the sname:VkPhysicalDeviceFloatControlsPropertiesKHR
structure describe the following implementation-dependent limits:
include::../api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
* [[features-features-separateDenormSettings]]
pname:separateDenormSettings is a boolean value indicating whether the
implementation supports separate settings for 16-bit and 64-bit
denormals.
* [[features-features-separateRoundingModeSettings]]
pname:separateRoundingModeSettings is a boolean value indicating whether
the implementation supports separate rounding modes for 16-bit and
64-bit floating point instructions.
* [[features-features-shaderSignedZeroInfNanPreserveFloat16]]
pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
latexmath:[\pm\infty] can: be preserved in 16-bit floating-point
computations.
It also indicates whether the code:SignedZeroInfNanPreserve execution
mode can: be used for 16-bit floating-point types.
* [[features-features-shaderSignedZeroInfNanPreserveFloat32]]
pname:shaderSignedZeroInfNanPreserveFloat32 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
latexmath:[\pm\infty] can: be preserved in 32-bit floating-point
computations.
It also indicates whether the code:SignedZeroInfNanPreserve execution
mode can: be used for 32-bit floating-point types.
* [[features-features-shaderSignedZeroInfNanPreserveFloat64]]
pname:shaderSignedZeroInfNanPreserveFloat64 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
latexmath:[\pm\infty] can: be preserved in 64-bit floating-point
computations.
It also indicates whether the code:SignedZeroInfNanPreserve execution
mode can: be used for 64-bit floating-point types.
* [[features-features-shaderDenormPreserveFloat16]]
pname:shaderDenormPreserveFloat16 is a boolean value indicating whether
denormals can: be preserved in 16-bit floating-point computations.
It also indicates whether the code:DenormPreserve execution mode can: be
used for 16-bit floating-point types.
* [[features-features-shaderDenormPreserveFloat32]]
pname:shaderDenormPreserveFloat32 is a boolean value indicating whether
denormals can: be preserved in 32-bit floating-point computations.
It also indicates whether the code:DenormPreserve execution mode can: be
used for 32-bit floating-point types.
* [[features-features-shaderDenormPreserveFloat64]]
pname:shaderDenormPreserveFloat64 is a boolean value indicating whether
denormals can: be preserved in 64-bit floating-point computations.
It also indicates whether the code:DenormPreserve execution mode can: be
used for 64-bit floating-point types.
* [[features-features-shaderDenormFlushToZeroFloat16]]
pname:shaderDenormFlushToZeroFloat16 is a boolean value indicating
whether denormals can: be flushed to zero in 16-bit floating-point
computations.
It also indicates whether the code:DenormFlushToZero execution mode can:
be used for 16-bit floating-point types.
* [[features-features-shaderDenormFlushToZeroFloat32]]
pname:shaderDenormFlushToZeroFloat32 is a boolean value indicating
whether denormals can: be flushed to zero in 32-bit floating-point
computations.
It also indicates whether the code:DenormFlushToZero execution mode can:
be used for 32-bit floating-point types.
* [[features-features-shaderDenormFlushToZeroFloat64]]
pname:shaderDenormFlushToZeroFloat64 is a boolean value indicating
whether denormals can: be flushed to zero in 64-bit floating-point
computations.
It also indicates whether the code:DenormFlushToZero execution mode can:
be used for 64-bit floating-point types.
* [[features-features-shaderRoundingModeRTEFloat16]]
pname:shaderRoundingModeRTEFloat16 is a boolean value indicating whether
an implementation supports the round-to-nearest-even rounding mode for
16-bit floating-point arithmetic and conversion instructions.
It also indicates whether the code:RoundingModeRTE execution mode can:
be used for 16-bit floating-point types.
* [[features-features-shaderRoundingModeRTEFloat32]]
pname:shaderRoundingModeRTEFloat32 is a boolean value indicating whether
an implementation supports the round-to-nearest-even rounding mode for
32-bit floating-point arithmetic and conversion instructions.
It also indicates whether the code:RoundingModeRTE execution mode can:
be used for 32-bit floating-point types.
* [[features-features-shaderRoundingModeRTEFloat64]]
pname:shaderRoundingModeRTEFloat64 is a boolean value indicating whether
an implementation supports the round-to-nearest-even rounding mode for
64-bit floating-point arithmetic and conversion instructions.
It also indicates whether the code:RoundingModeRTE execution mode can:
be used for 64-bit floating-point types.
* [[features-features-shaderRoundingModeRTZFloat16]]
pname:shaderRoundingModeRTZFloat16 is a boolean value indicating whether
an implementation supports the round-towards-zero rounding mode for
16-bit floating-point arithmetic and conversion instructions.
It also indicates whether the code:RoundingModeRTZ execution mode can:
be used for 16-bit floating-point types.
* [[features-features-shaderRoundingModeRTZFloat32]]
pname:shaderRoundingModeRTZFloat32 is a boolean value indicating whether
an implementation supports the round-towards-zero rounding mode for
32-bit floating-point arithmetic and conversion instructions.
It also indicates whether the code:RoundingModeRTZ execution mode can:
be used for 32-bit floating-point types.
* [[features-features-shaderRoundingModeRTZFloat64]]
pname:shaderRoundingModeRTZFloat64 is a boolean value indicating whether
an implementation supports the round-towards-zero rounding mode for
64-bit floating-point arithmetic and conversion instructions.
It also indicates whether the code:RoundingModeRTZ execution mode can:
be used for 64-bit floating-point types.
ifdef::editing-notes[]
[NOTE]
.editing-note
====
Implementations may not be able to control behavior of denorms for
floating-point atomics.
This needs to be taken into account when such atomics will be added to
Vulkan.
====
endif::editing-notes[]
If the sname:VkPhysicalDeviceFloatControlsPropertiesKHR structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
include::../validity/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
--
endif::VK_KHR_shader_float_controls[]
ifdef::VK_EXT_discard_rectangles[]
[open,refpage='VkPhysicalDeviceDiscardRectanglePropertiesEXT',desc='Structure describing discard rectangle limits that can be supported by an implementation',type='structs']
@ -3963,6 +4128,7 @@ include::../validity/structs/VkPhysicalDeviceRayTracingPropertiesNV.txt[]
--
endif::VK_NV_ray_tracing[]
[[features-limits-minmax]]
=== Limit Requirements
@ -7648,24 +7814,24 @@ include::../api/structs/VkImageFormatProperties.txt[]
[eq]#pname:maxExtent.height#, and [eq]#pname:maxExtent.depth#, except
when one of the following conditions is true, in which case it may:
instead be `1`:
** fname:vkGetPhysicalDeviceImageFormatProperties::pname:tiling was
ename:VK_IMAGE_TILING_LINEAR
** fname:vkGetPhysicalDeviceImageFormatProperties::pname:tiling was
ename:VK_IMAGE_TILING_LINEAR
ifdef::VK_EXT_image_drm_format_modifier[]
** slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling was
ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
** slink:VkPhysicalDeviceImageFormatInfo2::pname:tiling was
ename:VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT
endif::VK_EXT_image_drm_format_modifier[]
ifdef::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
** the slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain
included an instance of slink:VkPhysicalDeviceExternalImageFormatInfo
with a handle type included in the pname:handleTypes member for which
mipmap image support is not required
** the slink:VkPhysicalDeviceImageFormatInfo2::pname:pNext chain included
an instance of slink:VkPhysicalDeviceExternalImageFormatInfo with a
handle type included in the pname:handleTypes member for which mipmap
image support is not required
endif::VK_VERSION_1_1,VK_KHR_external_memory_capabilities[]
ifdef::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
** image pname:format is one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>>
** image pname:format is one of those listed in
<<features-formats-requiring-sampler-ycbcr-conversion>>
endif::VK_VERSION_1_1,VK_KHR_sampler_ycbcr_conversion[]
ifdef::VK_EXT_fragment_density_map[]
** pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
** pname:flags contains ename:VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT
endif::VK_EXT_fragment_density_map[]
* pname:maxArrayLayers is the maximum number of array layers.
* If pname:tiling is ename:VK_IMAGE_TILING_LINEAR, then
@ -8161,9 +8327,9 @@ endif::VK_KHR_external_memory_capabilities[]
* ename:VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT specifies that
images or buffers created with the specified parameters and handle type
must: use the mechanisms defined in the `<<VK_NV_dedicated_allocation>>`
extension to create (or import) a dedicated allocation for the image or
buffer.
must: use the mechanisms defined by slink:VkMemoryDedicatedRequirements
and slink:VkMemoryDedicatedAllocateInfo to create (or import) a
dedicated allocation for the image or buffer.
* ename:VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT specifies that handles
of this type can: be exported from Vulkan memory objects.
* ename:VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT specifies that handles

View File

@ -1695,6 +1695,12 @@ variable decorated with the code:RayTmaxNV decoration.
+
The code:HitTNV decoration must: only be used in any hit and closest hit
shaders.
+
Any variable decorated with code:HitTNV must: be declared using the
code:Input storage class.
+
Any variable decorated with code:HitTNV must: be declared as a scalar 32-bit
floating-point value.
[[interfaces-builtin-variables-incomingrayflags]]
code:IncomingRayFlagsNV::
@ -1818,7 +1824,7 @@ code:LaunchIDNV::
A variable decorated with the code:LaunchIDNV decoration will specify the
index of the work item being process.
One work item is generated for each of the pname:width {times} pname:height
items dispatched by a flink:vkCmdTraceRaysNV command.
{times} pname:depth items dispatched by a flink:vkCmdTraceRaysNV command.
All shader invocations inherit the same value for variables decorated with
code:LaunchIDNV.
+
@ -1829,16 +1835,16 @@ Any variable decorated with code:LaunchIDNV must: be declared using the
code:Input storage class.
+
Any variable decorated with code:LaunchIDNV must: be declared as a
two-component vector of 32-bit floating-point values.
three-component vector of 32-bit integer values.
[[interfaces-builtin-variables-launchsize]]
code:LaunchSizeNV::
A variable decorated with the code:LaunchSizeNV decoration will contain the
pname:width and pname:height dimensions passed to the flink:vkCmdTraceRaysNV
command that initiated this shader execution.
The pname:width is in the first component, and the pname:height is in the
second component.
pname:width, pname:height, and pname:depth dimensions passed to the
flink:vkCmdTraceRaysNV command that initiated this shader execution.
The pname:width is in the first component, the pname:height is in the second
component, and the pname:depth is in the third component.
+
The code:LaunchSizeNV decoration must: only be used within ray generation,
intersection, any hit, closest hit, and miss shaders.
@ -1847,7 +1853,7 @@ Any variable decorated with code:LaunchSizeNV must: be declared using the
code:Input storage class.
+
Any variable decorated with code:LaunchSizeNV must: be declared as a
two-component vector of 32-bit floating-point values.
three-component vector of 32-bit integer values.
endif::VK_NV_ray_tracing[]
[[interfaces-builtin-variables-layer]]
@ -2427,12 +2433,12 @@ array of scalar 32-bit integers.
The array must: be sized according to the primitive type and
code:OutputPrimitivesNV execution modes, where the size is:
* the value specified by code:OutputPrimitivesNV if the execution mode is
code:OutputPoints,
* two times the value specified by code:OutputPrimitivesNV if the execution
mode is code:OutputLinesNV, or
* three times the value specified by code:OutputPrimitivesNV if the
execution mode is code:OutputTrianglesNV.
* the value specified by code:OutputPrimitivesNV if the execution mode is
code:OutputPoints,
* two times the value specified by code:OutputPrimitivesNV if the
execution mode is code:OutputLinesNV, or
* three times the value specified by code:OutputPrimitivesNV if the
execution mode is code:OutputTrianglesNV.
endif::VK_NV_mesh_shader[]
ifdef::VK_NV_ray_tracing[]

View File

@ -1155,8 +1155,15 @@ ifdef::VK_ANDROID_external_memory_android_hardware_buffer[]
dlink:VK_NULL_HANDLE, and the Android hardware buffer's
code:AHardwareBuffer::code:usage includes
code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
either have a complete mipmap chain, or it must: have exactly `1` mip
level.
have a complete mipmap chain.
* [[VUID-VkMemoryAllocateInfo-pNext-02586]]
If the parameters define an import operation, the external handle is an
Android hardware buffer, and the pname:pNext chain includes an instance
of slink:VkMemoryDedicatedAllocateInfo with pname:image that is not
dlink:VK_NULL_HANDLE, and the Android hardware buffer's
code:AHardwareBuffer::code:usage does not include
code:AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE, the pname:image must:
have exactly one mipmap level.
* [[VUID-VkMemoryAllocateInfo-pNext-02390]]
If the parameters define an import operation, the external handle is an
Android hardware buffer, and the pname:pNext chain includes an instance

View File

@ -802,8 +802,9 @@ include::../api/protos/vkCmdBindShadingRateImageNV.txt[]
If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have a format
of ename:VK_FORMAT_R8_UINT.
* [[VUID-vkCmdBindShadingRateImageNV-imageView-02061]]
If pname:imageView is not dlink:VK_NULL_HANDLE, the image must: have
been created with ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV set
If pname:imageView is not dlink:VK_NULL_HANDLE, it must: have been
created with a pname:usage value including
ename:VK_IMAGE_USAGE_SHADING_RATE_IMAGE_BIT_NV
* [[VUID-vkCmdBindShadingRateImageNV-imageView-02062]]
If pname:imageView is not dlink:VK_NULL_HANDLE, pname:imageLayout must:
match the actual elink:VkImageLayout of each subresource accessible from

View File

@ -2350,10 +2350,10 @@ record the commands for the first subpass of that render pass.
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
// The VU below comes in an alternate version when the extension is
// enabled.
ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
@ -2365,9 +2365,10 @@ ifndef::VK_VERSION_1_1,VK_KHR_maintenance2[]
pname:pRenderPassBegin is
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
corresponding attachment image subresource of the framebuffer specified
in the pname:framebuffer member of pname:pRenderPassBegin must: have
been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
corresponding attachment image view of the framebuffer specified in the
pname:framebuffer member of pname:pRenderPassBegin must: have been
created with a pname:usage value including
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
// The nested ifdefs are there in anticipation of the hoped-for day when the
// VU extractor and validation layers can handle VU with imbedded
@ -2385,9 +2386,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
// endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
corresponding attachment image subresource of the framebuffer specified
in the pname:framebuffer member of pname:pRenderPassBegin must: have
been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
corresponding attachment image view of the framebuffer specified in the
pname:framebuffer member of pname:pRenderPassBegin must: have been
created with a pname:usage value including
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
* [[VUID-vkCmdBeginRenderPass-initialLayout-00897]]
If any of the pname:initialLayout or pname:finalLayout member of the
@ -2395,28 +2397,31 @@ endif::VK_VERSION_1_1,VK_KHR_maintenance2[]
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_SAMPLED_BIT or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
* [[VUID-vkCmdBeginRenderPass-initialLayout-00898]]
If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
* [[VUID-vkCmdBeginRenderPass-initialLayout-00899]]
If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
* [[VUID-vkCmdBeginRenderPass-initialLayout-00900]]
If any of the pname:initialLayout members of the
sname:VkAttachmentDescription structures specified when creating the
@ -2471,10 +2476,10 @@ record the commands for the first subpass of that render pass.
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
* [[VUID-vkCmdBeginRenderPass2KHR-initialLayout-03096]]
If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
@ -2485,37 +2490,41 @@ record the commands for the first subpass of that render pass.
ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, or
ename:VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL then the
corresponding attachment image subresource of the framebuffer specified
in the pname:framebuffer member of pname:pRenderPassBegin must: have
been created with ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT set
corresponding attachment image view of the framebuffer specified in the
pname:framebuffer member of pname:pRenderPassBegin must: have been
created with a pname:usage value including
ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
* [[VUID-vkCmdBeginRenderPass2KHR-initialLayout-03097]]
If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_SAMPLED_BIT or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_SAMPLED_BIT or
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
* [[VUID-vkCmdBeginRenderPass2KHR-initialLayout-03098]]
If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_TRANSFER_SRC_BIT
* [[VUID-vkCmdBeginRenderPass2KHR-initialLayout-03099]]
If any of the pname:initialLayout or pname:finalLayout member of the
sname:VkAttachmentDescription structures or the pname:layout member of
the sname:VkAttachmentReference structures specified when creating the
render pass specified in the pname:renderPass member of
pname:pRenderPassBegin is ename:VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
then the corresponding attachment image subresource of the framebuffer
then the corresponding attachment image view of the framebuffer
specified in the pname:framebuffer member of pname:pRenderPassBegin
must: have been created with ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT set
must: have been created with a pname:usage value including
ename:VK_IMAGE_USAGE_TRANSFER_DST_BIT
* [[VUID-vkCmdBeginRenderPass2KHR-initialLayout-03100]]
If any of the pname:initialLayout members of the
sname:VkAttachmentDescription structures specified when creating the

View File

@ -1360,6 +1360,17 @@ When this structure is not present in the pname:pNext chain of
sname:VkImageCreateInfo then the implicit value of pname:stencilUsage
matches that of sname:VkImageCreateInfo::pname:usage.
When this structure is present sname:VkImageCreateInfo::pname:usage
specifies the intended usage of the depth aspect of the image and
sname:VkImageStencilUsageCreateInfoEXT::stencilUsage specifies the intended
usage of the stencil aspect of the image.
However, for the purposes of determining image specific valid usage
conditions, the image itself is considered to be created with a particular
elink:VkImageUsageFlagBits value if either
sname:VkImageCreateInfo::pname:usage or
sname:VkImageStencilUsageCreateInfoEXT::stencil usage includes that bit
value.
This structure can: also be included in the pname:pNext chain of
slink:VkPhysicalDeviceImageFormatInfo2 to query additional capabilities
specific to image creation parameter combinations including a separate set
@ -2503,10 +2514,10 @@ The type(s) of device access supported by each layout are:
combined image/sampler and/or input attachment).
This layout is valid only for image subresources of images created with
the ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bit enabled.
Only image subresources of images created with
Only image views created with a pname:usage value including
ename:VK_IMAGE_USAGE_SAMPLED_BIT can: be used as a sampled image or
combined image/sampler in a shader.
Similarly, only image subresources of images created with
Similarly, only image views created with a pname:usage value including
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT can: be used as input
attachments.
ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
@ -2517,10 +2528,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
and/or input attachment) where only the depth aspect is accessed.
This layout is valid only for image subresources of images created with
the ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bit enabled.
Only image subresources of images created with
Only image views created with a pname:usage value including
ename:VK_IMAGE_USAGE_SAMPLED_BIT can: be used as a sampled image or
combined image/sampler in a shader.
Similarly, only image subresources of images created with
Similarly, only image views created with a pname:usage value including
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT can: be used as input
attachments.
* ename:VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL: must:
@ -2530,10 +2541,10 @@ ifdef::VK_VERSION_1_1,VK_KHR_maintenance2[]
and/or input attachment) where only the stencil aspect is accessed.
This layout is valid only for image subresources of images created with
the ename:VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT usage bit enabled.
Only image subresources of images created with
Only image views created with a pname:usage value including
ename:VK_IMAGE_USAGE_SAMPLED_BIT can: be used as a sampled image or
combined image/sampler in a shader.
Similarly, only image subresources of images created with
Similarly, only image views created with a pname:usage value including
ename:VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT can: be used as input
attachments.
endif::VK_VERSION_1_1,VK_KHR_maintenance2[]

View File

@ -921,11 +921,11 @@ section.
* If the pname:chromaFilter member of the
slink:VkSamplerYcbcrConversionCreateInfo structure is
ename:VK_FILTER_NEAREST:
** If the format's R and B channels are reduced in resolution in just
width by a factor of two relative to the G channel (i.e. this is a
"`etext:_422`" format), the latexmath:[\tau_{ijk}[level\]] values
accessed by <<textures-texel-filtering,texel filtering>> are
reconstructed as follows:
** If the format's R and B channels are reduced in resolution in just
width by a factor of two relative to the G channel (i.e. this is a
"`etext:_422`" format), the latexmath:[\tau_{ijk}[level\]] values
accessed by <<textures-texel-filtering,texel filtering>> are
reconstructed as follows:
+
[latexmath]
++++++++++++++
@ -935,11 +935,11 @@ section.
\end{aligned}
++++++++++++++
** If the format's R and B channels are reduced in resolution in width
and height by a factor of two relative to the G channel (i.e. this is
a "`etext:_420`" format), the latexmath:[\tau_{ijk}[level\]] values
accessed by <<textures-texel-filtering,texel filtering>> are
reconstructed as follows:
** If the format's R and B channels are reduced in resolution in width and
height by a factor of two relative to the G channel (i.e. this is a
"`etext:_420`" format), the latexmath:[\tau_{ijk}[level\]] values
accessed by <<textures-texel-filtering,texel filtering>> are
reconstructed as follows:
+
[latexmath]
++++++++++++++

View File

@ -43,7 +43,7 @@ extern "C" {
#define VK_VERSION_MINOR(version) (((uint32_t)(version) >> 12) & 0x3ff)
#define VK_VERSION_PATCH(version) ((uint32_t)(version) & 0xfff)
// Version of this file
#define VK_HEADER_VERSION 94
#define VK_HEADER_VERSION 95
#define VK_NULL_HANDLE 0
@ -327,6 +327,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT = 1000081000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT = 1000081001,
VK_STRUCTURE_TYPE_CONDITIONAL_RENDERING_BEGIN_INFO_EXT = 1000081002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR = 1000082000,
VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = 1000084000,
VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = 1000086000,
VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = 1000086001,
@ -442,6 +443,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = 1000196000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = 1000197000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001,
@ -5493,6 +5495,19 @@ VKAPI_ATTR void VKAPI_CALL vkCmdPushDescriptorSetWithTemplateKHR(
const void* pData);
#endif
#define VK_KHR_shader_float16_int8 1
#define VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION 1
#define VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME "VK_KHR_shader_float16_int8"
typedef struct VkPhysicalDeviceFloat16Int8FeaturesKHR {
VkStructureType sType;
void* pNext;
VkBool32 shaderFloat16;
VkBool32 shaderInt8;
} VkPhysicalDeviceFloat16Int8FeaturesKHR;
#define VK_KHR_16bit_storage 1
#define VK_KHR_16BIT_STORAGE_SPEC_VERSION 1
#define VK_KHR_16BIT_STORAGE_EXTENSION_NAME "VK_KHR_16bit_storage"
@ -6149,6 +6164,34 @@ typedef struct VkPhysicalDeviceDriverPropertiesKHR {
#define VK_KHR_shader_float_controls 1
#define VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION 1
#define VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME "VK_KHR_shader_float_controls"
typedef struct VkPhysicalDeviceFloatControlsPropertiesKHR {
VkStructureType sType;
void* pNext;
VkBool32 separateDenormSettings;
VkBool32 separateRoundingModeSettings;
VkBool32 shaderSignedZeroInfNanPreserveFloat16;
VkBool32 shaderSignedZeroInfNanPreserveFloat32;
VkBool32 shaderSignedZeroInfNanPreserveFloat64;
VkBool32 shaderDenormPreserveFloat16;
VkBool32 shaderDenormPreserveFloat32;
VkBool32 shaderDenormPreserveFloat64;
VkBool32 shaderDenormFlushToZeroFloat16;
VkBool32 shaderDenormFlushToZeroFloat32;
VkBool32 shaderDenormFlushToZeroFloat64;
VkBool32 shaderRoundingModeRTEFloat16;
VkBool32 shaderRoundingModeRTEFloat32;
VkBool32 shaderRoundingModeRTEFloat64;
VkBool32 shaderRoundingModeRTZFloat16;
VkBool32 shaderRoundingModeRTZFloat32;
VkBool32 shaderRoundingModeRTZFloat64;
} VkPhysicalDeviceFloatControlsPropertiesKHR;
#define VK_KHR_swapchain_mutable_format 1
#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_SPEC_VERSION 1
#define VK_KHR_SWAPCHAIN_MUTABLE_FORMAT_EXTENSION_NAME "VK_KHR_swapchain_mutable_format"
@ -7475,11 +7518,11 @@ typedef struct VkDebugUtilsMessengerCallbackDataEXT {
int32_t messageIdNumber;
const char* pMessage;
uint32_t queueLabelCount;
VkDebugUtilsLabelEXT* pQueueLabels;
const VkDebugUtilsLabelEXT* pQueueLabels;
uint32_t cmdBufLabelCount;
VkDebugUtilsLabelEXT* pCmdBufLabels;
const VkDebugUtilsLabelEXT* pCmdBufLabels;
uint32_t objectCount;
VkDebugUtilsObjectNameInfoEXT* pObjects;
const VkDebugUtilsObjectNameInfoEXT* pObjects;
} VkDebugUtilsMessengerCallbackDataEXT;
typedef VkBool32 (VKAPI_PTR *PFN_vkDebugUtilsMessengerCallbackEXT)(

View File

@ -1,2 +1,2 @@
# The value to start tagging VU statements at, unless overridden by -nextvu
startVUID = 2586
startVUID = 2596

View File

@ -248,7 +248,7 @@ layers with Khronos, as described below.
To reserve an author ID, propose a merge request against
<<extensions-api-registry,`vk.xml`>> in the `master` branch.
The merge must add a `<tag>` XML tag and fill in the `name`, `author` and
+contact+ attributes with the requested author ID, the author's formal name
`contact` attributes with the requested author ID, the author's formal name
(e.g. company or project name), and contact email address, respectively.
The author ID will only be reserved once this merge request is accepted.
@ -424,18 +424,19 @@ Some aspects of the changes for this example extension are described below.
Changes for extensions include (but may not be limited to) the following:
* All extensions must add an appendix to the Vulkan specification.
The appendix should be modeled after the `VK_KHR_shader_draw_parameters`
extension in `appendices/VK_KHR_shader_draw_parameters.txt`, which
The appendix can be modeled after the `VK_KHR_shader_float_controls`
extension in `appendices/VK_KHR_shader_float_controls.txt.txt`, which
contains metainformation about the extension (as well as code examples,
and revision history).
This example is complicated because `VK_KHR_shader_draw_parameters` has
a variety of external dependencies and interactions.
The `VK_EXT_debug_marker` extension is a simpler, standalone example.
Other useful references are the `VK_KHR_shader_draw_parameters`
appendix, which includes a variety of external dependencies and
interactions, and the `VK_EXT_debug_marker` appendix, which is a
simpler, standalone example.
* In the preamble to the appendix, start with an asciidoc `include` of the
automatically generated meta information.
This information includes the extension name string, type, number,
revision, and contact information from +vk.xml+.
* Following the `include`, add as many of the following sections as are
revision, and contact information from `vk.xml`.
* Following the `include`, add as many of the following items as are
meaningful:
** *Status* - *Complete*, *Draft*, or other.
When an extension is published in the `master` branch, it is normally
@ -443,16 +444,42 @@ Changes for extensions include (but may not be limited to) the following:
time, unless it contains additional information.
** *Last Modified Date* - if wanted, although git log queries can provide
equivalent information.
** *IP Status* - Such as *No known IP claims*.
** *IP Status* - Such as *No known IP claims*, or more specific
information if there are known IP claims and the extension has, or has
not been ratified by the Khronos Board of Promoters.
** *Interactions and External Dependencies* - may include requirements or
interactions with optional Vulkan features, SPIR-V (+SPV+) and OpenGL
interactions with optional Vulkan features, SPIR-V (`SPV`) and OpenGL
extensions, and interactions (other than strictly requiring) with other
Vulkan extensions.
** *Contributors* - Names and corporate affiliations of people who have
made significant direct contributions to this extension.
* Following these items, add whitespace followed by a *Description*
section.
The first paragraph of this section should be a compact, standalone
description of the extension's functionality and purpose, suitable for
use in summaries of new functionality such as press releases or the
Vulkan change log.
Additional paragraphs expanding on the description may be added at the
author's discretion.
* Following the *Description* section, add the following sections, If
there are no new interfaces of a given type, use "`None`" as the body of
that section.
** *New Enum Constants* (include elink{cl} links to the enumerated type(s)
being extended, followed by ename{cl} links to each individual new
enumerant).
** *New Enums* (include elink{cl} links to the new enumerated type(s)).
** *New Structures* (include slink{cl} links to the new structure(s)).
** *New Functions* (include flink{cl} links to the new command(s)).
** *New SPIR-V Capabilities* (only for extensions adding new SPIR-V
capabilities; include xrefs to the appropriate new section of the List
of SPIR-V Capabilities in `appendices/spirvenv.txt`).
** *Issues* (in itemized list style, describing each significant issue
raised during development of the extension, and its resolution).
** *Version History* (in itemized list style, describing significant
functional changes to the extension during its development).
* Each extension's appendix file is automatically included from
`appendices/extensions.txt` via code generated from `vk.xml`.
It is no longer necessary to explicit include the appendices.
It is no longer necessary to explicitly include the appendices.
* Extensions usually make significant additions and changes to the Vulkan
specification.
They often add an entirely new chapter, or a new section of an existing
@ -728,7 +755,7 @@ For EXT and vendor extension bitmask types, reservations must be approved by
the listed contact of the extension.
Bits are not reserved, and must not be used in a published implementation or
specification until the reservation is merged into
<<extensions-api-registry,+vk.xml+>> by the registry maintainer.
<<extensions-api-registry,`vk.xml`>> by the registry maintainer.
== Required Extension Tokens
@ -789,7 +816,7 @@ the following definitions were in effect:
Expanding on previous discussion, extensions can add values to existing
enums; and can add their own commands, enums, typedefs, etc.
This is done by adding to <<extensions-api-registry,+vk.xml+>>.
This is done by adding to <<extensions-api-registry,`vk.xml`>>.
All such additions will be included in the Vulkan header files supplied by
Khronos.
@ -821,6 +848,7 @@ The use of a `default:` statement, within a `switch`, may avoid future
compilation issues.
====
[[extension-function_prototypes]]
== Extension Function Prototypes

View File

@ -150,6 +150,9 @@ include::style/vuid.txt[]
= Revision History
* 2018-11-19 - Add details to the <<extensions-documenting-extensions,
Changes for New Extensions>> section including the new "`Description`"
section, and other standard parts of extension appendices.
* 2018-08-13 - Add %inline directive to the <<markup-sample-section-images,
Figures>> section (public pull request 734).
* 2018-07-30 - Added a section on <<writing-undefined, Describing Undefined

View File

@ -146,7 +146,7 @@ server.
<type category="define">// Vulkan 1.1 version number
#define <name>VK_API_VERSION_1_1</name> <type>VK_MAKE_VERSION</type>(1, 1, 0)// Patch version should always be set to 0</type>
<type category="define">// Version of this file
#define <name>VK_HEADER_VERSION</name> 94</type>
#define <name>VK_HEADER_VERSION</name> 95</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -2849,7 +2849,7 @@ server.
<member><type>VkBool32</type> <name>dstPremultiplied</name></member>
<member><type>VkBlendOverlapEXT</type> <name>blendOverlap</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceInlineUniformBlockFeaturesEXT" returnedonly="true" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<type category="struct" name="VkPhysicalDeviceInlineUniformBlockFeaturesEXT" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>inlineUniformBlock</name></member>
@ -2920,6 +2920,33 @@ server.
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>shaderDrawParameters</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceFloat16Int8FeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member> <!-- Pointer to next structure -->
<member><type>VkBool32</type> <name>shaderFloat16</name></member> <!-- 16-bit floats (halfs) in shaders -->
<member><type>VkBool32</type> <name>shaderInt8</name></member> <!-- 8-bit integers in shaders -->
</type>
<type category="struct" name="VkPhysicalDeviceFloatControlsPropertiesKHR" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>separateDenormSettings</name></member>
<member><type>VkBool32</type> <name>separateRoundingModeSettings</name></member>
<member><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat16</name></member> <!-- An implementation can preserve signed zero, nan, inf -->
<member><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat32</name></member> <!-- An implementation can preserve signed zero, nan, inf -->
<member><type>VkBool32</type> <name>shaderSignedZeroInfNanPreserveFloat64</name></member> <!-- An implementation can preserve signed zero, nan, inf -->
<member><type>VkBool32</type> <name>shaderDenormPreserveFloat16</name></member> <!-- An implementation can preserve denormals -->
<member><type>VkBool32</type> <name>shaderDenormPreserveFloat32</name></member> <!-- An implementation can preserve denormals -->
<member><type>VkBool32</type> <name>shaderDenormPreserveFloat64</name></member> <!-- An implementation can preserve denormals -->
<member><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat16</name></member> <!-- An implementation can flush to zero denormals -->
<member><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat32</name></member> <!-- An implementation can flush to zero denormals -->
<member><type>VkBool32</type> <name>shaderDenormFlushToZeroFloat64</name></member> <!-- An implementation can flush to zero denormals -->
<member><type>VkBool32</type> <name>shaderRoundingModeRTEFloat16</name></member> <!-- An implementation can support RTE -->
<member><type>VkBool32</type> <name>shaderRoundingModeRTEFloat32</name></member> <!-- An implementation can support RTE -->
<member><type>VkBool32</type> <name>shaderRoundingModeRTEFloat64</name></member> <!-- An implementation can support RTE -->
<member><type>VkBool32</type> <name>shaderRoundingModeRTZFloat16</name></member> <!-- An implementation can support RTZ -->
<member><type>VkBool32</type> <name>shaderRoundingModeRTZFloat32</name></member> <!-- An implementation can support RTZ -->
<member><type>VkBool32</type> <name>shaderRoundingModeRTZFloat64</name></member> <!-- An implementation can support RTZ -->
</type>
<type category="struct" name="VkNativeBufferANDROID">
<member values="VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"><type>VkStructureType</type> <name>sType</name></member>
<member>const <type>void</type>* <name>pNext</name></member>
@ -3269,7 +3296,7 @@ server.
<member><type>VkBool32</type> <name>conditionalRendering</name></member>
<member><type>VkBool32</type> <name>inheritedConditionalRendering</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceVulkanMemoryModelFeaturesKHR" returnedonly="true" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<type category="struct" name="VkPhysicalDeviceVulkanMemoryModelFeaturesKHR" structextends="VkPhysicalDeviceFeatures2,VkDeviceCreateInfo">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR"><type>VkStructureType</type> <name>sType</name></member>
<member noautovalidity="true"><type>void</type>* <name>pNext</name></member>
<member><type>VkBool32</type> <name>vulkanMemoryModel</name></member>
@ -8482,10 +8509,12 @@ server.
<type name="VkCommandBufferInheritanceConditionalRenderingInfoEXT"/>
</require>
</extension>
<extension name="VK_KHR_extension_83" number="83" author="KHR" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="disabled">
<extension name="VK_KHR_shader_float16_int8" number="83" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan">
<require>
<enum value="0" name="VK_KHR_EXTENSION_83_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_83&quot;" name="VK_KHR_EXTENSION_83_EXTENSION_NAME"/>
<enum value="1" name="VK_KHR_SHADER_FLOAT16_INT8_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_shader_float16_int8&quot;" name="VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR"/>
<type name="VkPhysicalDeviceFloat16Int8FeaturesKHR"/>
</require>
</extension>
<extension name="VK_KHR_16bit_storage" number="84" type="device" requires="VK_KHR_get_physical_device_properties2,VK_KHR_storage_buffer_storage_class" author="KHR" contact="Jan-Harald Fredriksen @janharaldfredriksen-arm" supported="vulkan" promotedto="VK_VERSION_1_1">
@ -9844,10 +9873,12 @@ server.
<type name="VkPhysicalDeviceDriverPropertiesKHR"/>
</require>
</extension>
<extension name="VK_ARM_extension_198" number="198" author="Alexander Galazin" contact="Alexander Galazin @alegal-arm" supported="disabled">
<extension name="VK_KHR_shader_float_controls" number="198" type="device" requires="VK_KHR_get_physical_device_properties2" author="KHR" contact="Alexander Galazin @alegal-arm" supported="vulkan">
<require>
<enum value="0" name="VK_ARM_EXTENSION_198_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_extension_198&quot;" name="VK_ARM_EXTENSION_198_EXTENSION_NAME"/>
<enum value="1" name="VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_shader_float_controls&quot;" name="VK_KHR_SHADER_FLOAT_CONTROLS_EXTENSION_NAME"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR"/>
<type name="VkPhysicalDeviceFloatControlsPropertiesKHR"/>
</require>
</extension>
<extension name="VK_NV_shader_subgroup_partitioned" number="199" type="device" requiresCore="1.1" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
@ -10210,5 +10241,11 @@ server.
<enum value="&quot;VK_EXT_extension_248&quot;" name="VK_EXT_EXTENSION_248_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_KHR_extension_249" number="249" author="KHR" contact="Keith Packard @keithp" supported="disabled">
<require>
<enum value="0" name="VK_KHR_EXTENSION_249_SPEC_VERSION"/>
<enum value="&quot;VK_KHR_extension_249&quot;" name="VK_KHR_EXTENSION_249_EXTENSION_NAME"/>
</require>
</extension>
</extensions>
</registry>