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; } @@ -58,17 +58,17 @@ #endif // END of FAIL // CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute -[shader("compute")] +[shader("compute"), numthreads(8,1,1)] int entry() { return 1; } // Because these two attributes match, they should both appear in the AST -[shader("compute")] +[shader("compute"), numthreads(8,1,1)] // CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute int secondFn(); -[shader("compute")] +[shader("compute"), numthreads(8,1,1)] // CHECK:HLSLShaderAttr 0x{{[0-9a-fA-F]+}} Compute 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,37 @@ +// 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("geometry")] void geometry(); +[shader("hull")] void hull(); +[shader("domain")] void domain(); +[shader("raygeneration")] void raygeneration(); +[shader("intersection")] void intersection(); +[shader("anyhit")] void anyhit(); +[shader("closesthit")] void closesthit(); +[shader("miss")] void miss(); +[shader("callable")] void callable(); + +[numthreads(1,1,1)][shader("compute")] void compute() {} +[numthreads(1,1,1)][shader("mesh")] void mesh() {} + +#ifndef __DXC_VERSION_MAJOR +// TODO: These should all come from the implicit header eventually. +#define inout +#define in +struct BuiltInTriangleIntersectionAttributes { + float2 barycentrics; +}; +#endif + +typedef BuiltInTriangleIntersectionAttributes Attrs; +struct Payload { + float4 color; +}; + +[shader("raygeneration")] void raygeneration() {} +[shader("closesthit")] void closesthit(inout Payload payload, in Attrs attr) {} +[shader("anyhit")] void anyhit(inout Payload payload, in Attrs attr) {} +[shader("miss")] void miss(inout Payload payload) {}