diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -4143,8 +4143,8 @@ 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", @@ -4232,4 +4232,3 @@ let Subjects = SubjectList<[TypedefName], ErrorDiag>; let Documentation = [Undocumented]; } - diff --git a/clang/test/SemaHLSL/entry_shader.hlsl b/clang/test/SemaHLSL/entry_shader.hlsl --- a/clang/test/SemaHLSL/entry_shader.hlsl +++ b/clang/test/SemaHLSL/entry_shader.hlsl @@ -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}} diff --git a/clang/test/SemaHLSL/shader_type_attr.hlsl b/clang/test/SemaHLSL/shader_type_attr.hlsl --- a/clang/test/SemaHLSL/shader_type_attr.hlsl +++ b/clang/test/SemaHLSL/shader_type_attr.hlsl @@ -28,7 +28,7 @@ } // 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() { @@ -40,7 +40,7 @@ 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; } @@ -57,19 +57,22 @@ [shader("library")] #endif // END of FAIL -// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute -[shader("compute")] +// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute +// CHECK:HLSLNumThreadsAttr 0x{{[0-9a-fA-F]+}} 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]+}} Compute +[shader("compute")][numthreads(8,1,1)] +// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute +// CHECK:HLSLNumThreadsAttr 0x{{[0-9a-fA-F]+}} 8 1 1 int secondFn(); -[shader("compute")] -// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute +[shader("compute")][numthreads(8,1,1)] +// CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute +// CHECK:HLSLNumThreadsAttr 0x{{[0-9a-fA-F]+}} 8 1 1 int secondFn() { return 1; } diff --git a/clang/test/SemaHLSL/valid-shader-stages.hlsl b/clang/test/SemaHLSL/valid-shader-stages.hlsl new file mode 100644 --- /dev/null +++ b/clang/test/SemaHLSL/valid-shader-stages.hlsl @@ -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();