summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-capabilities.capdef1120
1 files changed, 1084 insertions, 36 deletions
diff --git a/source/slang/slang-capabilities.capdef b/source/slang/slang-capabilities.capdef
index de44c98a5..a173a332f 100644
--- a/source/slang/slang-capabilities.capdef
+++ b/source/slang/slang-capabilities.capdef
@@ -38,43 +38,115 @@
// - `alias`: this defines an alias and does not introduce actual atoms.
-// Several capabilities represent the target formats in which we generate code.
-// Because we can only generate code in one format at a time, all of these are
-// marked as conflicting with one another along the `TargetFormat` axis.
+// How auto-doc works (automatic filling of `a3-02-reference-capability-atoms.md`):
//
-// Note: We are only including here the source code formats we initially generate
-// code in and not the formats that code might be translated into "downstream."
-// Trying to figure out how to integrate both kinds of formats into our capability
-// system will be an interesting challenge (e.g., can we compile code for `hlsl+spirv`
-// and for `glsl+spirv` or even just for `spirv`, and how should all of those impact
-// overloading).
+// 1. `def`/`alias` are considered 'documentable atoms'
//
+// 2. Any successive lines of `///` before a 'documentable atom' is assigned as a
+// doc-comment for the 'documentable atom', for example:
+//
+// a. "my comment" will be associated with `textualTarget`
+// ```
+// /// my comment
+// def textualTarget;
+// ```
+//
+// b. "" will be associated with `textualTarget`
+// ```
+// /// my comment
+// //
+// def textualTarget;
+// ```
+//
+// c. "my comment\n additional info" will be associated with `textualTarget`
+// ```
+// /// my comment
+// /// additional info
+// def textualTarget;
+// ```
+//
+// 3. If `[GROUP]` is found apart of a `///[GROUP]` string, this is treated as a "header group".
+// Only these "header groups" are allowed: [Target] [Stage] [EXT] [Version] [Compound] [Other].
+// Example(s) are provided below:
+//
+// a. `textualTarget` will be emitted under header 'Target' with text "my comment"
+// ```
+// /// [Target]
+// /// my comment
+// def textualTarget;
+// ```
+// 4. All 'documentable atoms' must a documentation comment assigned to them. `[GROUP]` does not count as a documentation comment.
+
+/// Represents a non-assembly code generation target.
+/// [Target]
def textualTarget;
abstract target;
+
+/// Represents the HLSL code generation target.
+/// [Target]
def hlsl : target + textualTarget;
+
+/// Represents the GLSL code generation target.
+/// [Target]
def glsl : target + textualTarget;
+
+/// Represents the C programming language code generation target.
+/// [Target]
def c : target + textualTarget;
+
+/// Represents the C++ programming language code generation target.
+/// [Target]
def cpp : target + textualTarget;
+
+/// Represents the CUDA code generation target.
+/// [Target]
def cuda : target + textualTarget;
+
+/// Represents the Metal programming language code generation target.
+/// [Target]
def metal : target + textualTarget;
+
+/// Represents the SPIR-V code generation target.
+/// [Target]
def spirv : target;
-// Capabilities that stand for target spirv version for GLSL backend.
-// These are not compilation targets. We will convert `_spirv_*`->`glsl_spirv_*` during a compile.
+// Capabilities that stand for target SPIR-V versions for the GLSL backend.
+// These are not compilation targets. We will convert `_spirv_*` to `glsl_spirv_*` during compilation.
+
+/// Represents SPIR-V 1.0 through glslang.
+/// [Version]
def glsl_spirv_1_0 : glsl;
+
+/// Represents SPIR-V 1.1 through glslang.
+/// [Version]
def glsl_spirv_1_1 : glsl_spirv_1_0;
+
+/// Represents SPIR-V 1.2 through glslang.
+/// [Version]
def glsl_spirv_1_2 : glsl_spirv_1_1;
+
+/// Represents SPIR-V 1.3 through glslang.
+/// [Version]
def glsl_spirv_1_3 : glsl_spirv_1_2;
+
+/// Represents SPIR-V 1.4 through glslang.
+/// [Version]
def glsl_spirv_1_4 : glsl_spirv_1_3;
+
+/// Represents SPIR-V 1.5 through glslang.
+/// [Version]
def glsl_spirv_1_5 : glsl_spirv_1_4;
+
+/// Represents SPIR-V 1.6 through glslang.
+/// [Version]
def glsl_spirv_1_6 : glsl_spirv_1_5;
// We have multiple capabilities for the various SPIR-V versions,
// arranged so that they inherit from one another to represent which versions
// provide a super-set of the features of earlier ones (e.g., SPIR-V 1.4 is
// expressed as inheriting from SPIR-V 1.3).
-//
+
def _spirv_1_0 : spirv;
def _spirv_1_1 : _spirv_1_0;
def _spirv_1_2 : _spirv_1_1;
@@ -96,14 +168,30 @@ def _GLSL_440 : _GLSL_430;
def _GLSL_450 : _GLSL_440;
def _GLSL_460 : _GLSL_450;
-// metal versions
+// Metal versions
+
+/// Represents MetalLib 2.3.
+/// [Version]
def metallib_2_3 : metal;
+
+/// Represents MetalLib 2.4.
+/// [Version]
def metallib_2_4 : metallib_2_3;
+
+/// Represents MetalLib 3.0.
+/// [Version]
def metallib_3_0 : metallib_2_4;
+
+/// Represents MetalLib 3.1.
+/// [Version]
def metallib_3_1 : metallib_3_0;
+
+/// Represents the latest MetalLib version.
+/// [Version]
alias metallib_latest = metallib_3_1;
-// hlsl versions
+// HLSL versions
+
def _sm_4_0 : hlsl;
def _sm_4_1 : _sm_4_0;
def _sm_5_0 : _sm_4_1;
@@ -117,11 +205,16 @@ def _sm_6_5 : _sm_6_4;
def _sm_6_6 : _sm_6_5;
def _sm_6_7 : _sm_6_6;
+/// Represents HLSL NVAPI support.
+/// [Version]
def hlsl_nvapi : hlsl;
+/// Represents capabilities required for DXIL Library compilation.
+/// [Version]
alias dxil_lib = _sm_6_3;
-// cuda versions
+// CUDA versions
+
def _cuda_sm_1_0 : cuda;
def _cuda_sm_2_0 : _cuda_sm_1_0;
def _cuda_sm_3_0 : _cuda_sm_2_0;
@@ -133,46 +226,156 @@ def _cuda_sm_7_0 : _cuda_sm_6_0;
def _cuda_sm_8_0 : _cuda_sm_7_0;
def _cuda_sm_9_0 : _cuda_sm_8_0;
+/// All code-gen targets
+/// [Compound]
alias any_target = hlsl | metal | glsl | c | cpp | cuda | spirv;
+
+/// All non-asm code-gen targets
+/// [Compound]
alias any_textual_target = hlsl | metal | glsl | c | cpp | cuda;
+
+/// All slang-gfx compatible code-gen targets
+/// [Compound]
alias any_gfx_target = hlsl | metal | glsl | spirv;
+
+/// All "cpp syntax" code-gen targets
+/// [Compound]
alias any_cpp_target = cpp | cuda;
+/// CPP and CUDA code-gen targets
+/// [Compound]
alias cpp_cuda = cpp | cuda;
+
+/// CPP, CUDA and SPIRV code-gen targets
+/// [Compound]
alias cpp_cuda_spirv = cpp | cuda | spirv;
+
+/// CPP, CUDA, GLSL and SPIRV code-gen targets
+/// [Compound]
alias cpp_cuda_glsl_spirv = cpp | cuda | glsl | spirv;
+
+/// CPP, CUDA, GLSL, and HLSL code-gen targets
+/// [Compound]
alias cpp_cuda_glsl_hlsl = cpp | cuda | glsl | hlsl;
+
+/// CPP, CUDA, GLSL, HLSL, and SPIRV code-gen targets
+/// [Compound]
alias cpp_cuda_glsl_hlsl_spirv = cpp | cuda | glsl | hlsl | spirv;
+
+/// CPP, CUDA, GLSL, HLSL, Metal and SPIRV code-gen targets
+/// [Compound]
alias cpp_cuda_glsl_hlsl_metal_spirv = cpp | cuda | glsl | hlsl | metal | spirv;
+
+/// CPP, CUDA, and HLSL code-gen targets
+/// [Compound]
alias cpp_cuda_hlsl = cpp | cuda | hlsl;
+
+/// CPP, CUDA, HLSL, and SPIRV code-gen targets
+/// [Compound]
alias cpp_cuda_hlsl_spirv = cpp | cuda | hlsl | spirv;
+
+/// CPP, CUDA, HLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias cpp_cuda_hlsl_metal_spirv = cpp | cuda | hlsl | metal | spirv;
+
+/// CPP, and GLSL code-gen targets
+/// [Compound]
alias cpp_glsl = cpp | glsl;
+
+/// CPP, GLSL, HLSL, and SPIRV code-gen targets
+/// [Compound]
alias cpp_glsl_hlsl_spirv = cpp | glsl | hlsl | spirv;
+
+/// CPP, GLSL, HLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias cpp_glsl_hlsl_metal_spirv = cpp | glsl | hlsl | metal | spirv;
+
+/// CPP, and HLSL code-gen targets
+/// [Compound]
alias cpp_hlsl = cpp | hlsl;
+
+/// CUDA, GLSL, and HLSL code-gen targets
+/// [Compound]
alias cuda_glsl_hlsl = cuda | glsl | hlsl;
+
+/// CUDA, HLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias cuda_hlsl_metal_spirv = cuda | hlsl | metal | spirv;
+
+/// CUDA, GLSL, HLSL, and SPIRV code-gen targets
+/// [Compound]
alias cuda_glsl_hlsl_spirv = cuda | glsl | hlsl | spirv;
+
+/// CUDA, GLSL, HLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias cuda_glsl_hlsl_metal_spirv = cuda | glsl | hlsl | metal | spirv;
+
+/// CUDA, GLSL, and SPIRV code-gen targets
+/// [Compound]
alias cuda_glsl_spirv = cuda | glsl | spirv;
+
+/// CUDA, GLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias cuda_glsl_metal_spirv = cuda | glsl | metal | spirv;
+
+/// CUDA, and HLSL code-gen targets
+/// [Compound]
alias cuda_hlsl = cuda | hlsl;
+
+/// CUDA, HLSL, SPIRV code-gen targets
+/// [Compound]
alias cuda_hlsl_spirv = cuda | hlsl | spirv;
+
+/// GLSL, HLSL, and SPIRV code-gen targets
+/// [Compound]
alias glsl_hlsl_spirv = glsl | hlsl | spirv;
+
+/// GLSL, HLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias glsl_hlsl_metal_spirv = glsl | hlsl | metal | spirv;
+
+/// GLSL, Metal, and SPIRV code-gen targets
+/// [Compound]
alias glsl_metal_spirv = glsl | metal | spirv;
+
+/// GLSL, and SPIRV code-gen targets
+/// [Compound]
alias glsl_spirv = glsl | spirv;
+
+/// HLSL, and SPIRV code-gen targets
+/// [Compound]
alias hlsl_spirv = hlsl | spirv;
+// stages
+//
abstract stage;
+
+/// Vertex shader stage
+/// [Stage]
def vertex : stage;
+
+/// Fragment shader stage
+/// [Stage]
def fragment : stage;
+
+/// Compute shader stage
+/// [Stage]
def compute : stage;
+
+/// Hull shader stage
+/// [Stage]
def hull : stage;
+
+/// Domain shader stage
+/// [Stage]
def domain : stage;
+
+/// Geometry shader stage
+/// [Stage]
def geometry : stage;
+
def _raygen : stage;
+alias _raygeneration = _raygen;
def _intersection : stage;
def _anyhit : stage;
def _closesthit: stage;
@@ -181,66 +384,222 @@ def _miss : stage;
def _mesh : stage;
def _amplification : stage;
-// SPIRV extensions.
+// SPIRV extensions
+/// Represents the SPIR-V extension for fragment shader interlock operations.
+/// [EXT]
def SPV_EXT_fragment_shader_interlock : _spirv_1_0;
+
+/// Represents the SPIR-V extension for physical storage buffer.
+/// [EXT]
def SPV_EXT_physical_storage_buffer : _spirv_1_3;
+
+/// Represents the SPIR-V extension for SPV_EXT_fragment_fully_covered.
+/// [EXT]
def SPV_EXT_fragment_fully_covered : _spirv_1_0;
+
+/// Represents the SPIR-V extension for descriptor indexing.
+/// [EXT]
def SPV_EXT_descriptor_indexing : _spirv_1_0;
+
+/// Represents the SPIR-V extension for atomic float add operations.
+/// [EXT]
def SPV_EXT_shader_atomic_float_add : _spirv_1_0;
+
+/// Represents the SPIR-V extension for atomic float16 add operations.
+/// [EXT]
def SPV_EXT_shader_atomic_float16_add : SPV_EXT_shader_atomic_float_add;
+
+/// Represents the SPIR-V extension for atomic float min/max operations.
+/// [EXT]
def SPV_EXT_shader_atomic_float_min_max : _spirv_1_0;
+
+/// Represents the SPIR-V extension for mesh shaders.
+/// [EXT]
def SPV_EXT_mesh_shader : _spirv_1_4;
+
+/// Represents the SPIR-V extension for demoting to helper invocation.
+/// [EXT]
def SPV_EXT_demote_to_helper_invocation : _spirv_1_4;
+/// Represents the SPIR-V extension for fragment shader barycentric.
+/// [EXT]
def SPV_KHR_fragment_shader_barycentric : _spirv_1_0;
+
+/// Represents the SPIR-V extension for non-semantic information.
+/// [EXT]
def SPV_KHR_non_semantic_info : _spirv_1_0;
+
+/// Represents the SPIR-V extension for ray tracing.
+/// [EXT]
def SPV_KHR_ray_tracing : _spirv_1_4;
+
+/// Represents the SPIR-V extension for ray queries.
+/// [EXT]
def SPV_KHR_ray_query : _spirv_1_0;
-def SPV_KHR_ray_tracing_position_fetch : _spirv_1_0; // requires SPV_KHR_ray_query or SPV_KHR_ray_tracing
+
+/// Represents the SPIR-V extension for ray tracing position fetch.
+/// Should be used with either SPV_KHR_ray_query or SPV_KHR_ray_tracing.
+/// [EXT]
+def SPV_KHR_ray_tracing_position_fetch : _spirv_1_0;
+
+/// Represents the SPIR-V extension for shader clock.
+/// [EXT]
def SPV_KHR_shader_clock : _spirv_1_0;
+/// Represents the SPIR-V extension for shader subgroup partitioned.
+/// [EXT]
def SPV_NV_shader_subgroup_partitioned : _spirv_1_0;
+
+/// Represents the SPIR-V extension for ray tracing motion blur.
+/// [EXT]
def SPV_NV_ray_tracing_motion_blur : _spirv_1_0;
+
+/// Represents the SPIR-V extension for shader invocation reorder.
+/// Requires SPV_KHR_ray_tracing.
+/// [EXT]
def SPV_NV_shader_invocation_reorder : _spirv_1_5 + SPV_KHR_ray_tracing;
+
+/// Represents the SPIR-V extension for shader image footprint.
+/// [EXT]
def SPV_NV_shader_image_footprint : _spirv_1_0;
+
+/// Represents the SPIR-V extension for compute shader derivatives.
+/// [EXT]
def SPV_NV_compute_shader_derivatives : _spirv_1_0;
+/// Represents the SPIR-V extension for SPV_GOOGLE_user_type.
+/// [EXT]
def SPV_GOOGLE_user_type : _spirv_1_0;
// SPIRV Capabilities.
+/// Represents the SPIR-V capability for atomic float 32 add operations.
+/// [EXT]
def spvAtomicFloat32AddEXT : SPV_EXT_shader_atomic_float_add;
+
+/// Represents the SPIR-V capability for atomic float 16 add operations.
+/// [EXT]
def spvAtomicFloat16AddEXT : SPV_EXT_shader_atomic_float16_add;
+
+/// Represents the SPIR-V capability for 64-bit integer atomics.
+/// [EXT]
def spvInt64Atomics : _spirv_1_0;
+
+/// Represents the SPIR-V capability for atomic float 32 min/max operations.
+/// [EXT]
def spvAtomicFloat32MinMaxEXT : SPV_EXT_shader_atomic_float_min_max;
+
+/// Represents the SPIR-V capability for atomic float 16 min/max operations.
+/// [EXT]
def spvAtomicFloat16MinMaxEXT : SPV_EXT_shader_atomic_float_min_max;
+
+/// Represents the SPIR-V capability for 'derivative control' operations.
+/// [EXT]
def spvDerivativeControl : _spirv_1_0;
+
+/// Represents the SPIR-V capability for image query operations.
+/// [EXT]
def spvImageQuery : _spirv_1_0;
+
+/// Represents the SPIR-V capability for extended image gather operations.
+/// [EXT]
def spvImageGatherExtended : _spirv_1_0;
+
+/// Represents the SPIR-V capability for sparse residency.
+/// [EXT]
def spvSparseResidency : _spirv_1_0;
+
+/// Represents the SPIR-V capability for image footprint.
+/// [EXT]
def spvImageFootprintNV : SPV_NV_shader_image_footprint;
+
+/// Represents the SPIR-V capability for using minimum LOD operations.
+/// [EXT]
def spvMinLod : _spirv_1_0;
+
+/// Represents the SPIR-V capability for using SPV_EXT_fragment_shader_interlock.
+/// [EXT]
def spvFragmentShaderPixelInterlockEXT : SPV_EXT_fragment_shader_interlock;
+
+/// Represents the SPIR-V capability for using SPV_KHR_fragment_shader_barycentric.
+/// [EXT]
def spvFragmentBarycentricKHR : SPV_KHR_fragment_shader_barycentric;
+
+/// Represents the SPIR-V capability for using SPV_EXT_fragment_fully_covered functionality.
+/// [EXT]
def spvFragmentFullyCoveredEXT : SPV_EXT_fragment_fully_covered;
+
+/// Represents the SPIR-V capability for group non-uniform ballot operations.
+/// [EXT]
def spvGroupNonUniformBallot : _spirv_1_3;
+
+/// Represents the SPIR-V capability for group non-uniform shuffle operations.
+/// [EXT]
def spvGroupNonUniformShuffle : _spirv_1_3;
+
+/// Represents the SPIR-V capability for group non-uniform arithmetic operations.
+/// [EXT]
def spvGroupNonUniformArithmetic : _spirv_1_3;
+
+/// Represents the SPIR-V capability for group non-uniform quad operations.
+/// [EXT]
def spvGroupNonUniformQuad : _spirv_1_3;
+
+/// Represents the SPIR-V capability for group non-uniform vote operations.
+/// [EXT]
def spvGroupNonUniformVote : _spirv_1_3;
+
+/// Represents the SPIR-V capability for group non-uniform partitioned operations.
+/// [EXT]
def spvGroupNonUniformPartitionedNV : _spirv_1_3 + SPV_NV_shader_subgroup_partitioned;
+
+/// Represents the SPIR-V capability for ray tracing motion blur.
+/// [EXT]
def spvRayTracingMotionBlurNV : SPV_NV_ray_tracing_motion_blur;
+
+/// Represents the SPIR-V capability for mesh shading.
+/// [EXT]
def spvMeshShadingEXT : SPV_EXT_mesh_shader;
+
+/// Represents the SPIR-V capability for ray tracing.
+/// [EXT]
def spvRayTracingKHR : SPV_KHR_ray_tracing;
+
+/// Represents the SPIR-V capability for ray tracing position fetch.
+/// [EXT]
def spvRayTracingPositionFetchKHR : SPV_KHR_ray_tracing_position_fetch + spvRayTracingKHR;
+
+/// Represents the SPIR-V capability for ray query.
+/// [EXT]
def spvRayQueryKHR : SPV_KHR_ray_query;
+
+/// Represents the SPIR-V capability for ray query position fetch.
+/// [EXT]
def spvRayQueryPositionFetchKHR : SPV_KHR_ray_tracing_position_fetch + spvRayQueryKHR;
+
+/// Represents the SPIR-V capability for shader invocation reorder.
+/// [EXT]
def spvShaderInvocationReorderNV : SPV_NV_shader_invocation_reorder;
+
+/// Represents the SPIR-V capability for shader clock.
+/// [EXT]
def spvShaderClockKHR : SPV_KHR_shader_clock;
+
+/// Represents the SPIR-V capability for non-uniform resource indexing.
+/// [EXT]
def spvShaderNonUniformEXT : SPV_EXT_descriptor_indexing;
+
+/// Represents the SPIR-V capability for non-uniform resource indexing.
+/// [EXT]
def spvShaderNonUniform : spvShaderNonUniformEXT;
+
+/// Represents the SPIR-V capability for demoting to helper invocation.
+/// [EXT]
def spvDemoteToHelperInvocationEXT : SPV_EXT_demote_to_helper_invocation;
+
+/// Represents the SPIR-V capability for demoting to helper invocation.
+/// [EXT]
def spvDemoteToHelperInvocation : spvDemoteToHelperInvocationEXT;
// The following capabilities all pertain to how ray tracing shaders are translated
@@ -318,170 +677,502 @@ def _GL_NV_shader_subgroup_partitioned : _GLSL_140;
def _GL_NV_shader_texture_footprint : _GLSL_450;
// GLSL extension and SPV extension associations.
+
+/// Represents the GL_EXT_buffer_reference extension.
+/// [EXT]
alias GL_EXT_buffer_reference = _GL_EXT_buffer_reference | SPV_EXT_physical_storage_buffer;
+
+/// Represents the GL_EXT_buffer_reference_uvec2 extension.
+/// [EXT]
alias GL_EXT_buffer_reference_uvec2 = _GL_EXT_buffer_reference_uvec2 | _spirv_1_0;
+
+/// Represents the GL_EXT_debug_printf extension.
+/// [EXT]
alias GL_EXT_debug_printf = _GL_EXT_debug_printf | SPV_KHR_non_semantic_info;
+
+/// Represents the GL_EXT_demote_to_helper_invocation extension.
+/// [EXT]
alias GL_EXT_demote_to_helper_invocation = _GL_EXT_demote_to_helper_invocation | spvDemoteToHelperInvocationEXT;
+
+/// Represents the GL_EXT_fragment_shader_barycentric extension.
+/// [EXT]
alias GL_EXT_fragment_shader_barycentric = _GL_EXT_fragment_shader_barycentric | spvFragmentBarycentricKHR;
+
+/// Represents the GL_EXT_mesh_shader extension.
+/// [EXT]
alias GL_EXT_mesh_shader = _GL_EXT_mesh_shader | spvMeshShadingEXT;
+
+/// Represents the GL_EXT_nonuniform_qualifier extension.
+/// [EXT]
alias GL_EXT_nonuniform_qualifier = _GL_EXT_nonuniform_qualifier | spvShaderNonUniformEXT;
+
+/// Represents the GL_EXT_ray_query extension.
+/// [EXT]
alias GL_EXT_ray_query = _GL_EXT_ray_query | spvRayQueryKHR;
+
+/// Represents the GL_EXT_ray_tracing extension.
+/// [EXT]
alias GL_EXT_ray_tracing = _GL_EXT_ray_tracing | spvRayTracingKHR;
+
+/// Represents the GL_EXT_ray_tracing_position_fetch_ray_tracing extension.
+/// [EXT]
alias GL_EXT_ray_tracing_position_fetch_ray_tracing = _GL_EXT_ray_tracing_position_fetch | spvRayTracingPositionFetchKHR;
+
+/// Represents the GL_EXT_ray_tracing_position_fetch_ray_query extension.
+/// [EXT]
alias GL_EXT_ray_tracing_position_fetch_ray_query = _GL_EXT_ray_tracing_position_fetch | spvRayQueryPositionFetchKHR;
+
+/// Represents the GL_EXT_ray_tracing_position_fetch extension.
+/// [EXT]
alias GL_EXT_ray_tracing_position_fetch = GL_EXT_ray_tracing_position_fetch_ray_tracing + GL_EXT_ray_tracing_position_fetch_ray_query;
+
+/// Represents the GL_EXT_samplerless_texture_functions extension.
+/// [EXT]
alias GL_EXT_samplerless_texture_functions = _GL_EXT_samplerless_texture_functions | _spirv_1_0;
+
+/// Represents the GL_EXT_shader_atomic_float extension.
+/// [EXT]
alias GL_EXT_shader_atomic_float = _GL_EXT_shader_atomic_float | spvAtomicFloat32AddEXT + spvAtomicFloat32MinMaxEXT;
+
+/// Represents the GL_EXT_shader_atomic_float_min_max extension.
+/// [EXT]
alias GL_EXT_shader_atomic_float_min_max = _GL_EXT_shader_atomic_float_min_max | spvAtomicFloat32MinMaxEXT + spvAtomicFloat16MinMaxEXT;
+
+/// Represents the GL_EXT_shader_atomic_float2 extension.
+/// [EXT]
alias GL_EXT_shader_atomic_float2 = _GL_EXT_shader_atomic_float2 | spvAtomicFloat32AddEXT + spvAtomicFloat32MinMaxEXT + spvAtomicFloat16AddEXT + spvAtomicFloat16MinMaxEXT;
+
+/// Represents the GL_EXT_shader_atomic_int64 extension.
+/// [EXT]
alias GL_EXT_shader_atomic_int64 = _GL_EXT_shader_atomic_int64 | spvInt64Atomics;
+
+/// Represents the GL_EXT_shader_explicit_arithmetic_types_int64 extension.
+/// [EXT]
alias GL_EXT_shader_explicit_arithmetic_types_int64 = _GL_EXT_shader_explicit_arithmetic_types_int64 | _spirv_1_0;
+
+/// Represents the GL_EXT_shader_image_load_store extension.
+/// [EXT]
alias GL_EXT_shader_image_load_store = _GL_EXT_shader_image_load_store | _spirv_1_0;
+
+/// Represents the GL_EXT_shader_realtime_clock extension.
+/// [EXT]
alias GL_EXT_shader_realtime_clock = _GL_EXT_shader_realtime_clock | spvShaderClockKHR;
+
+/// Represents the GL_EXT_texture_query_lod extension.
+/// [EXT]
alias GL_EXT_texture_query_lod = _GL_EXT_texture_query_lod | spvImageQuery | metal;
+
+/// Represents the GL_EXT_texture_shadow_lod extension.
+/// [EXT]
alias GL_EXT_texture_shadow_lod = _GL_EXT_texture_shadow_lod | _spirv_1_0;
+/// Represents the GL_ARB_derivative_control extension.
+/// [EXT]
alias GL_ARB_derivative_control = _GL_ARB_derivative_control | spvDerivativeControl;
+
+/// Represents the GL_ARB_fragment_shader_interlock extension.
+/// [EXT]
alias GL_ARB_fragment_shader_interlock = _GL_ARB_fragment_shader_interlock | spvFragmentShaderPixelInterlockEXT;
+
+/// Represents the GL_ARB_gpu_shader5 extension.
+/// [EXT]
alias GL_ARB_gpu_shader5 = _GL_ARB_gpu_shader5 | _spirv_1_0;
+
+/// Represents the GL_ARB_shader_image_load_store extension.
+/// [EXT]
alias GL_ARB_shader_image_load_store = GL_EXT_shader_image_load_store;
+
+/// Represents the GL_ARB_shader_image_size extension.
+/// [EXT]
alias GL_ARB_shader_image_size = _GL_ARB_shader_image_size | spvImageQuery | metal;
+
+/// Represents the GL_ARB_texture_multisample extension.
+/// [EXT]
alias GL_ARB_texture_multisample = _GL_ARB_texture_multisample | _spirv_1_0;
+
+/// Represents the GL_ARB_shader_texture_image_samples extension.
+/// [EXT]
alias GL_ARB_shader_texture_image_samples = _GL_ARB_shader_texture_image_samples | spvImageQuery | metal;
+
+/// Represents the GL_ARB_sparse_texture extension.
+/// [EXT]
alias GL_ARB_sparse_texture = _GL_ARB_sparse_texture | spvSparseResidency;
+
+/// Represents the GL_ARB_sparse_texture2 extension.
+/// [EXT]
alias GL_ARB_sparse_texture2 = _GL_ARB_sparse_texture2 | spvSparseResidency;
+
+/// Represents the GL_ARB_sparse_texture_clamp extension.
+/// [EXT]
alias GL_ARB_sparse_texture_clamp = _GL_ARB_sparse_texture_clamp | spvSparseResidency;
+
+/// Represents the GL_ARB_texture_gather extension.
+/// [EXT]
alias GL_ARB_texture_gather = _GL_ARB_texture_gather | spvImageGatherExtended | metal;
+
+/// Represents the GL_ARB_texture_query_levels extension.
+/// [EXT]
alias GL_ARB_texture_query_levels = _GL_ARB_texture_query_levels | spvImageQuery | metal;
+
+/// Represents the GL_ARB_shader_clock extension.
+/// [EXT]
alias GL_ARB_shader_clock = _GL_ARB_shader_clock | spvShaderClockKHR;
+
+/// Represents the GL_ARB_shader_clock64 extension.
+/// [EXT]
alias GL_ARB_shader_clock64 = _GL_ARB_shader_clock64 | spvShaderClockKHR;
+
+/// Represents the GL_ARB_gpu_shader_int64 extension.
+/// [EXT]
alias GL_ARB_gpu_shader_int64 = _GL_ARB_gpu_shader_int64;
+/// Represents the GL_KHR_memory_scope_semantics extension.
+/// [EXT]
alias GL_KHR_memory_scope_semantics = _GL_KHR_memory_scope_semantics | _spirv_1_0;
+
+/// Represents the GL_KHR_shader_subgroup_arithmetic extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_arithmetic = _GL_KHR_shader_subgroup_arithmetic | spvGroupNonUniformArithmetic;
+
+/// Represents the GL_KHR_shader_subgroup_ballot extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_ballot = _GL_KHR_shader_subgroup_ballot | spvGroupNonUniformBallot;
+
+/// Represents the GL_KHR_shader_subgroup_basic extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_basic = _GL_KHR_shader_subgroup_basic | spvGroupNonUniformBallot;
+
+/// Represents the GL_KHR_shader_subgroup_clustered extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_clustered = _GL_KHR_shader_subgroup_clustered | spvGroupNonUniformShuffle;
+
+/// Represents the GL_KHR_shader_subgroup_quad extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_quad = _GL_KHR_shader_subgroup_quad | spvGroupNonUniformQuad;
+
+/// Represents the GL_KHR_shader_subgroup_shuffle extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_shuffle = _GL_KHR_shader_subgroup_shuffle | spvGroupNonUniformShuffle;
+
+/// Represents the GL_KHR_shader_subgroup_shuffle_relative extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_shuffle_relative = _GL_KHR_shader_subgroup_shuffle_relative | spvGroupNonUniformShuffle;
+
+/// Represents the GL_KHR_shader_subgroup_vote extension.
+/// [EXT]
alias GL_KHR_shader_subgroup_vote = _GL_KHR_shader_subgroup_vote | spvGroupNonUniformVote;
+/// Represents the GL_NV_compute_shader_derivatives extension.
+/// [EXT]
alias GL_NV_compute_shader_derivatives = _GL_NV_compute_shader_derivatives | SPV_NV_compute_shader_derivatives | _sm_6_6;
+
+/// Represents the GL_NV_fragment_shader_barycentric extension.
+/// [EXT]
alias GL_NV_fragment_shader_barycentric = GL_EXT_fragment_shader_barycentric;
+
+/// Represents the GL_NV_gpu_shader5 extension.
+/// [EXT]
alias GL_NV_gpu_shader5 = GL_ARB_gpu_shader5;
+
+/// Represents the GL_NV_ray_tracing extension.
+/// [EXT]
alias GL_NV_ray_tracing = GL_EXT_ray_tracing;
+
+/// Represents the GL_NV_ray_tracing_motion_blur extension.
+/// [EXT]
alias GL_NV_ray_tracing_motion_blur = _GL_NV_ray_tracing_motion_blur | spvRayTracingMotionBlurNV;
+
+/// Represents the GL_NV_shader_atomic_fp16_vector extension.
+/// [EXT]
alias GL_NV_shader_atomic_fp16_vector = _GL_NV_shader_atomic_fp16_vector + _GL_NV_gpu_shader5 | _spirv_1_0;
+
+/// Represents the GL_NV_shader_invocation_reorder extension.
+/// [EXT]
alias GL_NV_shader_invocation_reorder = _GL_NV_shader_invocation_reorder + _GL_EXT_buffer_reference_uvec2 | spvShaderInvocationReorderNV;
+
+/// Represents the GL_NV_shader_subgroup_partitioned extension.
+/// [EXT]
alias GL_NV_shader_subgroup_partitioned = _GL_NV_shader_subgroup_partitioned | spvGroupNonUniformPartitionedNV;
+
+/// Represents the GL_NV_shader_texture_footprint extension.
+/// [EXT]
alias GL_NV_shader_texture_footprint = _GL_NV_shader_texture_footprint | spvImageFootprintNV;
// Define feature names not reliant on shader stages
+/// NVAPI capability for HLSL
+/// [Compound]
alias nvapi = hlsl_nvapi;
+
+/// Capabilities needed for minimal raytracing support
+/// [Compound]
alias raytracing = GL_EXT_ray_tracing | _sm_6_3 | cuda;
+/// Capabilities needed for shader-execution-reordering
+/// [Compound]
alias ser = raytracing + GL_NV_shader_invocation_reorder | raytracing + hlsl_nvapi | cuda;
+/// Capabilities needed for raytracing-motionblur
+/// [Compound]
alias motionblur = GL_NV_ray_tracing_motion_blur | _sm_6_3 + hlsl_nvapi | cuda;
+/// Capabilities needed for compute-shader rayquery
+/// [Compound]
alias rayquery = GL_EXT_ray_query | _sm_6_3;
+/// Capabilities needed for compute-shader rayquery and motion-blur
+/// [Compound]
alias raytracing_motionblur = raytracing + motionblur | cuda;
+/// Capabilities needed for shader-execution-reordering and motion-blur
+/// [Compound]
alias ser_motion = ser + motionblur;
+/// Capabilities needed for realtime clocks
+/// [Compound]
alias shaderclock = GL_EXT_shader_realtime_clock | hlsl_nvapi | cpp | cuda;
alias _meshshading = GL_EXT_mesh_shader | _sm_6_5 | metal;
+/// Capabilities needed for interlocked-fragment operations
+/// [Compound]
alias fragmentshaderinterlock = _GL_ARB_fragment_shader_interlock | hlsl_nvapi | spvFragmentShaderPixelInterlockEXT;
+/// Capabilities needed for int64/uint64 atomic operations
+/// [Compound]
alias atomic64 = GL_EXT_shader_atomic_int64 | _sm_6_6 | cpp | cuda;
+/// Capabilities needed to use GLSL-tier-1 float-atomic operations
+/// [Compound]
alias atomicfloat = GL_EXT_shader_atomic_float | _sm_6_0 + hlsl_nvapi | cpp | cuda;
+/// Capabilities needed to use GLSL-tier-2 float-atomic operations
+/// [Compound]
alias atomicfloat2 = GL_EXT_shader_atomic_float2 | _sm_6_6 + hlsl_nvapi | cpp | cuda;
+/// Capabilities needed to use fragment-shader-barycentric's
+/// [Compound]
alias fragmentshaderbarycentric = GL_EXT_fragment_shader_barycentric | _sm_6_1;
+/// (gfx targets) Capabilities needed to use memory barriers
+/// [Compound]
alias shadermemorycontrol = glsl | _spirv_1_0 | _sm_5_0;
+/// Capabilities needed to use HLSL tier wave operations
+/// [Compound]
alias waveprefix = _sm_6_5 | _cuda_sm_7_0 | GL_KHR_shader_subgroup_arithmetic;
+/// Capabilities needed to use GLSL buffer-reference's
+/// [Compound]
alias bufferreference = GL_EXT_buffer_reference;
+/// Capabilities needed to use GLSL buffer-reference's with int64
+/// [Compound]
alias bufferreference_int64 = bufferreference + GL_EXT_shader_explicit_arithmetic_types_int64;
-// non-internal shader stages
-
+// Non-internal shader stages
+//
+/// Pixel shader stage
+/// [Stage]
alias pixel = fragment;
+/// Tessellation Control shader stage
+/// [Stage]
alias tesscontrol = hull;
+
+/// Tessellation Evaluation shader stage
+/// [Stage]
alias tesseval = domain;
-alias _raygeneration = _raygen;
+/// Ray-Generation shader stage & ray-tracing capabilities
+/// [Stage]
alias raygen = _raygen + raytracing;
+
+/// Ray-Generation shader stage & ray-tracing capabilities
+/// [Stage]
alias raygeneration = _raygeneration + raytracing;
+
+/// Intersection shader stage & ray-tracing capabilities
+/// [Stage]
alias intersection = _intersection + raytracing;
+
+/// Any-Hit shader stage & ray-tracing capabilities
+/// [Stage]
alias anyhit = _anyhit + raytracing;
+
+/// Closest-Hit shader stage & ray-tracing capabilities
+/// [Stage]
alias closesthit = _closesthit + raytracing;
+
+/// Callable shader stage & ray-tracing capabilities
+/// [Stage]
alias callable = _callable + raytracing;
+
+/// Ray-Miss shader stage & ray-tracing capabilities
+/// [Stage]
alias miss = _miss + raytracing;
+/// Mesh shader stage & mesh shader capabilities
+/// [Stage]
alias mesh = _mesh + _meshshading;
+
+/// Amplification shader stage & mesh shader capabilities
+/// [Stage]
alias amplification = _amplification + _meshshading;
// shader stage groups
-
+/// Collection of all shader stages
+/// [Compound]
alias any_stage = vertex | fragment | compute | hull | domain | geometry
| raygen | intersection | anyhit | closesthit | miss | mesh
| amplification | callable
;
+
+/// Collection of shader stages
+/// [Compound]
alias amplification_mesh = amplification | mesh;
+
+/// Collection of shader stages
+/// [Compound]
alias raytracing_stages = raygen | intersection | anyhit | closesthit | miss | callable;
+
+/// Collection of shader stages
+/// [Compound]
alias anyhit_closesthit = anyhit | closesthit;
+
+/// Collection of shader stages
+/// [Compound]
alias raygen_closesthit_miss = raygen | closesthit | miss;
+
+/// Collection of shader stages
+/// [Compound]
alias anyhit_closesthit_intersection = anyhit | closesthit | intersection;
+
+/// Collection of shader stages
+/// [Compound]
alias anyhit_closesthit_intersection_miss = anyhit | closesthit | intersection | miss;
+
+/// Collection of shader stages
+/// [Compound]
alias raygen_closesthit_miss_callable = raygen | closesthit | miss | callable;
+
+/// Collection of shader stages
+/// [Compound]
alias compute_tesscontrol_tesseval = compute | tesscontrol | tesseval;
+
+/// Collection of shader stages
+/// [Compound]
alias compute_fragment = compute | fragment;
+
+/// Collection of shader stages
+/// [Compound]
alias compute_fragment_geometry_vertex = compute | fragment | geometry | vertex;
+
+/// Collection of shader stages
+/// [Compound]
alias domain_hull = domain | hull;
+
+/// Collection of shader stages
+/// [Compound]
alias raytracingstages_fragment = raytracing_stages | fragment;
+
+/// Collection of shader stages
+/// [Compound]
alias raytracingstages_compute = raytracing_stages | compute;
+
+/// Collection of shader stages
+/// [Compound]
alias raytracingstages_compute_amplification_mesh = raytracingstages_compute | amplification_mesh;
+
+/// Collection of shader stages
+/// [Compound]
alias raytracingstages_compute_fragment = raytracing_stages | compute_fragment;
+
+/// Collection of shader stages
+/// [Compound]
alias raytracingstages_compute_fragment_geometry_vertex = raytracing_stages | compute_fragment_geometry_vertex;
// Define feature names reliant on shader stages
+/// Ccapabilities required to use mesh shading features
+/// [Compound]
alias meshshading = amplification_mesh + _meshshading;
+/// (gfx targets) Capabilities required to use memory barriers that only work for raytracing & compute shader stages
+/// [Compound]
alias shadermemorycontrol_compute = raytracingstages_compute + shadermemorycontrol;
+
+/// Capabilities required to use Subpass-Input's
+/// [Compound]
alias subpass = fragment + _sm_6_0 | fragment + any_gfx_target;
// Define what each shader model means on different targets.
-// spirv profile
-
+// SPIR-V profile capabilities
+//
+/// Represents SPIR-V 1.0 version.
+/// [Version]
alias spirv_1_0 = _spirv_1_0;
+
+/// Represents SPIR-V 1.1 version, which includes SPIR-V 1.0.
+/// [Version]
alias spirv_1_1 = _spirv_1_1
| spirv_1_0
;
+
+/// Represents SPIR-V 1.2 version, which includes SPIR-V 1.1.
+/// [Version]
alias spirv_1_2 = _spirv_1_2
| spirv_1_1
;
+
+/// Represents SPIR-V 1.3 version, which includes SPIR-V 1.2.
+/// [Version]
alias spirv_1_3 = _spirv_1_3
| spirv_1_2
;
+
+/// Represents SPIR-V 1.4 version, which includes SPIR-V 1.3.
+/// [Version]
alias spirv_1_4 = _spirv_1_4
| spirv_1_3
;
+
+/// Represents SPIR-V 1.5 version, which includes SPIR-V 1.4 and additional extensions.
+/// [Version]
alias spirv_1_5 = _spirv_1_5 + GL_EXT_nonuniform_qualifier + GL_EXT_buffer_reference
| spirv_1_4
;
+
+/// Represents SPIR-V 1.6 version, which includes SPIR-V 1.5 and additional extensions.
+/// [Version]
alias spirv_1_6 = _spirv_1_6 + GL_EXT_debug_printf + GL_EXT_demote_to_helper_invocation
| spirv_1_5
;
+
+/// Represents the latest SPIR-V version.
+/// [Version]
alias spirv_latest = _spirv_1_6;
+// Aliases for SPIR-V versions
+
+/// Use `spirv_1_0` instead
+/// [Other]
alias SPIRV_1_0 = spirv_1_0;
+
+/// Use `spirv_1_1` instead
+/// [Other]
alias SPIRV_1_1 = spirv_1_1;
+
+/// Use `spirv_1_2` instead
+/// [Other]
alias SPIRV_1_2 = spirv_1_2;
+
+/// Use `spirv_1_3` instead
+/// [Other]
alias SPIRV_1_3 = spirv_1_3;
+
+/// Use `spirv_1_4` instead
+/// [Other]
alias SPIRV_1_4 = spirv_1_4;
+
+/// Use `spirv_1_5` instead
+/// [Other]
alias SPIRV_1_5 = spirv_1_5;
-alias SPIRV_1_6 = spirv_1_6;
-// hlsl profile
+/// Use `spirv_1_6` instead
+/// [Other]
+alias SPIRV_1_6 = spirv_1_6;
+// HLSL profile capabilities
+//
+/// HLSL shader model 4.0 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_4_0_version = _sm_4_0
| _GLSL_150
| spirv_1_0
@@ -489,11 +1180,19 @@ alias sm_4_0_version = _sm_4_0
| metal
| cpp
;
+
+
+/// HLSL shader model 4.0 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_4_0 = sm_4_0_version
| SPV_GOOGLE_user_type + spvMinLod
| GL_ARB_sparse_texture_clamp + GL_EXT_samplerless_texture_functions + GL_EXT_texture_query_lod + GL_EXT_texture_shadow_lod + GL_EXT_debug_printf + GL_ARB_shader_image_size
;
+/// HLSL shader model 4.1 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_4_1_version = _sm_4_1
| _GLSL_150
| spirv_1_0
@@ -501,12 +1200,18 @@ alias sm_4_1_version = _sm_4_1
| metal
| cpp
;
+/// HLSL shader model 4.1 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_4_1 = sm_4_1_version
| GL_ARB_texture_gather + GL_ARB_texture_query_levels + GL_ARB_shader_texture_image_samples
// previous
| sm_4_0
;
+/// HLSL shader model 5.0 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_5_0_version = _sm_5_0
| _GLSL_330
| spirv_1_0
@@ -514,6 +1219,9 @@ alias sm_5_0_version = _sm_5_0
| metal
| cpp
;
+/// HLSL shader model 5.0 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_5_0 = sm_5_0_version
| GL_KHR_memory_scope_semantics + GL_ARB_gpu_shader5 + GL_ARB_derivative_control
| spvFragmentFullyCoveredEXT
@@ -521,6 +1229,9 @@ alias sm_5_0 = sm_5_0_version
| sm_4_1
;
+/// HLSL shader model 5.1 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_5_1_version = _sm_5_1
| _GLSL_330
| spirv_1_0
@@ -528,12 +1239,18 @@ alias sm_5_1_version = _sm_5_1
| metal
| cpp
;
+/// HLSL shader model 5.1 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_5_1 = sm_5_1_version
| GL_EXT_nonuniform_qualifier + GL_ARB_gpu_shader5
// previous
| sm_5_0
;
+/// HLSL shader model 6.0 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_0_version = _sm_6_0
| _GLSL_450
| spirv_1_3
@@ -541,12 +1258,18 @@ alias sm_6_0_version = _sm_6_0
| metal
| cpp
;
+/// HLSL shader model 6.0 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_0 = sm_6_0_version
| GL_KHR_shader_subgroup_ballot + GL_KHR_shader_subgroup_shuffle + GL_KHR_shader_subgroup_arithmetic + GL_KHR_shader_subgroup_quad + GL_KHR_shader_subgroup_vote
// previous
| sm_5_1
;
+/// HLSL shader model 6.1 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_1_version = _sm_6_1
| _GLSL_450
| spirv_1_3
@@ -554,12 +1277,18 @@ alias sm_6_1_version = _sm_6_1
| metal
| cpp
;
+/// HLSL shader model 6.1 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_1 = sm_6_1_version
| GL_EXT_fragment_shader_barycentric
// previous
| sm_6_0
;
+/// HLSL shader model 6.2 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_2_version = _sm_6_2
| _GLSL_450
| spirv_1_3
@@ -567,11 +1296,17 @@ alias sm_6_2_version = _sm_6_2
| metal
| cpp
;
+/// HLSL shader model 6.2 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_2 = sm_6_2_version
// previous
| sm_6_1
;
+/// HLSL shader model 6.3 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_3_version = _sm_6_3
| _GLSL_460
| spirv_1_4
@@ -579,12 +1314,18 @@ alias sm_6_3_version = _sm_6_3
| metal
| cpp
;
+/// HLSL shader model 6.3 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_3 = sm_6_3_version
| GL_EXT_ray_tracing + GL_EXT_ray_tracing_position_fetch_ray_tracing
// previous
| sm_6_2
;
+/// HLSL shader model 6.4 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_4_version = _sm_6_4
| _GLSL_460
| spirv_1_4
@@ -592,11 +1333,17 @@ alias sm_6_4_version = _sm_6_4
| metal
| cpp
;
+/// HLSL shader model 6.4 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_4 = sm_6_4_version
// previous
| sm_6_3
;
+/// HLSL shader model 6.5 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_5_version = _sm_6_5
| _GLSL_460
| spirv_1_4
@@ -604,6 +1351,9 @@ alias sm_6_5_version = _sm_6_5
| metal
| cpp
;
+/// HLSL shader model 6.5 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_5 = sm_6_5_version
// also requires: GL_NV_shader_subgroup_partitioned
| GL_EXT_mesh_shader + GL_EXT_ray_query + GL_EXT_ray_tracing_position_fetch_ray_query
@@ -611,6 +1361,9 @@ alias sm_6_5 = sm_6_5_version
| sm_6_4
;
+/// HLSL shader model 6.6 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_6_version = _sm_6_6
| _GLSL_460
| spirv_1_4
@@ -618,11 +1371,17 @@ alias sm_6_6_version = _sm_6_6
| metal
| cpp
;
+/// HLSL shader model 6.6 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_6 = sm_6_6_version
| GL_EXT_shader_atomic_int64 + GL_EXT_shader_atomic_float2 + GL_EXT_shader_atomic_float + _GL_EXT_shader_atomic_float_min_max
| sm_6_5
;
+/// HLSL shader model 6.7 and related capabilities of other targets.
+/// Does not include related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_7_version = _sm_6_7
| _GLSL_460
| spirv_1_4
@@ -630,25 +1389,65 @@ alias sm_6_7_version = _sm_6_7
| metal
| cpp
;
+/// HLSL shader model 6.7 and related capabilities of other targets.
+/// Includes related GLSL/SPIRV extensions.
+/// [Version]
alias sm_6_7 = sm_6_7_version
| sm_6_6
;
+/// Use `sm_4_0` instead
+/// [Other]
alias DX_4_0 = sm_4_0;
+
+/// Use `sm_4_1` instead
+/// [Other]
alias DX_4_1 = sm_4_1;
+
+/// Use `sm_5_0` instead
+/// [Other]
alias DX_5_0 = sm_5_0;
+
+/// Use `sm_5_1` instead
+/// [Other]
alias DX_5_1 = sm_5_1;
+
+/// Use `sm_6_0` instead
+/// [Other]
alias DX_6_0 = sm_6_0;
+
+/// Use `sm_6_1` instead
+/// [Other]
alias DX_6_1 = sm_6_1;
+
+/// Use `sm_6_2` instead
+/// [Other]
alias DX_6_2 = sm_6_2;
+
+/// Use `sm_6_3` instead
+/// [Other]
alias DX_6_3 = sm_6_3;
+
+/// Use `sm_6_4` instead
+/// [Other]
alias DX_6_4 = sm_6_4;
+
+/// Use `sm_6_5` instead
+/// [Other]
alias DX_6_5 = sm_6_5;
+
+/// Use `sm_6_6` instead
+/// [Other]
alias DX_6_6 = sm_6_6;
-alias DX_6_7 = sm_6_7;
-// glsl profile
+/// Use `sm_6_7` instead
+/// [Other]
+alias DX_6_7 = sm_6_7;
+// GLSL profile capabilities
+//
+/// GLSL 130 and related capabilities of other targets.
+/// [Version]
alias GLSL_130 = _GLSL_130
| _sm_4_0
| _cuda_sm_2_0
@@ -656,6 +1455,8 @@ alias GLSL_130 = _GLSL_130
| metal
| cpp
;
+/// GLSL 140 and related capabilities of other targets.
+/// [Version]
alias GLSL_140 = _GLSL_140
| _sm_4_1
| _cuda_sm_2_0
@@ -665,6 +1466,8 @@ alias GLSL_140 = _GLSL_140
// previous
| GLSL_130
;
+/// GLSL 150 and related capabilities of other targets.
+/// [Version]
alias GLSL_150 = _GLSL_150
| _sm_4_1
| _cuda_sm_2_0
@@ -676,6 +1479,8 @@ alias GLSL_150 = _GLSL_150
// previous
| GLSL_140
;
+/// GLSL 330 and related capabilities of other targets.
+/// [Version]
alias GLSL_330 = _GLSL_330
| _sm_5_0
| _cuda_sm_6_0
@@ -685,6 +1490,8 @@ alias GLSL_330 = _GLSL_330
// previous
| GLSL_150
;
+/// GLSL 400 and related capabilities of other targets.
+/// [Version]
alias GLSL_400 = _GLSL_400
| _sm_5_1
| _cuda_sm_6_0
@@ -696,6 +1503,8 @@ alias GLSL_400 = _GLSL_400
// previous
| GLSL_330
;
+/// GLSL 410 and related capabilities of other targets.
+/// [Version]
alias GLSL_410 = _GLSL_410
| _sm_5_1
| _cuda_sm_6_0
@@ -705,6 +1514,8 @@ alias GLSL_410 = _GLSL_410
// previous
| GLSL_400
;
+/// GLSL 420 and related capabilities of other targets.
+/// [Version]
alias GLSL_420 = _GLSL_420
| _sm_5_1
| _cuda_sm_6_0
@@ -716,6 +1527,8 @@ alias GLSL_420 = _GLSL_420
// previous
| GLSL_410
;
+/// GLSL 430 and related capabilities of other targets.
+/// [Version]
alias GLSL_430 = _GLSL_430
| _sm_5_1
| _cuda_sm_6_0
@@ -727,6 +1540,8 @@ alias GLSL_430 = _GLSL_430
// previous
| GLSL_420
;
+/// GLSL 440 and related capabilities of other targets.
+/// [Version]
alias GLSL_440 = _GLSL_440
| _sm_6_0
| _cuda_sm_6_0
@@ -736,6 +1551,8 @@ alias GLSL_440 = _GLSL_440
// previous
| GLSL_430
;
+/// GLSL 450 and related capabilities of other targets.
+/// [Version]
alias GLSL_450 = _GLSL_450
| _sm_6_0
| _cuda_sm_6_0
@@ -747,6 +1564,8 @@ alias GLSL_450 = _GLSL_450
// previous
| GLSL_440
;
+/// GLSL 460 and related capabilities of other targets.
+/// [Version]
alias GLSL_460 = _GLSL_460
| _sm_6_6
| _cuda_sm_6_0
@@ -757,39 +1576,110 @@ alias GLSL_460 = _GLSL_460
| GLSL_450
;
+/// User should not use this capability
+/// [Other]
alias GLSL_410_SPIRV_1_0 = _GLSL_410 | spirv_1_0;
+
+/// User should not use this capability
+/// [Other]
alias GLSL_420_SPIRV_1_0 = _GLSL_420 + GLSL_410_SPIRV_1_0 | GLSL_410_SPIRV_1_0;
-alias GLSL_430_SPIRV_1_0 = _GLSL_430 + GLSL_420_SPIRV_1_0 | GLSL_420_SPIRV_1_0;
-// cuda profile
+/// User should not use this capability
+/// [Other]
+alias GLSL_430_SPIRV_1_0 = _GLSL_430 + GLSL_420_SPIRV_1_0 | GLSL_420_SPIRV_1_0;
+// CUDA profile capabilities
+//
+/// cuda 1.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_1_0 = _cuda_sm_1_0 | sm_4_0;
+
+/// cuda 2.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_2_0 = _cuda_sm_2_0 | sm_4_1;
+
+/// cuda 3.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_3_0 = _cuda_sm_3_0 | sm_6_0;
+
+/// cuda 3.5 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_3_5 = _cuda_sm_3_5 | sm_6_0;
+
+/// cuda 4.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_4_0 = _cuda_sm_4_0 | sm_6_0;
+
+/// cuda 5.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_5_0 = _cuda_sm_5_0 | sm_6_0;
+
+/// cuda 6.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_6_0 = _cuda_sm_6_0 | sm_6_0;
+
+/// cuda 7.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_7_0 = _cuda_sm_7_0 | sm_5_1;
+
+/// cuda 8.0 and related capabilities of other targets.
+/// [Version]
alias cuda_sm_8_0 = _cuda_sm_8_0 | sm_5_1;
-alias cuda_sm_9_0 = _cuda_sm_9_0 | sm_5_1;
-// metal profile
+/// cuda 9.0 and related capabilities of other targets.
+/// [Version]
+alias cuda_sm_9_0 = _cuda_sm_9_0 | sm_5_1;
+// Metal profile capabilities
+//
+/// Use `metallib_2_3` instead
+/// [Other]
alias METAL_2_3 = metallib_2_3;
+
+/// Use `metallib_2_4` instead
+/// [Other]
alias METAL_2_4 = metallib_2_4;
+
+/// Use `metallib_3_0` instead
+/// [Other]
alias METAL_3_0 = metallib_3_0;
-alias METAL_3_1 = metallib_3_1;
-// Profiles of convenience
+/// Use `metallib_3_1` instead
+/// [Other]
+alias METAL_3_1 = metallib_3_1;
+// Capabilities of convenience
+//
+/// Capabilities required to use AppendStructuredBuffer
+/// [Compound]
alias appendstructuredbuffer = sm_5_0_version;
+/// (hlsl only) Capabilities required to use hlsl atomic operations
+/// [Compound]
alias atomic_hlsl = _sm_4_0;
+/// (hlsl only) Capabilities required to use hlsl NVAPI atomics
+/// [Compound]
alias atomic_hlsl_nvapi = _sm_4_0 + hlsl_nvapi;
+/// (hlsl only) Capabilities required to use hlsl sm_6_6 atomics
+/// [Compound]
alias atomic_hlsl_sm_6_6 = _sm_6_6;
+/// Capabilities required to use ByteAddressBuffer
+/// [Compound]
alias byteaddressbuffer = sm_4_0_version;
+/// Capabilities required to use RWByteAddressBuffer
+/// [Compound]
alias byteaddressbuffer_rw = sm_4_0_version;
+/// Capabilities required to use ConsumeStructuredBuffer
+/// [Compound]
alias consumestructuredbuffer = sm_5_0_version;
+/// Capabilities required to use StructuredBuffer
+/// [Compound]
+alias structuredbuffer = sm_4_0_version;
+/// Capabilities required to use RWStructuredBuffer
+/// [Compound]
+alias structuredbuffer_rw = sm_4_0_version;
+
+/// Capabilities required to use fragment derivative operations (without GLSL derivativecontrol)
+/// [Compound]
alias fragmentprocessing = fragment + _sm_5_0
| fragment + glsl_spirv
| raytracingstages_compute_amplification_mesh + GL_NV_compute_shader_derivatives
@@ -797,112 +1687,270 @@ alias fragmentprocessing = fragment + _sm_5_0
| fragment + cpp
| fragment + cuda
;
+/// Capabilities required to use fragment derivative operations (with GLSL derivativecontrol)
+/// [Compound]
alias fragmentprocessing_derivativecontrol = fragment + _sm_5_0
| fragment + GL_ARB_derivative_control
| raytracingstages_compute_amplification_mesh + GL_NV_compute_shader_derivatives
;
+/// Capabilities required to use 'getAttributeAtVertex'
+/// [Compound]
alias getattributeatvertex = fragment + _sm_6_1 | fragment + GL_EXT_fragment_shader_barycentric;
+/// Capabilities required to use sm_5_0 style memory barriers
+/// [Compound]
alias memorybarrier = sm_5_0_version;
-alias structuredbuffer = sm_4_0_version;
-alias structuredbuffer_rw = sm_4_0_version;
+/// Capabilities required to use sm_4_0 texture operations
+/// [Compound]
alias texture_sm_4_0 = sm_4_0_version | GL_ARB_sparse_texture_clamp + GL_EXT_texture_query_lod
;
+/// Capabilities required to use sm_4_1 texture operations
+/// [Compound]
alias texture_sm_4_1 = sm_4_1_version | GL_ARB_sparse_texture_clamp + GL_EXT_texture_query_lod
;
+/// Capabilities required to use sm_4_1 samplerless texture operations
+/// [Compound]
alias texture_sm_4_1_samplerless = texture_sm_4_1
// add samplerless to all targets that need an extension
| GL_EXT_samplerless_texture_functions
;
-// supposedly works on only limited stages, support all stages for now
+// Supposedly only works for some shader stages, we support all stages for now since this
+// seems wrong.
+/// Capabilities required to use 'compute/fragment shader only' texture operations.
+/// We do not require 'compute'/'fragment' shader capabilities since this seems to be incorrect behavior despite what official documentation says.
+/// [Compound]
alias texture_sm_4_1_compute_fragment = texture_sm_4_1;
+/// Capabilities required to use 'fragment shader only' texture operations
+/// [Compound]
alias texture_sm_4_0_fragment = texture_sm_4_0;
+/// Capabilities required to use 'fragment shader only' texture clamp operations
+/// [Compound]
alias texture_sm_4_1_clamp_fragment = texture_sm_4_0_fragment | GL_ARB_sparse_texture_clamp;
+/// Capabilities required to use 'fragment/geometry shader only' texture clamp operations
+/// [Compound]
alias texture_sm_4_1_vertex_fragment_geometry = texture_sm_4_1;
+/// Capabilities required to use 'vertex/fragment/geometry shader only' texture gather operations
+/// [Compound]
alias texture_gather = texture_sm_4_1_vertex_fragment_geometry | GL_ARB_texture_gather;
+/// Capabilities required to query image (RWTexture) sample info
+/// [Compound]
alias image_samples = texture_sm_4_1_compute_fragment | GL_ARB_shader_texture_image_samples;
+/// Capabilities required to query image (RWTexture) size info
+/// [Compound]
alias image_size = texture_sm_4_1_compute_fragment | GL_ARB_shader_image_size;
+/// Capabilities required to query texture sample info
+/// [Compound]
alias texture_size = texture_sm_4_1 | GL_ARB_shader_image_size;
+/// Capabilities required to query texture LOD info
+/// [Compound]
alias texture_querylod = texture_sm_4_1 | GL_EXT_texture_query_lod;
+/// Capabilities required to query texture level info
+/// [Compound]
alias texture_querylevels = texture_sm_4_1 | GL_ARB_texture_query_levels;
+/// Capabilities required to query shadow texture lod info
+/// [Compound]
alias texture_shadowlod = texture_sm_4_1 | GL_EXT_texture_shadow_lod
| texture_sm_4_1;
+/// (GLSL/SPIRV) Capabilities required to use GLSL-tier-1 float-atomic operations
+/// [Compound]
alias atomic_glsl_float1 = GL_EXT_shader_atomic_float;
+/// (GLSL/SPIRV) Capabilities required to use GLSL-tier-2 float-atomic operations
+/// [Compound]
alias atomic_glsl_float2 = GL_EXT_shader_atomic_float2;
+/// (GLSL/SPIRV) Capabilities required to use NVAPI GLSL-fp16 float-atomic operations
+/// [Compound]
alias atomic_glsl_halfvec = GL_NV_shader_atomic_fp16_vector;
+/// (GLSL/SPIRV) Capabilities required to use GLSL-400 atomic operations
+/// [Compound]
alias atomic_glsl = spirv_1_0 | _GLSL_400;
+/// (GLSL/SPIRV) Capabilities required to use int64/uint64 atomic operations
+/// [Compound]
alias atomic_glsl_int64 = atomic_glsl + GL_EXT_shader_atomic_int64;
+/// User should not use this capability
+/// [Other]
alias GLSL_430_SPIRV_1_0_compute = GLSL_430_SPIRV_1_0 + compute;
+/// (GLSL/SPIRV) Capabilities required to use image load/image store operations
+/// [Compound]
alias image_loadstore = GL_EXT_shader_image_load_store + GLSL_420;
+/// Capabilities required to use NonUniform qualifier
+/// [Compound]
alias nonuniformqualifier = sm_5_1;
+/// Capabilities required to use 'printf'
+/// [Compound]
alias printf = GL_EXT_debug_printf | _sm_4_0 | _cuda_sm_2_0 | cpp;
+/// Capabilities required to use basic TextureFootprint operations
+/// [Compound]
alias texturefootprint = GL_NV_shader_texture_footprint + GLSL_450 | hlsl_nvapi + _sm_4_0;
+/// Capabilities required to use TextureFootprint clamp operations
+/// [Compound]
alias texturefootprintclamp = texturefootprint + GL_ARB_sparse_texture_clamp;
+/// Capabilities required to use sm_4_0 features apart of GL_ARB_gpu_shader5
+/// [Compound]
alias shader5_sm_4_0 = GL_ARB_gpu_shader5 | sm_4_0_version;
+/// Capabilities required to use sm_5_0 features apart of GL_ARB_gpu_shader5
+/// [Compound]
alias shader5_sm_5_0 = GL_ARB_gpu_shader5 | sm_5_0_version;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_basic'
+/// [Compound]
alias subgroup_basic = GL_KHR_shader_subgroup_basic | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_ballot'
+/// [Compound]
alias subgroup_ballot = spirv_1_0 + GL_KHR_shader_subgroup_ballot
| glsl + GL_KHR_shader_subgroup_ballot + shader5_sm_5_0
| _sm_6_0 + shader5_sm_5_0
| _cuda_sm_7_0 + shader5_sm_5_0
;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_ballot_activemask'
+/// [Compound]
alias subgroup_ballot_activemask = spirv_1_0 + GL_KHR_shader_subgroup_ballot
| glsl + GL_KHR_shader_subgroup_ballot
| _sm_6_0
| _cuda_sm_7_0
;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_basic_ballot'
+/// [Compound]
alias subgroup_basic_ballot = glsl + GL_KHR_shader_subgroup_basic + subgroup_ballot
| spirv + GL_KHR_shader_subgroup_basic + subgroup_ballot
| hlsl + subgroup_ballot
| cuda + subgroup_ballot
;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_vote'
+/// [Compound]
alias subgroup_vote = GL_KHR_shader_subgroup_vote | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_vote'
+/// [Compound]
alias shaderinvocationgroup = subgroup_vote;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_arithmetic'
+/// [Compound]
alias subgroup_arithmetic = GL_KHR_shader_subgroup_arithmetic | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_shuffle'
+/// [Compound]
alias subgroup_shuffle = GL_KHR_shader_subgroup_shuffle | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_shufle_relative'
+/// [Compound]
alias subgroup_shufflerelative = GL_KHR_shader_subgroup_shuffle_relative | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_clustered'
+/// [Compound]
alias subgroup_clustered = GL_KHR_shader_subgroup_clustered | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_quad'
+/// [Compound]
alias subgroup_quad = GL_KHR_shader_subgroup_quad | _sm_6_0 | _cuda_sm_7_0;
+/// Capabilities required to use GLSL-style subgroup operations 'subgroup_partitioned'
+/// [Compound]
alias subgroup_partitioned = GL_NV_shader_subgroup_partitioned + subgroup_ballot_activemask | _sm_6_5 | _cuda_sm_7_0;
+/// (All implemented targets) Capabilities required to use atomic operations of GLSL tier-1 float atomics
+/// [Compound]
alias atomic_glsl_hlsl_nvapi_cuda_metal_float1 = atomic_glsl_float1 | hlsl_nvapi + _sm_4_0 | _cuda_sm_2_0 | metal;
+/// (All implemented targets) Capabilities required to use atomic operations of int64 (cuda_sm_5 tier atomics)
+/// [Compound]
alias atomic_glsl_hlsl_nvapi_cuda5_int64 = atomic_glsl_int64 | hlsl_nvapi + _sm_4_0 | _cuda_sm_6_0;
+/// (All implemented targets) Capabilities required to use atomic operations of int64 (cuda_sm_6 tier atomics)
+/// [Compound]
alias atomic_glsl_hlsl_nvapi_cuda6_int64 = atomic_glsl_int64 | hlsl_nvapi + _sm_4_0 | _cuda_sm_6_0;
+/// (All implemented targets) Capabilities required to use atomic operations of int64 (cuda_sm_9 tier atomics)
+/// [Compound]
alias atomic_glsl_hlsl_nvapi_cuda9_int64 = atomic_glsl_int64 | hlsl_nvapi + _sm_4_0 | _cuda_sm_9_0;
+/// (All implemented targets) Capabilities required to use atomic operations
+/// [Compound]
alias atomic_glsl_hlsl_cuda_metal = atomic_glsl | _sm_5_0 | _cuda_sm_2_0 | metal;
+/// (All implemented targets) Capabilities required to use atomic operations (cuda_sm_9 tier atomics)
+/// [Compound]
alias atomic_glsl_hlsl_cuda9_int64 = atomic_glsl_int64 | _sm_6_6 | _cuda_sm_9_0 | metal;
+/// Capabilities required to enable helper-lane demotion
+/// [Compound]
alias helper_lane = _sm_6_0 + fragment
| GL_EXT_demote_to_helper_invocation + fragment
| metal + fragment
;
+/// Capabilities required to enable shader breakpoints
+/// [Compound]
alias breakpoint = GL_EXT_debug_printf | hlsl | _cuda_sm_8_0 | cpp;
+/// Collection of capabilities for raytracing with all raytracing stages.
+/// [Compound]
alias raytracing_allstages = raytracing_stages + raytracing;
+
+/// Collection of capabilities for raytracing with the shader stage of anyhit.
+/// [Compound]
alias raytracing_anyhit = anyhit + raytracing;
+
+/// Collection of capabilities for raytracing with the shader stage of intersection.
+/// [Compound]
alias raytracing_intersection = intersection + raytracing;
+
+/// Collection of capabilities for raytracing with the shader stages of anyhit and closesthit.
+/// [Compound]
alias raytracing_anyhit_closesthit = anyhit_closesthit + raytracing;
+
+/// Collection of capabilities for raytracing with the shader stages of anyhit, closesthit, and intersection.
+/// [Compound]
alias raytracing_anyhit_closesthit_intersection = anyhit_closesthit_intersection + raytracing;
+
+/// Collection of capabilities for raytracing with the shader stages of raygen, closesthit, and miss.
+/// [Compound]
alias raytracing_raygen_closesthit_miss = raygen_closesthit_miss + raytracing;
+
+/// Collection of capabilities for raytracing with the shader stages of anyhit, closesthit, intersection, and miss.
+/// [Compound]
alias raytracing_anyhit_closesthit_intersection_miss = anyhit_closesthit_intersection_miss + raytracing;
+
+/// Collection of capabilities for raytracing the shader stages of raygen, closesthit, miss, and callable.
+/// [Compound]
alias raytracing_raygen_closesthit_miss_callable = raygen_closesthit_miss_callable + raytracing;
+
+/// Collection of capabilities for raytracing + ray_tracing_position_fetch and the shader stages of anyhit and closesthit.
+/// [Compound]
alias raytracing_position = raytracing + GL_EXT_ray_tracing_position_fetch_ray_tracing + anyhit_closesthit;
+
+/// Collection of capabilities for raytracing + motion blur and the shader stages of anyhit, closesthit, intersection, and miss.
+/// [Compound]
alias raytracing_motionblur_anyhit_closesthit_intersection_miss = anyhit_closesthit_intersection_miss + raytracing_motionblur;
+
+/// Collection of capabilities for raytracing + motion blur and the shader stages of raygen, closesthit, and miss.
+/// [Compound]
alias raytracing_motionblur_raygen_closesthit_miss = raygen_closesthit_miss + raytracing_motionblur;
+
+/// Collection of capabilities for rayquery + ray_tracing_position_fetch.
+/// [Compound]
alias rayquery_position = rayquery + GL_EXT_ray_tracing_position_fetch_ray_query;
+
+/// Collection of capabilities for raytracing + shader execution reordering and the shader stage of raygen.
+/// [Compound]
alias ser_raygen = raygen + ser;
+
+/// Collection of capabilities for raytracing + shader execution reordering and the shader stages of raygen, closesthit, and miss.
+/// [Compound]
alias ser_raygen_closesthit_miss = raygen_closesthit_miss + ser;
+
+/// Collection of capabilities for raytracing + shader execution reordering and the shader stages of anyhit, closesthit, intersection, and miss.
+/// [Compound]
alias ser_any_closesthit_intersection_miss = anyhit_closesthit_intersection_miss + ser;
+
+/// Collection of capabilities for raytracing + shader execution reordering and the shader stages of anyhit, closesthit, and intersection.
+/// [Compound]
alias ser_anyhit_closesthit_intersection = anyhit_closesthit_intersection + ser;
+
+/// Collection of capabilities for raytracing + shader execution reordering and the shader stages of anyhit and closesthit.
+/// [Compound]
alias ser_anyhit_closesthit = anyhit_closesthit + ser;
+
+/// Collection of capabilities for raytracing + motion blur + shader execution reordering and the shader stages of raygen, closesthit, and miss.
+/// [Compound]
alias ser_motion_raygen_closesthit_miss = raygen_closesthit_miss + ser_motion;
+
+/// Collection of capabilities for raytracing raytracing + motion blur + shader execution reordering and the shader stage of raygen.
+/// [Compound]
alias ser_motion_raygen = raygen + ser_motion;
+/// User should not use this capability
+/// [Other]
alias all = _sm_6_7 + hlsl_nvapi
| sm_6_7
+ ser + shaderclock + texturefootprint + fragmentshaderinterlock + _GL_NV_shader_subgroup_partitioned