Vulkan-Docs/appendices/VK_EXT_subgroup_size_control.txt

101 lines
3.9 KiB
Plaintext
Raw Normal View History

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>>`
2019-07-20 01:49:16 -07:00
// 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::{generated}/meta/VK_EXT_subgroup_size_control.txt[]
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>>`
2019-07-20 01:49:16 -07:00
*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:
Change log for August 11, 2019 Vulkan 1.1.118 spec update: * Update release number to 118. Github Issues: * Update `BUILD.adoc` to specifically require asciidoctor 1.5.8, and make that change to the gitlab CI script (public issue 968). * Remove redundant slink:VkSubpassDependency and slink:VkSubpassDependency2KHR valid usage statements (public pull request 995). * Clarify the <<vkGetInstanceProcAddr behavior>> and <<vkGetDeviceProcAddr behavior>> tables (public pull request 1004). * Fix use of nonexistent slink:VkSamplerYcbcrConversionImageFormatProperties::pname:maxCombinedImageSamplerDescriptorCount (public pull request 1010). * Use compatible pathlib for python2 (public pull request 1012). Internal Issues: * Mark the <<VK_KHR_vulkan_memory_model>> extension as no longer provisional in `vk.xml` (internal issue 1369). * Clarify that use-defined code:Input and code:Output variables cannot be code:Boolean in the <<interfaces-iointerfaces-user, User-defined Variable Interface>> section (internal issue 1663). * Fix naming inconsistencies in slink:VkPhysicalDevicePerformanceQueryFeaturesKHR, slink:VkPhysicalDevicePerformanceQueryPropertiesKHR, slink:VkQueryPoolPerformanceCreateInfoKHR, and associated enumerants (internal issue 1746). * Use ACM reference style for normative references (internal merge request 3256). * Explicitly list the features changed in Vulkan 1.1 in the <<features-requirements, Feature Requirements>> section and the <<versions, Core Revisions (Informative)>> appendix (internal merge request 3274). * Add the slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure to the <<VK_EXT_subgroup_size_control>> extension, which was accidentally omitted in the initial release of the extension (internal merge request 3287). * Add missing slink:VkImageUsageFlag description for ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT (internal merge request 3292). * Add valid usage statements to slink:VkAccelerationStructureInfoNV and flink:vkGetAccelerationStructureHandleNV to clarify usage of acceleration structure handle and geometries (internal merge request 3292). New Extensions: * `<<VK_AMD_shader_core_properties2>>` * `<<VK_AMD_pipeline_compiler_control>>`
2019-08-11 04:54:43 -07:00
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT
(added in version 2)
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>>`
2019-07-20 01:49:16 -07:00
** 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
Change log for August 11, 2019 Vulkan 1.1.118 spec update: * Update release number to 118. Github Issues: * Update `BUILD.adoc` to specifically require asciidoctor 1.5.8, and make that change to the gitlab CI script (public issue 968). * Remove redundant slink:VkSubpassDependency and slink:VkSubpassDependency2KHR valid usage statements (public pull request 995). * Clarify the <<vkGetInstanceProcAddr behavior>> and <<vkGetDeviceProcAddr behavior>> tables (public pull request 1004). * Fix use of nonexistent slink:VkSamplerYcbcrConversionImageFormatProperties::pname:maxCombinedImageSamplerDescriptorCount (public pull request 1010). * Use compatible pathlib for python2 (public pull request 1012). Internal Issues: * Mark the <<VK_KHR_vulkan_memory_model>> extension as no longer provisional in `vk.xml` (internal issue 1369). * Clarify that use-defined code:Input and code:Output variables cannot be code:Boolean in the <<interfaces-iointerfaces-user, User-defined Variable Interface>> section (internal issue 1663). * Fix naming inconsistencies in slink:VkPhysicalDevicePerformanceQueryFeaturesKHR, slink:VkPhysicalDevicePerformanceQueryPropertiesKHR, slink:VkQueryPoolPerformanceCreateInfoKHR, and associated enumerants (internal issue 1746). * Use ACM reference style for normative references (internal merge request 3256). * Explicitly list the features changed in Vulkan 1.1 in the <<features-requirements, Feature Requirements>> section and the <<versions, Core Revisions (Informative)>> appendix (internal merge request 3274). * Add the slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure to the <<VK_EXT_subgroup_size_control>> extension, which was accidentally omitted in the initial release of the extension (internal merge request 3287). * Add missing slink:VkImageUsageFlag description for ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT (internal merge request 3292). * Add valid usage statements to slink:VkAccelerationStructureInfoNV and flink:vkGetAccelerationStructureHandleNV to clarify usage of acceleration structure handle and geometries (internal merge request 3292). New Extensions: * `<<VK_AMD_shader_core_properties2>>` * `<<VK_AMD_pipeline_compiler_control>>`
2019-08-11 04:54:43 -07:00
* slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT (added in version
2)
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>>`
2019-07-20 01:49:16 -07:00
* slink:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
* slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
=== Issues
None.
=== Version History
* Revision 1, 2019-03-05 (Neil Henning)
- Initial draft
Change log for August 11, 2019 Vulkan 1.1.118 spec update: * Update release number to 118. Github Issues: * Update `BUILD.adoc` to specifically require asciidoctor 1.5.8, and make that change to the gitlab CI script (public issue 968). * Remove redundant slink:VkSubpassDependency and slink:VkSubpassDependency2KHR valid usage statements (public pull request 995). * Clarify the <<vkGetInstanceProcAddr behavior>> and <<vkGetDeviceProcAddr behavior>> tables (public pull request 1004). * Fix use of nonexistent slink:VkSamplerYcbcrConversionImageFormatProperties::pname:maxCombinedImageSamplerDescriptorCount (public pull request 1010). * Use compatible pathlib for python2 (public pull request 1012). Internal Issues: * Mark the <<VK_KHR_vulkan_memory_model>> extension as no longer provisional in `vk.xml` (internal issue 1369). * Clarify that use-defined code:Input and code:Output variables cannot be code:Boolean in the <<interfaces-iointerfaces-user, User-defined Variable Interface>> section (internal issue 1663). * Fix naming inconsistencies in slink:VkPhysicalDevicePerformanceQueryFeaturesKHR, slink:VkPhysicalDevicePerformanceQueryPropertiesKHR, slink:VkQueryPoolPerformanceCreateInfoKHR, and associated enumerants (internal issue 1746). * Use ACM reference style for normative references (internal merge request 3256). * Explicitly list the features changed in Vulkan 1.1 in the <<features-requirements, Feature Requirements>> section and the <<versions, Core Revisions (Informative)>> appendix (internal merge request 3274). * Add the slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT structure to the <<VK_EXT_subgroup_size_control>> extension, which was accidentally omitted in the initial release of the extension (internal merge request 3287). * Add missing slink:VkImageUsageFlag description for ename:VK_IMAGE_USAGE_FRAGMENT_DENSITY_MAP_BIT_EXT (internal merge request 3292). * Add valid usage statements to slink:VkAccelerationStructureInfoNV and flink:vkGetAccelerationStructureHandleNV to clarify usage of acceleration structure handle and geometries (internal merge request 3292). New Extensions: * `<<VK_AMD_shader_core_properties2>>` * `<<VK_AMD_pipeline_compiler_control>>`
2019-08-11 04:54:43 -07:00
* Revision 2, 2019-07-26 (Jason Ekstrand)
- Add the missing slink:VkPhysicalDeviceSubgroupSizeControlFeaturesEXT
for querying subgroup size control features.