mirror of
https://github.com/status-im/Vulkan-Docs.git
synced 2025-02-26 13:05:13 +00:00
* Happy 50th Lunar Landing Day! * Update release number to 116. Internal Issues: * Clarify that flink:vkCmdBeginQuery is the same as flink:vkCmdBeginQueryIndexEXT with index = 0, and that flink:vkCmdEndQuery is the same as flink:vkCmdEndQueryIndexEXT with index = 0 (internal issue 1735). * Clarify that when copying the depth aspect between buffers and images via slink:VkBufferImage Copy, the depth values in buffer memory must be in range if the `<<VK_EXT_depth_range_unrestricted>>` extension is not enabled (internal issue 1737). * Minor language tweaks in the <<spirvenv-module-validation, Validation Rules within a Module>> section (internal issue 1744). * Change the slink:VkPhysicalDeviceFloatControlsPropertiesKHR structure in the `<<VK_KHR_shader_controls>>` extension. This is a rare case of breaking the interface of an existing extension to acknowledge the reality of divergent vendor implementations that could not be described properly otherwise, and the breaking change is considered acceptable given the expected low use of the extension (internal issue 1734). Specific changes: ** Added the slink:VkShaderFloatControlsIndependenceKHR enumeration to describe the three possible behaviors. ** Renamed pname:separateDenormSettings to pname:denormBehaviorIndependence. ** Renamed pname:separateRoundingModeSettings to pname:roundingModeIndependence * Add a missing valid usage statement for slink:VkQueryPoolCreateInfo::pname:queryCount (internal issue 1742). * Update the `<<VK_NV_shading_rate_image>>` appendix to list all interfaces defined by the extension. * Add a valid usage statement to slink:VkWriteDescriptorSetAccelerationStructureNV to clarify that acceleration structure descriptors must be top level structures. New Extensions: * `<<VK_EXT_subgroup_size_control>>`
93 lines
3.5 KiB
Plaintext
93 lines
3.5 KiB
Plaintext
// Copyright (c) 2017-2019 Khronos Group. This work is licensed under a
|
|
// Creative Commons Attribution 4.0 International License; see
|
|
// http://creativecommons.org/licenses/by/4.0/
|
|
|
|
include::meta/VK_EXT_subgroup_size_control.txt[]
|
|
|
|
*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
|
|
|
|
=== Short Description
|
|
|
|
Enables an implementation to control the subgroup size by allowing a varying
|
|
subgroup size and also specifying a required subgroup size.
|
|
|
|
=== Description
|
|
|
|
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 code:SubgroupSize decorated variables in the SPIR-V shader
|
|
modules provided to pipeline creation may: vary between the
|
|
<<limits-min-subgroup-size,minimum>> and
|
|
<<limits-max-subgroup-size,maximum>> subgroup sizes.
|
|
|
|
An implementation is also optionally allowed to support specifying a
|
|
required subgroup size for a given pipeline stage.
|
|
Implementations advertise which <<limits-required-subgroup-size-stages,
|
|
stages support a required subgroup size>>, and any pipeline of a supported
|
|
stage can be passed a
|
|
slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT structure to
|
|
set the subgroup size for that shader stage of the pipeline.
|
|
For compute shaders, this requires the developer to query the
|
|
<<limits-max-subgroups-per-workgroup, pname:maxComputeWorkgroupSubgroups>>
|
|
and ensure that:
|
|
|
|
[latexmath]
|
|
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
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.
|
|
|
|
=== New Enum Constants
|
|
|
|
* Extending elink:VkStructureType:
|
|
** ename:VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT
|
|
** ename:VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT
|
|
* Extending elink:VkPipelineShaderStageCreateFlagBits:
|
|
** ename:VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT
|
|
** ename:VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
|
|
|
|
=== New Structures
|
|
|
|
* slink:VkPhysicalDeviceSubgroupSizeControlPropertiesEXT
|
|
* slink:VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
|
|
|
|
=== Issues
|
|
|
|
None.
|
|
|
|
=== Version History
|
|
|
|
* Revision 1, 2019-03-05 (Neil Henning)
|
|
- Initial draft
|