org.lwjgl.vulkan.EXTSubgroupSizeControl Maven / Gradle / Ivy
Show all versions of lwjgl-vulkan Show documentation
/*
* Copyright LWJGL. All rights reserved.
* License terms: https://www.lwjgl.org/license
* MACHINE GENERATED FILE, DO NOT EDIT
*/
package org.lwjgl.vulkan;
/**
* 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 {@code 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 {@link VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT} structure to set the subgroup size for that shader stage of the pipeline. For compute shaders, this requires the developer to query the {@code 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.
*
* VK_EXT_subgroup_size_control
*
*
* - Name String
* - {@code 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
*
*
*
* 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
*
*
*/
public final class EXTSubgroupSizeControl {
/** The extension specification version. */
public static final int VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION = 2;
/** The extension name. */
public static final String VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME = "VK_EXT_subgroup_size_control";
/**
* Extends {@code VkStructureType}.
*
* Enum values:
*
*
* - {@link #VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT}
* - {@link #VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT}
* - {@link #VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT}
*
*/
public static final int
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000,
VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002;
/**
* Extends {@code VkPipelineShaderStageCreateFlagBits}.
*
* Enum values:
*
*
* - {@link #VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT}
* - {@link #VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT}
*
*/
public static final int
VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x1,
VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x2;
private EXTSubgroupSizeControl() {}
}