Safe Haskell | None |
---|---|
Language | Haskell2010 |
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
- Extension and Version Dependencies
- Requires Vulkan 1.1
- Contact
Other Extension Metadata
- 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
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
:
New Enum Constants
EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION
Extending
PipelineShaderStageCreateFlagBits
:Extending
StructureType
:
Version History
Revision 1, 2019-03-05 (Neil Henning)
- Initial draft
Revision 2, 2019-07-26 (Jason Ekstrand)
- Add the missing
PhysicalDeviceSubgroupSizeControlFeaturesEXT
for querying subgroup size control features.
- Add the missing
See Also
PhysicalDeviceSubgroupSizeControlFeaturesEXT
,
PhysicalDeviceSubgroupSizeControlPropertiesEXT
,
PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
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.
Synopsis
- data PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeaturesEXT {}
- data PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlPropertiesEXT {}
- data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT {}
- type EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION = 2
- pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION :: forall a. Integral a => a
- type EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control"
- pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
Documentation
data PhysicalDeviceSubgroupSizeControlFeaturesEXT Source #
VkPhysicalDeviceSubgroupSizeControlFeaturesEXT - Structure describing the subgroup size control features that can be supported by an implementation
Members
The members of the PhysicalDeviceSubgroupSizeControlFeaturesEXT
structure describe the following features:
Description
If the PhysicalDeviceSubgroupSizeControlFeaturesEXT
structure is
included in the pNext
chain of
PhysicalDeviceFeatures2
,
it is filled with values indicating whether the feature is supported.
PhysicalDeviceSubgroupSizeControlFeaturesEXT
can also be included in
the pNext
chain of DeviceCreateInfo
to enable
the feature.
Note
The PhysicalDeviceSubgroupSizeControlFeaturesEXT
structure was added
in version 2 of the VK_EXT_subgroup_size_control
extension. Version 1
implementations of this extension will not fill out the features
structure but applications may assume that both subgroupSizeControl
and computeFullSubgroups
are supported if the extension is supported.
(See also the
Feature Requirements
section.) Applications are advised to add a
PhysicalDeviceSubgroupSizeControlFeaturesEXT
structure to the pNext
chain of DeviceCreateInfo
to enable the features
regardless of the version of the extension supported by the
implementation. If the implementation only supports version 1, it will
safely ignore the PhysicalDeviceSubgroupSizeControlFeaturesEXT
structure.
Valid Usage (Implicit)
See Also
PhysicalDeviceSubgroupSizeControlFeaturesEXT | |
|
Instances
data PhysicalDeviceSubgroupSizeControlPropertiesEXT Source #
VkPhysicalDeviceSubgroupSizeControlPropertiesEXT - Structure describing the control subgroup size properties of an implementation
Members
The members of the PhysicalDeviceSubgroupSizeControlPropertiesEXT
structure describe the following properties:
Description
If the PhysicalDeviceSubgroupSizeControlPropertiesEXT
structure is
included in the pNext
chain of
PhysicalDeviceProperties2
,
it is filled with the implementation-dependent limits.
If
PhysicalDeviceSubgroupProperties
::supportedOperations
includes
https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#features-subgroup-quad,
minSubgroupSize
must be greater than or equal to 4.
Valid Usage (Implicit)
See Also
PhysicalDeviceSubgroupSizeControlPropertiesEXT | |
|
Instances
data PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT Source #
VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT - Structure specifying the required subgroup size of a newly created pipeline shader stage
Valid Usage
Description
If a PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
structure is
included in the pNext
chain of
PipelineShaderStageCreateInfo
, it specifies
that the pipeline shader stage being compiled has a required subgroup
size.
Valid Usage (Implicit)
See Also
PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT | |
|
Instances
pattern EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION :: forall a. Integral a => a Source #
type EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control" Source #
pattern EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a Source #