Skip to content

Commit 80f6e46

Browse files
authored
[SPIR-V] Fix GroupNonUniform capabilities+ext (microsoft#6687)
[SPIR-V] Fix GroupNonUniform capabilities+ext Fixes emission of GroupNonUniform capabilities and related extensions, in particular SPV_NV_shader_subgroup_partitioned. Since this PR bumps SPIR-V headers + tools, some test changes are required due to opcode changes. Those are in a separate commit, but same PR. Fixes microsoft#6672 --------- Signed-off-by: Nathan Gauër <[email protected]>
1 parent a44c88e commit 80f6e46

27 files changed

+192
-170
lines changed

external/SPIRV-Tools

Submodule SPIRV-Tools updated 72 files
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// RUN: %dxc -T cs_6_0 %s -E main -spirv -fspv-target-env=vulkan1.1 | FileCheck %s
2+
3+
// CHECK-NOT: OpCapability GroupNonUniformPartitionedNV
4+
// CHECK-NOT: OpExtension "SPV_NV_shader_subgroup_partitioned"
5+
// CHECK: OpCapability GroupNonUniformArithmetic
6+
7+
RWBuffer<int> value;
8+
9+
[numthreads(4, 1, 1)]
10+
void main(uint3 threadID : SV_DispatchThreadID) {
11+
uint sum = 0;
12+
switch (value[threadID.x]) {
13+
case 0:
14+
// CHECK: OpGroupNonUniformIAdd {{.*}} {{.*}} Reduce {{.*}}
15+
sum += WaveActiveSum(1);
16+
default:
17+
// CHECK: OpGroupNonUniformIAdd {{.*}} {{.*}} Reduce {{.*}}
18+
sum += WaveActiveSum(10);
19+
break;
20+
}
21+
value[threadID.x] = sum;
22+
}

tools/clang/test/CodeGenSPIRV/meshshading.ext.cullprimative.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ struct MeshletPrimitiveOut
88
// m_cullPrimitive will have to be turned into a uint because of the Vulkan
99
// specification says that externally visible variables cannot be bool.
1010
// CHECK: OpDecorate [[var:%[0-9]+]] BuiltIn CullPrimitiveEXT
11-
// CHECK: OpDecorate [[var]] PerPrimitiveNV
11+
// CHECK: OpDecorate [[var]] PerPrimitiveEXT
1212
// CHECK: [[var]] = OpVariable %_ptr_Output__arr_uint_uint_2 Output
1313

1414
struct VertOut

tools/clang/test/CodeGenSPIRV/meshshading.ext.no-explicit-exts-spv1.4.mesh.hlsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
// CHECK: OpExtension "SPV_EXT_mesh_shader"
44
// CHECK: OpEntryPoint MeshEXT %main "main" %gl_Position [[primind:%[0-9]+]]
55
// CHECK: OpExecutionMode %main LocalSize 64 1 1
6-
// CHECK: OpExecutionMode %main OutputTrianglesNV
6+
// CHECK: OpExecutionMode %main OutputTrianglesEXT
77
// CHECK: OpExecutionMode %main OutputVertices 81
8-
// CHECK: OpExecutionMode %main OutputPrimitivesNV 128
8+
// CHECK: OpExecutionMode %main OutputPrimitivesEXT 128
99

1010
// CHECK: OpDecorate %gl_Position BuiltIn Position
1111
// CHECK: OpDecorate [[primind]] BuiltIn PrimitiveTriangleIndicesEXT

tools/clang/test/CodeGenSPIRV/meshshading.ext.triangle.mesh.hlsl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
// CHECK: OpExtension "SPV_EXT_mesh_shader"
44
// CHECK: OpEntryPoint MeshEXT %main "main" %gl_ClipDistance %gl_CullDistance %in_var_pld [[drawid:%[0-9]+]] %gl_LocalInvocationID %gl_WorkGroupID %gl_GlobalInvocationID %gl_LocalInvocationIndex %gl_Position %gl_PointSize %out_var_USER %out_var_USER_ARR %out_var_USER_MAT [[primindices:%[0-9]+]] %gl_PrimitiveID %gl_Layer %gl_ViewportIndex [[cullprim:%[0-9]+]] [[primshadingrate:%[0-9]+]] %out_var_PRIM_USER %out_var_PRIM_USER_ARR
55
// CHECK: OpExecutionMode %main LocalSize 128 1 1
6-
// CHECK: OpExecutionMode %main OutputTrianglesNV
6+
// CHECK: OpExecutionMode %main OutputTrianglesEXT
77
// CHECK: OpExecutionMode %main OutputVertices 64
8-
// CHECK: OpExecutionMode %main OutputPrimitivesNV 81
8+
// CHECK: OpExecutionMode %main OutputPrimitivesEXT 81
99

1010
// CHECK: OpDecorate %gl_ClipDistance BuiltIn ClipDistance
1111
// CHECK: OpDecorate %gl_CullDistance BuiltIn CullDistance
@@ -18,17 +18,17 @@
1818
// CHECK: OpDecorate %gl_PointSize BuiltIn PointSize
1919
// CHECK: OpDecorate [[primindices]] BuiltIn PrimitiveTriangleIndicesEXT
2020
// CHECK: OpDecorate %gl_PrimitiveID BuiltIn PrimitiveId
21-
// CHECK: OpDecorate %gl_PrimitiveID PerPrimitiveNV
21+
// CHECK: OpDecorate %gl_PrimitiveID PerPrimitiveEXT
2222
// CHECK: OpDecorate %gl_Layer BuiltIn Layer
23-
// CHECK: OpDecorate %gl_Layer PerPrimitiveNV
23+
// CHECK: OpDecorate %gl_Layer PerPrimitiveEXT
2424
// CHECK: OpDecorate %gl_ViewportIndex BuiltIn ViewportIndex
25-
// CHECK: OpDecorate %gl_ViewportIndex PerPrimitiveNV
25+
// CHECK: OpDecorate %gl_ViewportIndex PerPrimitiveEXT
2626
// CHECK: OpDecorate [[cullprim]] BuiltIn CullPrimitiveEXT
27-
// CHECK: OpDecorate [[cullprim]] PerPrimitiveNV
27+
// CHECK: OpDecorate [[cullprim]] PerPrimitiveEXT
2828
// CHECK: OpDecorate [[primshadingrate]] BuiltIn PrimitiveShadingRateKHR
29-
// CHECK: OpDecorate [[primshadingrate]] PerPrimitiveNV
30-
// CHECK: OpDecorate %out_var_PRIM_USER PerPrimitiveNV
31-
// CHECK: OpDecorate %out_var_PRIM_USER_ARR PerPrimitiveNV
29+
// CHECK: OpDecorate [[primshadingrate]] PerPrimitiveEXT
30+
// CHECK: OpDecorate %out_var_PRIM_USER PerPrimitiveEXT
31+
// CHECK: OpDecorate %out_var_PRIM_USER_ARR PerPrimitiveEXT
3232
// CHECK: OpDecorate %out_var_USER Location 0
3333
// CHECK: OpDecorate %out_var_USER_ARR Location 1
3434
// CHECK: OpDecorate %out_var_USER_MAT Location 3

tools/clang/test/CodeGenSPIRV/meshshading.nv.line.mesh.hlsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
// CHECK: OpExtension "SPV_NV_mesh_shader"
44
// CHECK: OpEntryPoint MeshNV %main "main" %gl_GlobalInvocationID %gl_Position [[primind:%[0-9]+]] [[primcount:%[0-9]+]]
55
// CHECK: OpExecutionMode %main LocalSize 128 1 1
6-
// CHECK: OpExecutionMode %main OutputLinesNV
6+
// CHECK: OpExecutionMode %main OutputLinesEXT
77
// CHECK: OpExecutionMode %main OutputVertices 256
8-
// CHECK: OpExecutionMode %main OutputPrimitivesNV 256
8+
// CHECK: OpExecutionMode %main OutputPrimitivesEXT 256
99

1010
// CHECK: OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
1111
// CHECK: OpDecorate %gl_Position BuiltIn Position

tools/clang/test/CodeGenSPIRV/meshshading.nv.point.mesh.hlsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
// CHECK: OpExecutionMode %main LocalSize 128 1 1
66
// CHECK: OpExecutionMode %main OutputPoints
77
// CHECK: OpExecutionMode %main OutputVertices 256
8-
// CHECK: OpExecutionMode %main OutputPrimitivesNV 256
8+
// CHECK: OpExecutionMode %main OutputPrimitivesEXT 256
99

1010
// CHECK: OpDecorate %gl_GlobalInvocationID BuiltIn GlobalInvocationId
1111
// CHECK: OpDecorate %gl_Position BuiltIn Position

tools/clang/test/CodeGenSPIRV/meshshading.nv.request-nv-with-spv1.4.mesh.hlsl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
// CHECK: OpExtension "SPV_NV_mesh_shader"
44
// CHECK: OpEntryPoint MeshNV %main "main" %gl_Position [[primind:%[0-9]+]] [[primcount:%[0-9]+]]
55
// CHECK: OpExecutionMode %main LocalSize 32 1 1
6-
// CHECK: OpExecutionMode %main OutputTrianglesNV
6+
// CHECK: OpExecutionMode %main OutputTrianglesEXT
77
// CHECK: OpExecutionMode %main OutputVertices 81
8-
// CHECK: OpExecutionMode %main OutputPrimitivesNV 128
8+
// CHECK: OpExecutionMode %main OutputPrimitivesEXT 128
99

1010
// CHECK: OpDecorate %gl_Position BuiltIn Position
1111
// CHECK: OpDecorate [[primind]] BuiltIn PrimitiveIndicesNV

tools/clang/test/CodeGenSPIRV/meshshading.nv.triangle.mesh.hlsl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
// CHECK: OpExtension "SPV_NV_mesh_shader"
44
// CHECK: OpEntryPoint MeshNV %main "main" %gl_ClipDistance %gl_CullDistance %in_var_dummy %in_var_pos [[drawid:%[0-9]+]] %gl_LocalInvocationID %gl_WorkGroupID %gl_GlobalInvocationID %gl_LocalInvocationIndex %gl_Position %gl_PointSize %out_var_USER %out_var_USER_ARR %out_var_USER_MAT [[primind:%[0-9]+]] %gl_PrimitiveID %gl_Layer %gl_ViewportIndex [[vmask:%[0-9]+]] %out_var_PRIM_USER %out_var_PRIM_USER_ARR [[primcount:%[0-9]+]]
55
// CHECK: OpExecutionMode %main LocalSize 128 1 1
6-
// CHECK: OpExecutionMode %main OutputTrianglesNV
6+
// CHECK: OpExecutionMode %main OutputTrianglesEXT
77
// CHECK: OpExecutionMode %main OutputVertices 64
8-
// CHECK: OpExecutionMode %main OutputPrimitivesNV 81
8+
// CHECK: OpExecutionMode %main OutputPrimitivesEXT 81
99

1010
// CHECK: OpDecorate %gl_ClipDistance BuiltIn ClipDistance
1111
// CHECK: OpDecorate %gl_CullDistance BuiltIn CullDistance
@@ -22,15 +22,15 @@
2222
// CHECK: OpDecorate %gl_PointSize BuiltIn PointSize
2323
// CHECK: OpDecorate [[primind]] BuiltIn PrimitiveIndicesNV
2424
// CHECK: OpDecorate %gl_PrimitiveID BuiltIn PrimitiveId
25-
// CHECK: OpDecorate %gl_PrimitiveID PerPrimitiveNV
25+
// CHECK: OpDecorate %gl_PrimitiveID PerPrimitiveEXT
2626
// CHECK: OpDecorate %gl_Layer BuiltIn Layer
27-
// CHECK: OpDecorate %gl_Layer PerPrimitiveNV
27+
// CHECK: OpDecorate %gl_Layer PerPrimitiveEXT
2828
// CHECK: OpDecorate %gl_ViewportIndex BuiltIn ViewportIndex
29-
// CHECK: OpDecorate %gl_ViewportIndex PerPrimitiveNV
29+
// CHECK: OpDecorate %gl_ViewportIndex PerPrimitiveEXT
3030
// CHECK: OpDecorate [[vmask]] BuiltIn ViewportMaskNV
31-
// CHECK: OpDecorate [[vmask]] PerPrimitiveNV
32-
// CHECK: OpDecorate %out_var_PRIM_USER PerPrimitiveNV
33-
// CHECK: OpDecorate %out_var_PRIM_USER_ARR PerPrimitiveNV
31+
// CHECK: OpDecorate [[vmask]] PerPrimitiveEXT
32+
// CHECK: OpDecorate %out_var_PRIM_USER PerPrimitiveEXT
33+
// CHECK: OpDecorate %out_var_PRIM_USER_ARR PerPrimitiveEXT
3434
// CHECK: OpDecorate [[primcount]] BuiltIn PrimitiveCountNV
3535
// CHECK: OpDecorate %out_var_USER Location 0
3636
// CHECK: OpDecorate %out_var_USER_ARR Location 1

0 commit comments

Comments
 (0)