Class EXTSubgroupSizeControl
- java.lang.Object
-
- org.lwjgl.vulkan.EXTSubgroupSizeControl
-
public final class EXTSubgroupSizeControl extends java.lang.Object
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
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 themaxComputeWorkgroupSubgroups
and ensure that: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.
- Name String
VK_EXT_subgroup_size_control
- Extension Type
- Device extension
- Registered Extension Number
- 226
- Revision
- 2
- Extension and Version Dependencies
- Requires Vulkan 1.1
- Contact
- Neil Henning sheredom
- 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
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.String
VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
The extension name.static int
VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
The extension specification version.static int
VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXTExtendsVkPipelineShaderStageCreateFlagBits
.static int
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_EXTExtendsVkStructureType
.
-
-
-
Field Detail
-
VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
The extension specification version.
-
VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME
The extension name.
-
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT, VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT
-
VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT, VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
ExtendsVkPipelineShaderStageCreateFlagBits
.Enum values:
-
-