Skip to content

Commit

Permalink
[Sema][HLSL] Fix naming of anyhit/closesthit shaders
Browse files Browse the repository at this point in the history
Also test all shader types and be a bit more careful to make shaders
reasonably valid in these tests.

Differential Revision: https://reviews.llvm.org/D158820
  • Loading branch information
bogner committed Aug 25, 2023
1 parent e036ba5 commit 43a9b92
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 12 deletions.
5 changes: 2 additions & 3 deletions clang/include/clang/Basic/Attr.td
Original file line number Diff line number Diff line change
Expand Up @@ -4143,8 +4143,8 @@ def HLSLShader : InheritableAttr {
EnumArgument<"Type", "ShaderType",
[
"pixel", "vertex", "geometry", "hull", "domain", "compute",
"library", "raygeneration", "intersection", "anyHit",
"closestHit", "miss", "callable", "mesh", "amplification"
"library", "raygeneration", "intersection", "anyhit",
"closesthit", "miss", "callable", "mesh", "amplification"
],
[
"Pixel", "Vertex", "Geometry", "Hull", "Domain", "Compute",
Expand Down Expand Up @@ -4232,4 +4232,3 @@ def AvailableOnlyInDefaultEvalMethod : InheritableAttr {
let Subjects = SubjectList<[TypedefName], ErrorDiag>;
let Documentation = [Undocumented];
}

2 changes: 1 addition & 1 deletion clang/test/SemaHLSL/entry_shader.hlsl
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -x hlsl -hlsl-entry foo -o - %s -DSHADER='"anyHit"' -verify
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -x hlsl -hlsl-entry foo -o - %s -DSHADER='"mesh"' -verify
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-compute -x hlsl -hlsl-entry foo -o - %s -DSHADER='"compute"'

// expected-error@+1 {{'shader' attribute on entry function does not match the target profile}}
Expand Down
19 changes: 11 additions & 8 deletions clang/test/SemaHLSL/shader_type_attr.hlsl
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ static void oops() {}
} // namespace spec

// expected-error@+1 {{'shader' attribute parameters do not match the previous declaration}}
[shader("compute")]
[shader("pixel")]
// expected-note@+1 {{conflicting attribute is here}}
[shader("vertex")]
int doubledUp() {
Expand All @@ -40,7 +40,7 @@ int doubledUp() {
int forwardDecl();

// expected-error@+1 {{'shader' attribute parameters do not match the previous declaration}}
[shader("compute")]
[shader("compute")][numthreads(8,1,1)]
int forwardDecl() {
return 1;
}
Expand All @@ -57,19 +57,22 @@ int forwardDecl() {
[shader("library")]
#endif // END of FAIL

// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} <line:61:2, col:18> Compute
[shader("compute")]
// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} <line:62:2, col:18> Compute
// CHECK:HLSLNumThreadsAttr 0x{{[0-9a-fA-F]+}} <col:21, col:37> 8 1 1
[shader("compute")][numthreads(8,1,1)]
int entry() {
return 1;
}

// Because these two attributes match, they should both appear in the AST
[shader("compute")]
// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} <line:67:2, col:18> Compute
[shader("compute")][numthreads(8,1,1)]
// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} <line:68:2, col:18> Compute
// CHECK:HLSLNumThreadsAttr 0x{{[0-9a-fA-F]+}} <col:21, col:37> 8 1 1
int secondFn();

[shader("compute")]
// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} <line:71:2, col:18> Compute
[shader("compute")][numthreads(8,1,1)]
// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} <line:73:2, col:18> Compute
// CHECK:HLSLNumThreadsAttr 0x{{[0-9a-fA-F]+}} <col:21, col:37> 8 1 1
int secondFn() {
return 1;
}
24 changes: 24 additions & 0 deletions clang/test/SemaHLSL/valid-shader-stages.hlsl
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -finclude-default-header -o - %s -verify

// expected-no-diagnostics

[shader("pixel")] void pixel() {}
[shader("vertex")] void vertex() {}
[shader("raygeneration")] void raygeneration() {}
[shader("intersection")] void intersection() {}

[numthreads(1,1,1)][shader("compute")] void compute() {}
[numthreads(1,1,1)][shader("mesh")] void mesh() {}

// Note: the rest of these have additional constraints that aren't implemented
// yet, so here we just declare them to make sure the spelling works and
// whatnot.
[shader("geometry")] void geometry();
[shader("hull")] void hull();
[shader("domain")] void domain();
[shader("callable")] void callable();
[shader("closesthit")] void closesthit();
[shader("anyhit")] void anyhit();
[shader("miss")] void miss();

[numthreads(1,1,1)][shader("amplification")] void amplification();

0 comments on commit 43a9b92

Please sign in to comment.