All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.lwjgl.vulkan.EXTSubgroupSizeControl Maven / Gradle / Ivy

Go to download

A new generation graphics and compute API that provides high-efficiency, cross-platform access to modern GPUs used in a wide variety of devices from PCs and consoles to mobile phones and embedded platforms.

There is a newer version: 3.3.4
Show newest version
/*
 * 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
*
*
* *
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() {} }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy