Deprecation State
- 
Promoted to Vulkan 1.3 
Contact
- 
Neil Henning [GitHub]sheredom 
Other Extension Metadata
- Last Modified Date
- 
2019-03-05 
- Contributors
- 
- 
Jeff Bolz, NVIDIA 
- 
Faith 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 
 
- 
Description
This extension enables an implementation to control the subgroup size by allowing a varying subgroup size and also specifying a required subgroup size.
It 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 SubgroupSize decorated variables in the SPIR-V shader
modules provided to pipeline creation may vary between the
minimum and maximum
subgroup sizes.
An implementation is also optionally allowed to support specifying a
required subgroup size for a given pipeline stage.
Implementations advertise which stages
support a required subgroup size, and any pipeline of a supported stage
can be passed a VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure to set the subgroup size for that shader stage of the pipeline.
For compute shaders, this requires the developer to query the
maxComputeWorkgroupSubgroups
and ensure that:
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 Structures
- 
Extending VkPhysicalDeviceFeatures2, VkDeviceCreateInfo: 
- 
Extending VkPhysicalDeviceProperties2: 
- 
Extending VkPipelineShaderStageCreateInfo, VkShaderCreateInfoEXT: 
New Enum Constants
- 
VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
- 
VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
- 
Extending VkPipelineShaderStageCreateFlagBits: - 
VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
- 
VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
 
- 
- 
Extending VkStructureType: - 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT
- 
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT
- 
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT
 
- 
Promotion to Vulkan 1.3
Vulkan APIs in this extension are included in core Vulkan 1.3, with the EXT suffix omitted. External interactions defined by this extension, such as SPIR-V token names, retain their original names. The original Vulkan API names are still available as aliases of the core functionality.
Version History
- 
Revision 1, 2019-03-05 (Neil Henning) - 
Initial draft 
 
- 
- 
Revision 2, 2019-07-26 (Faith Ekstrand) - 
Add the missing VkPhysicalDeviceSubgroupSizeControlFeaturesEXT for querying subgroup size control features. 
 
- 
Document Notes
For more information, see the Vulkan Specification
This page is a generated document. Fixes and changes should be made to the generator scripts, not directly.