diff --git a/Makefile b/Makefile index 325f203a..84e06a07 100644 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/appendices/VK_KHR_shader_float16_int8.txt b/appendices/VK_KHR_shader_float16_int8.txt new file mode 100644 index 00000000..d0c5a870 --- /dev/null +++ b/appendices/VK_KHR_shader_float16_int8.txt @@ -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 `<>` + - This extension interacts with `<>` + - This extension interacts with `<>` +*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 <> and therefore doesn't supersede the +`<>` or `<>` 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 diff --git a/appendices/VK_KHR_shader_float_controls.txt b/appendices/VK_KHR_shader_float_controls.txt new file mode 100644 index 00000000..1962f943 --- /dev/null +++ b/appendices/VK_KHR_shader_float_controls.txt @@ -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 + + * <> + * <> + * <> + * <> + * <> + +=== 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 diff --git a/appendices/spirvenv.txt b/appendices/spirvenv.txt index dc9555d6..506c8cc0 100644 --- a/appendices/spirvenv.txt +++ b/appendices/spirvenv.txt @@ -201,9 +201,19 @@ ifdef::VK_EXT_descriptor_indexing[] | code:UniformTexelBufferArrayNonUniformIndexingEXT | <> | code:StorageTexelBufferArrayNonUniformIndexingEXT | <> 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[] + <> +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 | `<>` + `<>` 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 | <> +endif::VK_KHR_shader_float16_int8[] ifdef::VK_KHR_8bit_storage[] [[spirvenv-capabilities-table-8bitstorage]] | code:StorageBuffer8BitAccess | <> @@ -215,6 +225,14 @@ ifdef::VK_KHR_vulkan_memory_model[] | code:VulkanMemoryModelKHR | <> | code:VulkanMemoryModelDeviceScopeKHR | <> endif::VK_KHR_vulkan_memory_model[] +ifdef::VK_KHR_shader_float_controls[] +[[spirvenv-capabilities-table-shaderfloatcontrols]] +| code:DenormPreserve | <>, <>, <> +| code:DenormFlushToZero | <>, <>, <> +| code:SignedZeroInfNanPreserve | <>, <>, <> +| code:RoundingModeRTE | <>, <>, <> +| code:RoundingModeRTZ | <>, <>, <> +endif::VK_KHR_shader_float_controls[] ifdef::VK_NV_compute_shader_derivatives[] [[spirvenv-capabilities-table-computederivatives-quads]] | code:ComputeDerivativeGroupQuadsNV | <> @@ -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 + <> + 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 + <> + 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 + <> + is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 16-bit + floating-point type must: not be used. + * If + <> + is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 32-bit + floating-point type must: not be used. + * If + <> + is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 64-bit + floating-point type must: not be used. + * If + <> + is ename:VK_FALSE, then code:DenormPreserve for 16-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:DenormPreserve for 32-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:DenormPreserve for 64-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:DenormFlushToZero for 16-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:DenormFlushToZero for 32-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:DenormFlushToZero for 64-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:RoundingModeRTE for 16-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:RoundingModeRTE for 32-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:RoundingModeRTE for 64-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:RoundingModeRTZ for 16-bit floating-point + type must: not be used. + * If + <> + is ename:VK_FALSE, then code:RoundingModeRTZ for 32-bit floating-point + type must: not be used. + * If + <> + 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 <>, but subject to the + precisions allowed in the following table. + * Dividing a non-zero by a zero results in the appropriately signed +<> 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. diff --git a/chapters/VK_EXT_debug_utils.txt b/chapters/VK_EXT_debug_utils.txt index 26cdb270..89420354 100644 --- a/chapters/VK_EXT_debug_utils.txt +++ b/chapters/VK_EXT_debug_utils.txt @@ -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 <> 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 - <> - table + with pname:objectType as defined in the <> 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. -- diff --git a/chapters/VK_KHR_swapchain/wsi.txt b/chapters/VK_KHR_swapchain/wsi.txt index e3f1ac9e..ac3d59ca 100644 --- a/chapters/VK_KHR_swapchain/wsi.txt +++ b/chapters/VK_KHR_swapchain/wsi.txt @@ -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 <> 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 diff --git a/chapters/VK_NV_ray_tracing/raytracing-pipelines.txt b/chapters/VK_NV_ray_tracing/raytracing-pipelines.txt index 3524978e..dc978f82 100644 --- a/chapters/VK_NV_ray_tracing/raytracing-pipelines.txt +++ b/chapters/VK_NV_ray_tracing/raytracing-pipelines.txt @@ -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, diff --git a/chapters/VK_NV_ray_tracing/raytracing-resources.txt b/chapters/VK_NV_ray_tracing/raytracing-resources.txt index a07b9f94..f7f2dc54 100644 --- a/chapters/VK_NV_ray_tracing/raytracing-resources.txt +++ b/chapters/VK_NV_ray_tracing/raytracing-resources.txt @@ -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 diff --git a/chapters/VK_NV_ray_tracing/raytracing.txt b/chapters/VK_NV_ray_tracing/raytracing.txt index f6d1cc13..3f3dcdfe 100644 --- a/chapters/VK_NV_ray_tracing/raytracing.txt +++ b/chapters/VK_NV_ray_tracing/raytracing.txt @@ -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 diff --git a/chapters/drawing.txt b/chapters/drawing.txt index afccc57d..032308dc 100644 --- a/chapters/drawing.txt +++ b/chapters/drawing.txt @@ -20,10 +20,10 @@ commands are recorded in that command buffer. ifdef::VK_NV_mesh_shader[] Drawing can be achieved in two modes: - * <>, the mesh shader - assembles primitives, or - * <>, the input - primitives are assembled + * <>, the mesh shader + assembles primitives, or + * <>, the input + primitives are assembled as follows. endif::VK_NV_mesh_shader[] diff --git a/chapters/features.txt b/chapters/features.txt index 65487a3e..5d6f5416 100644 --- a/chapters/features.txt +++ b/chapters/features.txt @@ -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 + <> + 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 - <> + ** image pname:format is one of those listed in + <> 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 `<>` - 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 diff --git a/chapters/interfaces.txt b/chapters/interfaces.txt index ac104006..dc15b6e9 100644 --- a/chapters/interfaces.txt +++ b/chapters/interfaces.txt @@ -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[] diff --git a/chapters/memory.txt b/chapters/memory.txt index c258459d..01eabc2f 100644 --- a/chapters/memory.txt +++ b/chapters/memory.txt @@ -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 diff --git a/chapters/primsrast.txt b/chapters/primsrast.txt index b30f0a22..b169b1b1 100644 --- a/chapters/primsrast.txt +++ b/chapters/primsrast.txt @@ -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 diff --git a/chapters/renderpass.txt b/chapters/renderpass.txt index a7fb6305..892828c6 100644 --- a/chapters/renderpass.txt +++ b/chapters/renderpass.txt @@ -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 diff --git a/chapters/resources.txt b/chapters/resources.txt index d11079f0..927796b8 100644 --- a/chapters/resources.txt +++ b/chapters/resources.txt @@ -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[] diff --git a/chapters/textures.txt b/chapters/textures.txt index a380d281..7b40b68e 100644 --- a/chapters/textures.txt +++ b/chapters/textures.txt @@ -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 <> 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 <> 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 <> 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 <> are + reconstructed as follows: + [latexmath] ++++++++++++++ diff --git a/include/vulkan/vulkan_core.h b/include/vulkan/vulkan_core.h index bdbf8007..50064109 100644 --- a/include/vulkan/vulkan_core.h +++ b/include/vulkan/vulkan_core.h @@ -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)( diff --git a/reflow_count.py b/reflow_count.py index 21468ab9..5a0595c4 100644 --- a/reflow_count.py +++ b/reflow_count.py @@ -1,2 +1,2 @@ # The value to start tagging VU statements at, unless overridden by -nextvu -startVUID = 2586 +startVUID = 2596 diff --git a/style/extensions.txt b/style/extensions.txt index fc350468..3d90e511 100644 --- a/style/extensions.txt +++ b/style/extensions.txt @@ -248,7 +248,7 @@ layers with Khronos, as described below. To reserve an author ID, propose a merge request against <> in the `master` branch. The merge must add a `` 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 -<> by the registry maintainer. +<> 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 <>. +This is done by adding to <>. 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 diff --git a/styleguide.txt b/styleguide.txt index 679d7a9a..7dbc0477 100644 --- a/styleguide.txt +++ b/styleguide.txt @@ -150,6 +150,9 @@ include::style/vuid.txt[] = Revision History +* 2018-11-19 - Add details to the <> section including the new "`Description`" + section, and other standard parts of extension appendices. * 2018-08-13 - Add %inline directive to the <> section (public pull request 734). * 2018-07-30 - Added a section on <// Vulkan 1.1 version number #define VK_API_VERSION_1_1 VK_MAKE_VERSION(1, 1, 0)// Patch version should always be set to 0 // Version of this file -#define VK_HEADER_VERSION 94 +#define VK_HEADER_VERSION 95 #define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; @@ -2849,7 +2849,7 @@ server. VkBool32 dstPremultiplied VkBlendOverlapEXT blendOverlap - + VkStructureType sType void* pNext VkBool32 inlineUniformBlock @@ -2920,6 +2920,33 @@ server. void* pNext VkBool32 shaderDrawParameters + + VkStructureType sType + void* pNext + VkBool32 shaderFloat16 + VkBool32 shaderInt8 + + + 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 + VkStructureType sType const void* pNext @@ -3269,7 +3296,7 @@ server. VkBool32 conditionalRendering VkBool32 inheritedConditionalRendering - + VkStructureType sType void* pNext VkBool32 vulkanMemoryModel @@ -8482,10 +8509,12 @@ server. - + - - + + + + @@ -9844,10 +9873,12 @@ server. - + - - + + + + @@ -10210,5 +10241,11 @@ server. + + + + + +