Class 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.


    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 the maxComputeWorkgroupSubgroups 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
    Extension Type
    Device extension
    Registered Extension Number
    Extension and Version Dependencies
    • Requires Vulkan 1.1
    Last Modified Date
    • 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