diff --git a/spec/index.bs b/spec/index.bs index 263e2b9dcb..cb28c57f74 100644 --- a/spec/index.bs +++ b/spec/index.bs @@ -1456,6 +1456,7 @@ enum GPUFeatureName { "pipeline-statistics-query", "texture-compression-bc", "timestamp-query", + "subgroup-operations" }; @@ -7706,6 +7707,10 @@ The following enums are supported if and only if the {{GPUFeatureName/"pipeline- * {{GPUQueryType/"pipeline-statistics"}} +## subgroup-operations ## {#subgroup-operations} + +Issue: Define functionality when the {{GPUFeatureName/"subgroup-operations"}} [=feature=] is enabled. + ## texture-compression-bc ## {#texture-compression-bc} diff --git a/wgsl/index.bs b/wgsl/index.bs index 106f7666bc..5c6e407ac6 100644 --- a/wgsl/index.bs +++ b/wgsl/index.bs @@ -4600,6 +4600,19 @@ See [[#builtin-inputs-outputs]] for how to declare a built-in variable. vec3<u32> The [=workgroup_size=] of the current entry point. + `subgroup_size` + compute + in + u32 + The subgroup size of the current entry point. + + `subgroup_invocation_index` + compute + in + u32 + The current invocation's subgroup invocation index. + Must be in range [0, `subgroup_size`-1]. + `sample_index` fragment in @@ -5787,6 +5800,37 @@ reduce a shader's memory bandwidth demand. See [[#floating-point-conversion]] for edge case behaviour. +## Subgroup built-in functions ## {#subgroup-builtin-functions} + + + + +
Subgroup built-in functionsSPIR-V +
subgroupIsFirst() -> boolOpGroupNonUniformElect +
subgroupAll(bool) -> boolOpGroupNonUniformAll +
subgroupAny(bool) -> boolOpGroupNonUniformAny +
subgroupBallot(bool) -> vec4<u32>OpGroupNonUniformBallot +
subgroupBroadcastFirst(Integral) -> IntegralOpGroupNonUniformBroadcastFirst +
subgroupBroadcastFirst(Floating) -> FloatingOpGroupNonUniformBroadcastFirst +
subgroupAdd(Integral) -> IntegralOpGroupNonUniformIAdd with Reduce +
subgroupAdd(Floating) -> FloatingOpGroupNonUniformFAdd with Reduce +
subgroupMul(Integral) -> IntegralOpGroupNonUniformIMul with Reduce +
subgroupMul(Floating) -> FloatingOpGroupNonUniformFMul with Reduce +
subgroupMin(Integral) -> IntegralOpGroupNonUniformUMin or OpGroupNonUniformSMin with Reduce +
subgroupMin(Floating) -> FloatingOpGroupNonUniformFMin with Reduce +
subgroupMax(Integral) -> IntegralOpGroupNonUniformUMax or OpGroupNonUniformSMax with Reduce +
subgroupMax(Floating) -> FloatingOpGroupNonUniformFMax with Reduce +
subgroupAnd(Integral) -> IntegralOpGroupNonUniformBitwiseAnd +
subgroupOr(Integral) -> IntegralOpGroupNonUniformBitwiseOr +
subgroupXor(Integral) -> IntegralOpGroupNonUniformBitwiseXor +
subgroupPrefixAdd(Integral) -> IntegralOpGroupNonUniformIAdd with ExclusiveScan +
subgroupPrefixAdd(Floating) -> FloatingOpGroupNonUniformFAdd with ExclusiveScan +
subgroupPrefixMul(Integral) -> IntegralOpGroupNonUniformIMul with ExclusiveScan +
subgroupPrefixMul(Floating) -> FloatingOpGroupNonUniformFMul with ExclusiveScan +
+ +Note: Subgroup built-in functions exist if "subgroup-operations" is enabled in requestDevice. + # Glossary # {#glossary} TODO: Remove terms unused in the rest of the specification.