From d6849fe37cc229add8ce0fbe90988396c662bc96 Mon Sep 17 00:00:00 2001 From: Steven Perron Date: Tue, 13 May 2025 09:58:08 -0400 Subject: [PATCH 1/2] [SPIRV] Allow decoration attributes on fields. Fixes #7270 --- tools/clang/include/clang/Basic/Attr.td | 6 ++++-- .../spv.inline.decorate.member.hlsl | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/tools/clang/include/clang/Basic/Attr.td b/tools/clang/include/clang/Basic/Attr.td index 2518423565..db7fdea8d9 100644 --- a/tools/clang/include/clang/Basic/Attr.td +++ b/tools/clang/include/clang/Basic/Attr.td @@ -1418,7 +1418,8 @@ def VKDecorateExt : InheritableAttr { def VKDecorateIdExt : InheritableAttr { let Spellings = [CXX11<"vk", "ext_decorate_id">]; - let Subjects = SubjectList<[Function, Var, ParmVar, TypedefName], ErrorDiag>; + let Subjects = + SubjectList<[Function, Var, ParmVar, Field, TypedefName], ErrorDiag>; let Args = [UnsignedArgument<"decorate">, VariadicExprArgument<"arguments">]; let LangOpts = [SPIRV]; let Documentation = [Undocumented]; @@ -1426,7 +1427,8 @@ def VKDecorateIdExt : InheritableAttr { def VKDecorateStringExt : InheritableAttr { let Spellings = [CXX11<"vk", "ext_decorate_string">]; - let Subjects = SubjectList<[Function, Var, ParmVar, TypedefName], ErrorDiag>; + let Subjects = + SubjectList<[Function, Var, ParmVar, Field, TypedefName], ErrorDiag>; let Args = [UnsignedArgument<"decorate">, VariadicStringArgument<"arguments">]; let LangOpts = [SPIRV]; let Documentation = [Undocumented]; diff --git a/tools/clang/test/CodeGenSPIRV/inline-spirv/spv.inline.decorate.member.hlsl b/tools/clang/test/CodeGenSPIRV/inline-spirv/spv.inline.decorate.member.hlsl index bb4c2efde1..88a902d326 100644 --- a/tools/clang/test/CodeGenSPIRV/inline-spirv/spv.inline.decorate.member.hlsl +++ b/tools/clang/test/CodeGenSPIRV/inline-spirv/spv.inline.decorate.member.hlsl @@ -4,9 +4,9 @@ template [[vk::ext_instruction(/*spv::OpBitcast*/124)]] T Bitcast(U); -// CHECK: OpMemberDecorate %S 0 Offset 0 -// CHECK: OpMemberDecorate %S 1 Offset 16 -// CHECK: %S = OpTypeStruct %v4float %v4float +// CHECK-DAG: OpMemberDecorate %S 0 Offset 0 +// CHECK-DAG: OpMemberDecorate %S 1 Offset 16 +// CHECK-DAG: %S = OpTypeStruct %v4float %v4float struct S { @@ -14,6 +14,12 @@ struct S [[vk::ext_decorate(/*offset*/ 35, 16)]] float4 f2; }; +// CHECK-DAG: OpDecorateString %out_var_SV_TARGET UserSemantic "raster_order_group_0" +struct PixelOutput +{ + [[vk::location(0), vk::ext_decorate_string(5635, "raster_order_group_0")]] float4 rt0 : SV_TARGET; +}; + using PointerType = vk::SpirvOpaqueType< /* OpTypePointer */ 32, /* PhysicalStorageBuffer */ vk::Literal >, @@ -27,14 +33,16 @@ S Load(PointerType pointer, uint64_t address; -float4 main() : SV_TARGET +PixelOutput main() { // CHECK: [[BC:%[0-9]+]] = OpBitcast %_ptr_PhysicalStorageBuffer_S {{%[0-9]+}} PointerType ptr = Bitcast(address); +PixelOutput output; // CHECK: [[LD:%[0-9]+]] = OpLoad %S [[BC]] Aligned 32 // CHECK: [[RET:%[0-9]+]] = OpCompositeExtract %v4float [[LD]] 0 // CHECK: OpStore %out_var_SV_TARGET [[RET]] - return Load(ptr).f1; +output.rt0 = Load(ptr).f1; + return output; } From 810212a72a3247f6968269bdb78becbcd997d8b1 Mon Sep 17 00:00:00 2001 From: Steven Perron Date: Wed, 14 May 2025 10:25:09 -0400 Subject: [PATCH 2/2] Remove test that is no longer applicable. --- .../attributes/spv.inline.decorate.member.hlsl | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 tools/clang/test/SemaHLSL/attributes/spv.inline.decorate.member.hlsl diff --git a/tools/clang/test/SemaHLSL/attributes/spv.inline.decorate.member.hlsl b/tools/clang/test/SemaHLSL/attributes/spv.inline.decorate.member.hlsl deleted file mode 100644 index ece7e3f2f4..0000000000 --- a/tools/clang/test/SemaHLSL/attributes/spv.inline.decorate.member.hlsl +++ /dev/null @@ -1,13 +0,0 @@ -// REQUIRES: spirv -// RUN: %dxc -T ps_6_0 -E main -verify -spirv %s - -struct S -{ - [[vk::ext_decorate_id(/*offset*/ 35, 0)]] float4 f1; /* expected-error{{'ext_decorate_id' attribute only applies to functions, variables, parameters, and types}} */ - [[vk::ext_decorate_string(/*offset*/ 35, "16")]] float4 f2; /* expected-error{{'ext_decorate_string' attribute only applies to functions, variables, parameters, and types}} */ -}; - -float4 main() : SV_TARGET -{ - -}