Change log for July 20, 2019 Vulkan 1.1.116 spec update:

* Happy 50th Lunar Landing Day!
  * Update release number to 116.

Internal Issues:

  * Clarify that flink:vkCmdBeginQuery is the same as
    flink:vkCmdBeginQueryIndexEXT with index = 0, and that
    flink:vkCmdEndQuery is the same as flink:vkCmdEndQueryIndexEXT with
    index = 0 (internal issue 1735).
  * Clarify that when copying the depth aspect between buffers and images
    via slink:VkBufferImage Copy, the depth values in buffer memory must be
    in range if the `<<VK_EXT_depth_range_unrestricted>>` extension is not
    enabled (internal issue 1737).
  * Minor language tweaks in the <<spirvenv-module-validation, Validation
    Rules within a Module>> section (internal issue 1744).
  * Change the slink:VkPhysicalDeviceFloatControlsPropertiesKHR structure in
    the `<<VK_KHR_shader_controls>>` extension. This is a rare case of
    breaking the interface of an existing extension to acknowledge the
    reality of divergent vendor implementations that could not be described
    properly otherwise, and the breaking change is considered acceptable
    given the expected low use of the extension (internal issue 1734).
    Specific changes:
  ** Added the slink:VkShaderFloatControlsIndependenceKHR enumeration to
     describe the three possible behaviors.
  ** Renamed pname:separateDenormSettings to
     pname:denormBehaviorIndependence.
  ** Renamed pname:separateRoundingModeSettings to
     pname:roundingModeIndependence
  * Add a missing valid usage statement for
    slink:VkQueryPoolCreateInfo::pname:queryCount (internal issue 1742).
  * Update the `<<VK_NV_shading_rate_image>>` appendix to list all
    interfaces defined by the extension.
  * Add a valid usage statement to
    slink:VkWriteDescriptorSetAccelerationStructureNV to clarify that
    acceleration structure descriptors must be top level structures.

New Extensions:

  * `<<VK_EXT_subgroup_size_control>>`
This commit is contained in:
Jon Leech 2019-07-20 01:49:16 -07:00
parent 57b7cd572d
commit 7b81afeb9f
14 changed files with 468 additions and 42 deletions

View File

@ -8,6 +8,50 @@ public pull requests that have been accepted.
-----------------------------------------------------
Change log for July 20, 2019 Vulkan 1.1.116 spec update:
* Happy 50th Lunar Landing Day!
* Update release number to 116.
Internal Issues:
* Clarify that flink:vkCmdBeginQuery is the same as
flink:vkCmdBeginQueryIndexEXT with index = 0, and that
flink:vkCmdEndQuery is the same as flink:vkCmdEndQueryIndexEXT with
index = 0 (internal issue 1735).
* Clarify that when copying the depth aspect between buffers and images
via slink:VkBufferImage Copy, the depth values in buffer memory must be
in range if the `<<VK_EXT_depth_range_unrestricted>>` extension is not
enabled (internal issue 1737).
* Minor language tweaks in the <<spirvenv-module-validation, Validation
Rules within a Module>> section (internal issue 1744).
* Change the slink:VkPhysicalDeviceFloatControlsPropertiesKHR structure in
the `<<VK_KHR_shader_controls>>` extension. This is a rare case of
breaking the interface of an existing extension to acknowledge the
reality of divergent vendor implementations that could not be described
properly otherwise, and the breaking change is considered acceptable
given the expected low use of the extension (internal issue 1734).
Specific changes:
** Added the slink:VkShaderFloatControlsIndependenceKHR enumeration to
describe the three possible behaviors.
** Renamed pname:separateDenormSettings to
pname:denormBehaviorIndependence.
** Renamed pname:separateRoundingModeSettings to
pname:roundingModeIndependence
* Add a missing valid usage statement for
slink:VkQueryPoolCreateInfo::pname:queryCount (internal issue 1742).
* Update the `<<VK_NV_shading_rate_image>>` appendix to list all
interfaces defined by the extension.
* Add a valid usage statement to
slink:VkWriteDescriptorSetAccelerationStructureNV to clarify that
acceleration structure descriptors must be top level structures.
New Extensions:
* `<<VK_EXT_subgroup_size_control>>`
-----------------------------------------------------
Change log for July 14, 2019 Vulkan 1.1.115 spec update:
* Update release number to 115.

View File

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

View File

@ -0,0 +1,92 @@
// Copyright (c) 2017-2019 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_EXT_subgroup_size_control.txt[]
*Last Modified Date*::
2019-03-05
*Contributors*::
- Jeff Bolz, NVIDIA
- Jason Ekstrand, Intel
- Sławek Grajewski, Intel
- Jesse Hall, Google
- Neil Henning, AMD
- Daniel Koch, NVIDIA
- Jeff Leger, Qualcomm
- Graeme Leese, Broadcom
- Allan MacKinnon, Google
- Mariusz Merecki, Intel
- Graham Wihlidal, Electronic Arts
=== Short Description
Enables an implementation to control the subgroup size by allowing a varying
subgroup size and also specifying a required subgroup size.
=== Description
This extension extends the subgroup support in Vulkan 1.1 to allow an
implementation to expose a varying subgroup size.
Previously Vulkan exposed a single subgroup size per physical device, with
the expectation that implementations will behave as if all subgroups have
the same size.
Some implementations may: dispatch shaders with a varying subgroup size for
different subgroups.
As a result they could implicitly split a large subgroup into smaller
subgroups or represent a small subgroup as a larger subgroup, some of whose
invocations were inactive on launch.
To aid developers in understanding the performance characteristics of their
programs, this extension exposes a minimum and maximum subgroup size that a
physical device supports and a pipeline create flag to enable that pipeline
to vary its subgroup size.
If enabled, any code:SubgroupSize decorated variables in the SPIR-V shader
modules provided to pipeline creation may: vary between the
<<limits-min-subgroup-size,minimum>> and
<<limits-max-subgroup-size,maximum>> subgroup sizes.
An implementation is also optionally allowed to support specifying a
required subgroup size for a given pipeline stage.
Implementations advertise which <<limits-required-subgroup-size-stages,
stages support a required subgroup size>>, and any pipeline of a supported
stage can be passed a
slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure to
set the subgroup size for that shader stage of the pipeline.
For compute shaders, this requires the developer to query the
<<limits-max-subgroups-per-workgroup, pname:maxComputeWorkgroupSubgroups>>
and ensure that:
[latexmath]
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
s = {WorkGroupSize.x * WorkGroupSize.y * WorkgroupSize.z <= SubgroupSize * maxComputeWorkgroupSubgroups }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Developers can also specify a new pipeline shader stage create flag that
requires the implementation to have fully populated subgroups within local
workgroups.
This requires the workgroup size in the X dimension to be a multiple of the
subgroup size.
=== New Enum Constants
* Extending elink:VkStructureType:
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT
** ename:VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT
* Extending elink:VkPipelineShaderStageCreateFlagBits:
** ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
** ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
=== New Structures
* slink:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
* slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
=== Issues
None.
=== Version History
* Revision 1, 2019-03-05 (Neil Henning)
- Initial draft

View File

@ -66,6 +66,7 @@ None.
* Extending elink:VkDynamicState:
** ename:VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV
** ename:VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV
* Extending elink:VkAccessFlagBits:
** ename:VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV
@ -93,17 +94,29 @@ None.
** ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_2X4_PIXELS_NV
** ename:VK_SHADING_RATE_PALETTE_ENTRY_1_INVOCATION_PER_4X4_PIXELS_NV
* elink:VkCoarseSampleOrderTypeNV, containing the following constants:
** ename:VK_COARSE_SAMPLE_ORDER_TYPE_DEFAULT_NV
** ename:VK_COARSE_SAMPLE_ORDER_TYPE_CUSTOM_NV
** ename:VK_COARSE_SAMPLE_ORDER_TYPE_PIXEL_MAJOR_NV
** ename:VK_COARSE_SAMPLE_ORDER_TYPE_SAMPLE_MAJOR_NV
=== New Structures
* slink:VkShadingRatePaletteNV
* slink:VkPipelineViewportShadingRateImageStateCreateInfoNV
* slink:VkPhysicalDeviceShadingRateImageFeaturesNV
* slink:VkPhysicalDeviceShadingRateImagePropertiesNV
* slink:VkCoarseSampleLocationNV
* slink:VkCoarseSampleOrderCustomNV
* slink:VkPipelineViewportCoarseSampleOrderStateCreateInfoNV
=== New Functions
* flink:vkCmdBindShadingRateImageNV
* flink:vkCmdSetViewportShadingRatePaletteNV
* flink:vkCmdSetCoarseSampleOrderNV
=== Issues

View File

@ -1592,6 +1592,11 @@ B::
A::
Alpha color component
RTZ::
Round towards zero
RTE::
Round to nearest even
[glossary]
= Prefixes

View File

@ -688,8 +688,8 @@ ifdef::VK_NV_viewport_array2[]
the vertex processing stages of a graphics pipeline.
endif::VK_NV_viewport_array2[]
ifdef::VK_VERSION_1_1,VK_KHR_16bit_storage[]
** Only the round-to-nearest-even and the round-to-zero rounding modes
can: be used for the code:FPRoundingMode decoration.
** Only the round-to-nearest-even and the round-towards-zero rounding
modes can: be used for the code:FPRoundingMode decoration.
** The code:FPRoundingMode decoration can: only be used for the
floating-point conversion instructions as described in the
https://www.khronos.org/registry/spir-v/extensions/KHR/SPV_KHR_16bit_storage.html[`SPV_KHR_16bit_storage`]
@ -741,9 +741,10 @@ ifdef::VK_NV_compute_shader_derivatives[]
endif::VK_NV_compute_shader_derivatives[]
ifdef::VK_VERSION_1_1[]
* "`Result Type`" for *Non Uniform Group Operations* must: be limited to
32-bit float, 32-bit integer, boolean, or vectors of these types.
If the code:Float64 capability is enabled, double and vectors of double
types are also permitted.
32-bit floating-point, 32-bit integer, boolean, or vectors of these
types.
** If the code:Float64 capability is enabled, 64-bit floating-point and
vector of 64-bit floating-point types are also permitted.
* The "`Id`" operand of code:OpGroupNonUniformBroadcast must: be the <id>
of a constant instruction.
* If code:OpGroupNonUniformBallotBitCount is used, the group operation
@ -786,13 +787,24 @@ ifdef::VK_EXT_descriptor_indexing[]
code:NonUniformEXT.
endif::VK_EXT_descriptor_indexing[]
ifdef::VK_KHR_shader_float_controls[]
* If <<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-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.
<<features-denormBehaviorIndependence,pname:denormBehaviorIndependence>>
is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR, then the
entry point must: use the same denormals execution mode for both 16-bit
and 64-bit floating-point types.
* If
<<features-denormBehaviorIndependence,pname:denormBehaviorIndependence>>
is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR, then the entry
point must: use the same denormals execution mode for all floating-point
types.
* If <<features-roundingModeIndependence,pname:roundingModeIndependence>>
is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR, then the
entry point must: use the same rounding execution mode for both 16-bit
and 64-bit floating-point types.
* If <<features-roundingModeIndependence,pname:roundingModeIndependence>>
is ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR, then the entry
point must: use the same rounding execution mode for all floating-point
types.
* If
<<features-shaderSignedZeroInfNanPreserveFloat16,pname:shaderSignedZeroInfNanPreserveFloat16>>
is ename:VK_FALSE, then code:SignedZeroInfNanPreserve for 16-bit

View File

@ -1,6 +1,6 @@
// This section is included inside the Resource Descriptors chapter (descriptorsets.txt)
[open,refpage='VkWriteDescriptorSetAccelerationStructureNV',desc='Structure specifying acceleration to query for memory requirements',type='structs']
[open,refpage='VkWriteDescriptorSetAccelerationStructureNV',desc='Structure specifying acceleration structure descriptor info',type='structs']
--
The sname:VkWriteDescriptorSetAccelerationStructureNV structure is defined
as:
@ -18,6 +18,9 @@ include::{generated}/api/structs/VkWriteDescriptorSetAccelerationStructureNV.txt
* [[VUID-VkWriteDescriptorSetAccelerationStructureNV-accelerationStructureCount-02236]]
pname:accelerationStructureCount must: be equal to pname:descriptorCount
in the extended structure
* [[VUID-VkWriteDescriptorSetAccelerationStructureNV-pAccelerationStructures-02764]]
Each acceleration structure in pname:pAccelerationStructures must have
been created with ename:VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_NV
****
include::{generated}/validity/structs/VkWriteDescriptorSetAccelerationStructureNV.txt[]

View File

@ -1156,10 +1156,12 @@ Because depth or stencil aspect buffer to image copies may: require format
conversions on some implementations, they are not supported on queues that
do not support graphics.
ifndef::VK_EXT_depth_range_unrestricted[]
When copying to a depth aspect, the data in buffer memory must: be in the
range [eq]#[0,1]#, or the resulting values are undefined:.
When copying to a depth aspect,
ifdef::VK_EXT_depth_range_unrestricted[]
and the VK_EXT_depth_range_unrestricted extension is not enabled,
endif::VK_EXT_depth_range_unrestricted[]
the data in buffer memory must: be in the range [eq]#[0,1]#, or the
resulting values are undefined:.
Copies are done layer by layer starting with image layer
pname:baseArrayLayer member of pname:imageSubresource.

View File

@ -2781,8 +2781,37 @@ as a scalar 32-bit integer.
code:SubgroupSize::
+
Decorating a variable with the code:SubgroupSize builtin decoration will
make that variable contain the implementation-dependent maximum number of
invocations in a subgroup.
make that variable contain the implementation-dependent
<<limits-subgroup-size,number of invocations in a subgroup>>.
ifdef::VK_EXT_subgroup_size_control[]
If the pipeline was created with the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
flag set, the code:SubgroupSize decorated variable will contain the subgroup
size for each subgroup that gets dispatched.
This value must: be a power-of-two integer between
<<limits-min-subgroup-size,minSubgroupSize>> and
<<limits-max-subgroup-size,maxSubgroupSize>> and must: be uniform with
subgroup scope.
The value may: vary across a single draw or dispatch call, and for fragment
shaders may: vary across a single primitive.
If the pipeline was created with a chained
slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure, the
code:SubgroupSize decorated variable will match
<<pipelines-required-subgroup-size, pname:requiredSubgroupSize>>.
If the pipeline was not created with the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
flag set and no slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure was chained, the
endif::VK_EXT_subgroup_size_control[]
ifndef::VK_EXT_subgroup_size_control[]
The
endif::VK_EXT_subgroup_size_control[]
variable decorated with code:SubgroupSize will match <<limits-subgroup-size,
pname:subgroupSize>>.
The maximum number of invocations that an implementation can support per
subgroup is 128.
+

View File

@ -885,13 +885,14 @@ structure describe the following implementation-dependent limits:
include::{generated}/api/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
* [[features-separateDenormSettings]] pname:separateDenormSettings is a
boolean value indicating whether the implementation supports separate
settings for 16-bit and 64-bit denormals.
* [[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-denormBehaviorIndependence]] pname:denormBehaviorIndependence
is an elink:VkShaderFloatControlsIndependenceKHR value indicating
whether, and how, denorm behavior can be set independently for different
bit widths.
* [[features-roundingModeIndependence]] pname:roundingModeIndependence is
an elink:VkShaderFloatControlsIndependenceKHR value indicating whether,
and how, rounding modes can be set independently for different bit
widths.
* [[features-shaderSignedZeroInfNanPreserveFloat16]]
pname:shaderSignedZeroInfNanPreserveFloat16 is a boolean value
indicating whether sign of a zero, [eq]##Nan##s and
@ -1000,6 +1001,23 @@ is filled with the implementation-dependent limits.
include::{generated}/validity/structs/VkPhysicalDeviceFloatControlsPropertiesKHR.txt[]
--
[open,refpage='VkShaderFloatControlsIndependenceKHR',desc='Enum specifying whether, and how, shader float controls can be set separately',type='enums']
--
Values which may: be set in the shader float controls properties returned by
slink:VkPhysicalDeviceFloatControlsPropertiesKHR are:
include::{generated}/api/enums/VkShaderFloatControlsIndependenceKHR.txt[]
* ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR specifies
that shader float controls for 32-bit floating point can: be set
independently; other bit widths must: be set identically to each other.
* ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR specifies that
shader float controls for all bit widths can: be set independently.
* ename:VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR specifies that
shader float controls for all bit widths must: be set identically.
--
endif::VK_KHR_shader_float_controls[]
ifdef::VK_EXT_discard_rectangles[]
@ -1174,10 +1192,8 @@ describe the following implementation-dependent limits:
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:subgroupSize is the number of invocations in each subgroup.
This will match any <<interfaces-builtin-variables-sgs,
code:SubgroupSize>> decorated variable used in any shader module created
on this device.
* [[limits-subgroup-size]] pname:subgroupSize is the default number of
invocations in each subgroup.
pname:subgroupSize is at least 1 if any of the physical device's queues
support ename:VK_QUEUE_GRAPHICS_BIT or ename:VK_QUEUE_COMPUTE_BIT.
* pname:supportedStages is a bitfield of elink:VkShaderStageFlagBits
@ -1253,6 +1269,52 @@ tname:VkSubgroupFeatureFlags is a bitmask type for setting a mask of zero or
more elink:VkSubgroupFeatureFlagBits.
--
ifdef::VK_EXT_subgroup_size_control[]
[open,refpage='VkPhysicalDeviceSubgroupSizeControlPropertiesEXT',desc='Structure describing the control subgroup size properties of an implementation',type='structs']
--
The sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT structure is
defined as:
include::{generated}/api/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
The members of the sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
structure describe the following properties:
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[limits-min-subgroup-size]] pname:minSubgroupSize is the minimum
subgroup size supported by this device.
pname:minSubgroupSize is at least one if any of the physical device's
queues support ename:VK_QUEUE_GRAPHICS_BIT or
ename:VK_QUEUE_COMPUTE_BIT.
pname:minSubgroupSize is less than or equal to pname:maxSubgroupSize.
pname:minSubgroupSize is less than or equal to
<<limits-subgroup-size,subgroupSize>>.
* [[limits-max-subgroup-size]] pname:maxSubgroupSize is the maximum
subgroup size supported by this device.
pname:maxSubgroupSize is at least one if any of the physical device's
queues support ename:VK_QUEUE_GRAPHICS_BIT or
ename:VK_QUEUE_COMPUTE_BIT.
pname:maxSubgroupSize is greater than or equal to pname:minSubgroupSize.
pname:maxSubgroupSize is greater than or equal to
<<limits-subgroup-size,subgroupSize>>.
* [[limits-max-subgroups-per-workgroup]]
pname:maxComputeWorkgroupSubgroups is the maximum number of subgroups
supported by the implementation within a workgroup.
* [[limits-required-subgroup-size-stages]]
pname:requiredSubgroupSizeStages is a bitfield of what shader stages
support having a required subgroup size specified.
If the sname:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT structure is
included in the pname:pNext chain of slink:VkPhysicalDeviceProperties2, it
is filled with the implementation-dependent limits.
include::{generated}/validity/structs/VkPhysicalDeviceSubgroupSizeControlPropertiesEXT.txt[]
--
endif::VK_EXT_subgroup_size_control[]
endif::VK_VERSION_1_1[]
ifdef::VK_EXT_blend_operation_advanced[]

View File

@ -267,7 +267,8 @@ include::{generated}/api/structs/VkPipelineShaderStageCreateInfo.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* pname:flags is reserved for future use.
* pname:flags is a bitmask of elink:VkPipelineShaderStageCreateFlagBits
specifying how the pipeline shader stage will be generated.
* pname:stage is a elink:VkShaderStageFlagBits value specifying a single
pipeline stage.
* pname:module is a slink:VkShaderModule object that contains the shader
@ -382,17 +383,98 @@ ifdef::VK_NV_mesh_shader[]
that is greater than `0` and less than or equal to
sname:VkPhysicalDeviceMeshShaderPropertiesNV::pname:maxMeshOutputPrimitives.
endif::VK_NV_mesh_shader[]
ifdef::VK_EXT_subgroup_size_control[]
* [[VUID-VkPipelineShaderStageCreateInfo-pNext-02754]]
If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure is chained to pname:pNext, pname:flags must: not have the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
flag set.
* [[VUID-VkPipelineShaderStageCreateInfo-pNext-02755]]
If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure is chained to pname:pNext, pname:stage must: be a valid bit
specified in <<limits-required-subgroup-size-stages,
pname:requiredSubgroupSizeStages>>.
* [[VUID-VkPipelineShaderStageCreateInfo-pNext-02756]]
If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure is chained to pname:pNext and pname:stage is
VK_SHADER_STAGE_COMPUTE_BIT then local workgroup size of the shader
must: be less than or equal to the product of
slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::pname:requiredSubgroupSize
and
<<limits-max-subgroups-per-workgroup,pname:maxComputeWorkgroupSubgroups>>.
* [[VUID-VkPipelineShaderStageCreateInfo-pNext-02757]]
If a slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure is chained to pname:pNext, and pname:flags has the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
flag set, the local workgroup size in the X dimension of the pipeline
must: be a multiple of
slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT::pname:requiredSubgroupSize.
* [[VUID-VkPipelineShaderStageCreateInfo-flags-02758]]
If pname:flags has both the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT and
ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
flags set, the local workgroup size in the X dimension of the pipeline
must: be a multiple of
<<limits-max-subgroup-size,pname:maxSubgroupSize>>.
* [[VUID-VkPipelineShaderStageCreateInfo-flags-02759]]
If pname:flags has the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
flag set and pname:flags does not have the
ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
flag set and no
slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure
is chained to pname:pNext, the local workgroup size in the X dimension
of the pipeline must: be a multiple of
<<limits-subgroup-size,pname:subgroupSize>>.
endif::VK_EXT_subgroup_size_control[]
****
include::{generated}/validity/structs/VkPipelineShaderStageCreateInfo.txt[]
--
[open,refpage='VkPipelineShaderStageCreateFlags',desc='Reserved for future use',type='flags']
[open,refpage='VkPipelineShaderStageCreateFlags',desc='Bitmask of VkPipelineShaderStageCreateFlagBits',type='flags']
--
include::{generated}/api/flags/VkPipelineShaderStageCreateFlags.txt[]
tname:VkPipelineShaderStageCreateFlags is a bitmask type for setting a mask,
but is currently reserved for future use.
tname:VkPipelineShaderStageCreateFlags is a bitmask type for setting a mask
of zero or more elink:VkPipelineShaderStageCreateFlagBits.
--
[open,refpage='VkPipelineShaderStageCreateFlagBits',desc='Bitmask controlling how a pipeline shader stage is created',type='enums']
--
Possible values of the pname:flags member of
slink:VkPipelineShaderStageCreateInfo specifying how a pipeline shader stage
is created, are:
include::{generated}/api/enums/VkPipelineShaderStageCreateFlagBits.txt[]
ifdef::VK_EXT_subgroup_size_control[]
* ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
specifies that the
<<interfaces-builtin-variables-sgs,code:SubgroupSize>> may: vary in the
shader stage.
* ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
specifies that the subgroup sizes must: be launched with all invocations
active in the compute stage.
[NOTE]
.Note
====
If ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
and ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT are
specified and <<limits-max-subgroup-size,pname:minSubgroupSize>> does not
equal <<limits-max-subgroup-size,pname:maxSubgroupSize>> and no
<<pipelines-required-subgroup-size, required subgroup size>> is specified,
then the only way to guarantee that the 'X' dimension of the local workgroup
size is a multiple of <<interfaces-builtin-variables-sgs,code:SubgroupSize>>
is to make it a multiple of pname:maxSubgroupSize.
Under these conditions, you are guaranteed full subgroups but not any
particular subgroup size.
====
endif::VK_EXT_subgroup_size_control[]
--
[open,refpage='VkShaderStageFlagBits',desc='Bitmask specifying a pipeline stage',type='enums']
@ -452,6 +534,42 @@ more elink:VkShaderStageFlagBits.
--
ifdef::VK_EXT_subgroup_size_control[]
[open,refpage='VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT',desc='Structure specifying the required subgroup size of a newly created pipeline shader stage',type='structs']
--
The sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure
is defined as:
include::{generated}/api/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.txt[]
* pname:sType is the type of this structure.
* pname:pNext is `NULL` or a pointer to an extension-specific structure.
* [[pipelines-required-subgroup-size]] pname:requiredSubgroupSize is an
unsigned integer value that specifies the required subgroup size for the
newly created pipeline shader stage.
.Valid Usage
****
* [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02760]]
pname:requiredSubgroupSize must: be a power-of-two integer.
* [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02761]]
pname:requiredSubgroupSize must: be greater or equal to
<<limits-min-subgroup-size,minSubgroupSize>>.
* [[VUID-VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT-requiredSubgroupSize-02762]]
pname:requiredSubgroupSize must: be less than or equal to
<<limits-max-subgroup-size,maxSubgroupSize>>.
****
If the sname:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure is included in the pname:pNext chain of
slink:VkPipelineShaderStageCreateInfo, it specifies that the pipeline shader
stage being compiled has a required subgroup size.
include::{generated}/validity/structs/VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT.txt[]
--
endif::VK_EXT_subgroup_size_control[]
[[pipelines-graphics]]
== Graphics Pipelines

View File

@ -88,6 +88,8 @@ ename:VK_QUERY_TYPE_PIPELINE_STATISTICS.
If pname:queryType is ename:VK_QUERY_TYPE_PIPELINE_STATISTICS,
pname:pipelineStatistics must: be a valid combination of
elink:VkQueryPipelineStatisticFlagBits values
* [[VUID-VkQueryPoolCreateInfo-queryCount-02763]]
pname:queryCount must: be greater than 0
****
include::{generated}/validity/structs/VkQueryPoolCreateInfo.txt[]
@ -353,6 +355,11 @@ pname:flags contains ename:VK_QUERY_CONTROL_PRECISE_BIT, an implementation
must: return a result that matches the actual number of samples passed.
This is described in more detail in <<queries-occlusion,Occlusion Queries>>.
ifdef::VK_EXT_transform_feedback[]
Calling fname:vkCmdBeginQuery is equivalent to calling
flink:vkCmdBeginQueryIndexedEXT with the pname:index parameter set to zero.
endif::VK_EXT_transform_feedback[]
[[queries-operation-active]]
After beginning a query, that query is considered _active_ within the
command buffer it was called in until that same query is ended.
@ -470,6 +477,11 @@ include::{generated}/api/protos/vkCmdEndQuery.txt[]
* pname:query is the query index within the query pool where the result is
stored.
ifdef::VK_EXT_transform_feedback[]
Calling fname:vkCmdEndQuery is equivalent to calling
flink:vkCmdEndQueryIndexedEXT with the pname:index parameter set to zero.
endif::VK_EXT_transform_feedback[]
[[queries-operation-finished]]
As queries operate asynchronously, ending a query does not immediately set
the query's status to available.

View File

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

View File

@ -154,7 +154,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> 115</type>
#define <name>VK_HEADER_VERSION</name> 116</type>
<type category="define">
#define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@ -214,7 +214,7 @@ typedef void <name>CAMetalLayer</name>;
<type category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineTessellationStateCreateFlags</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineInputAssemblyStateCreateFlags</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineVertexInputStateCreateFlags</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineShaderStageCreateFlags</name>;</type>
<type requires="VkPipelineShaderStageCreateFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkPipelineShaderStageCreateFlags</name>;</type>
<type requires="VkDescriptorSetLayoutCreateFlagBits" category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorSetLayoutCreateFlags</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkBufferViewCreateFlags</name>;</type>
<type category="bitmask">typedef <type>VkFlags</type> <name>VkInstanceCreateFlags</name>;</type>
@ -561,6 +561,7 @@ typedef void <name>CAMetalLayer</name>;
<type name="VkDebugUtilsMessageSeverityFlagBitsEXT" category="enum"/>
<type name="VkDebugUtilsMessageTypeFlagBitsEXT" category="enum"/>
<type name="VkFullScreenExclusiveEXT" category="enum"/>
<type name="VkShaderFloatControlsIndependenceKHR" category="enum"/>
<comment>Enumerated types in the header, but not used by the API</comment>
<type name="VkVendorId" category="enum"/>
@ -2999,8 +3000,8 @@ typedef void <name>CAMetalLayer</name>;
<type category="struct" name="VkPhysicalDeviceFloatControlsPropertiesKHR" returnedonly="true" 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>VkShaderFloatControlsIndependenceKHR</type> <name>denormBehaviorIndependence</name></member>
<member><type>VkShaderFloatControlsIndependenceKHR</type> <name>roundingModeIndependence</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 -->
@ -4011,6 +4012,19 @@ typedef void <name>CAMetalLayer</name>;
<member><type>VkDeviceSize</type> <name>uniformTexelBufferOffsetAlignmentBytes</name></member>
<member><type>VkBool32</type> <name>uniformTexelBufferOffsetSingleTexelAlignment</name></member>
</type>
<type category="struct" name="VkPhysicalDeviceSubgroupSizeControlPropertiesEXT" returnedonly="true" structextends="VkPhysicalDeviceProperties2">
<member values="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member noautovalidity="true"><type>uint32_t</type> <name>minSubgroupSize</name><comment>The minimum subgroup size supported by this device</comment></member>
<member noautovalidity="true"><type>uint32_t</type> <name>maxSubgroupSize</name><comment>The maximum subgroup size supported by this device</comment></member>
<member noautovalidity="true"><type>uint32_t</type> <name>maxComputeWorkgroupSubgroups</name><comment>The maximum number of subgroups supported in a workgroup</comment></member>
<member><type>VkShaderStageFlags</type> <name>requiredSubgroupSizeStages</name><comment>The shader stages that support specifying a subgroup size</comment></member>
</type>
<type category="struct" name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT" returnedonly="true" structextends="VkPipelineShaderStageCreateInfo">
<member values="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"><type>VkStructureType</type> <name>sType</name></member>
<member><type>void</type>* <name>pNext</name></member>
<member><type>uint32_t</type> <name>requiredSubgroupSize</name></member>
</type>
</types>
<comment>Vulkan enumerant (token) definitions</comment>
@ -4676,6 +4690,8 @@ typedef void <name>CAMetalLayer</name>;
<enum bitpos="1" name="VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"/>
<enum bitpos="2" name="VK_PIPELINE_CREATE_DERIVATIVE_BIT"/>
</enums>
<enums name="VkPipelineShaderStageCreateFlagBits" type="bitmask">
</enums>
<enums name="VkColorComponentFlagBits" type="bitmask">
<enum bitpos="0" name="VK_COLOR_COMPONENT_R_BIT"/>
<enum bitpos="1" name="VK_COLOR_COMPONENT_G_BIT"/>
@ -5273,6 +5289,11 @@ typedef void <name>CAMetalLayer</name>;
<enum value="3" name="VK_PERFORMANCE_VALUE_TYPE_BOOL_INTEL"/>
<enum value="4" name="VK_PERFORMANCE_VALUE_TYPE_STRING_INTEL"/>
</enums>
<enums name="VkShaderFloatControlsIndependenceKHR" type="enum">
<enum value="0" name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_32_BIT_ONLY_KHR"/>
<enum value="1" name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_ALL_KHR"/>
<enum value="2" name="VK_SHADER_FLOAT_CONTROLS_INDEPENDENCE_NONE_KHR"/>
</enums>
<commands comment="Vulkan command definitions">
<command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_LAYER_NOT_PRESENT,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INCOMPATIBLE_DRIVER">
@ -10479,10 +10500,11 @@ typedef void <name>CAMetalLayer</name>;
</extension>
<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="1" name="VK_KHR_SHADER_FLOAT_CONTROLS_SPEC_VERSION"/>
<enum value="2" 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"/>
<type name="VkShaderFloatControlsIndependenceKHR"/>
</require>
</extension>
<extension name="VK_NV_shader_subgroup_partitioned" number="199" type="device" requiresCore="1.1" author="NV" contact="Jeff Bolz @jeffbolznv" supported="vulkan">
@ -10753,10 +10775,16 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_GOOGLE_decorate_string&quot;" name="VK_GOOGLE_DECORATE_STRING_EXTENSION_NAME"/>
</require>
</extension>
<extension name="VK_AMD_extension_226" number="226" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
<extension name="VK_EXT_subgroup_size_control" number="226" type="device" requiresCore="1.1" author="EXT" contact="Neil Henning @sheredom" supported="vulkan">
<require>
<enum value="0" name="VK_AMD_EXTENSION_226_SPEC_VERSION"/>
<enum value="&quot;VK_AMD_extension_226&quot;" name="VK_AMD_EXTENSION_226_EXTENSION_NAME"/>
<enum value="1" name="VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_subgroup_size_control&quot;" name="VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME"/>
<type name="VkPhysicalDeviceSubgroupSizeControlPropertiesEXT"/>
<type name="VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT"/>
<enum offset="0" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT"/>
<enum offset="1" extends="VkStructureType" name="VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT"/>
<enum bitpos="0" extends="VkPipelineShaderStageCreateFlagBits" name="VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT"/>
<enum bitpos="1" extends="VkPipelineShaderStageCreateFlagBits" name="VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT"/>
</require>
</extension>
<extension name="VK_AMD_extension_227" number="227" author="AMD" contact="Martin Dinkov @mdinkov" supported="disabled">
@ -11189,5 +11217,11 @@ typedef void <name>CAMetalLayer</name>;
<enum value="&quot;VK_EXT_extension_284&quot;" name="VK_EXT_extension_284"/>
</require>
</extension>
<extension name="VK_EXT_extension_285" number="285" type="device" author="EXT" contact="Yiwei Zhang @zzyiwei" supported="disabled">
<require>
<enum value="0" name="VK_EXT_EXTENSION_285_SPEC_VERSION"/>
<enum value="&quot;VK_EXT_extension_285&quot;" name="VK_EXT_extension_285"/>
</require>
</extension>
</extensions>
</registry>