| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Vulkan.Extensions.VK_EXT_subgroup_size_control
Description
Name
VK_EXT_subgroup_size_control - device extension
VK_EXT_subgroup_size_control
- Name String
VK_EXT_subgroup_size_control
- Extension Type
- Device extension
- Registered Extension Number
- 226
- Revision
- 2
- Ratification Status
- Not ratified
- Extension and Version Dependencies
- Vulkan Version 1.1
- Deprecation State
- Promoted to Vulkan 1.3
- Contact
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
PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT 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:
\[s = { WorkGroupSize.x \times WorkGroupSize.y \times WorkgroupSize.z \leq SubgroupSize \times 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 Structures
Extending
PhysicalDeviceProperties2:Extending
PipelineShaderStageCreateInfo,ShaderCreateInfoEXT:
New Enum Constants
EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSIONExtending
PipelineShaderStageCreateFlagBits:Extending
StructureType:
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
PhysicalDeviceSubgroupSizeControlFeaturesEXTfor querying subgroup size control features.
- Add the missing
See Also
No cross-references are available
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.
Documentation
pattern STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT :: StructureType Source #
pattern STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT :: StructureType Source #
pattern PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT :: PipelineShaderStageCreateFlagBits Source #
pattern PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT :: PipelineShaderStageCreateFlagBits Source #
type PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures Source #
type PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties Source #
type PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo Source #
pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION :: Integral a => a Source #
type EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control" Source #
pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME :: (Eq a, IsString a) => a Source #