@@ -905,6 +905,32 @@ def HLSLWaveSensitive : InheritableAttr {
905905
906906// SPIRV Change Starts
907907
908+ // StructuredBuffer types that can have associated counters
909+ def CounterStructuredBuffer : SubsetSubject<
910+ Var,
911+ [{S->hasGlobalStorage() && S->getType()->getAs<RecordType>() &&
912+ (S->getType()->getAs<RecordType>()->getDecl()->getName() == "RWStructuredBuffer" ||
913+ S->getType()->getAs<RecordType>()->getDecl()->getName() == "AppendStructuredBuffer" ||
914+ S->getType()->getAs<RecordType>()->getDecl()->getName() == "ConsumeStructuredBuffer")}]>;
915+
916+ // Global variable with "ConstantBuffer" type
917+ def ConstantBuffer
918+ : SubsetSubject<
919+ Var, [{S->hasGlobalStorage() && S->getType()->getAs<RecordType>() &&
920+ S->getType()->getAs<RecordType>()->getDecl() &&
921+ S->getType()->getAs<RecordType>()->getDecl()->getName() ==
922+ "ConstantBuffer"}]>;
923+
924+ // Global variable with "ConstantBuffer" or "TextureBuffer" type
925+ def ConstantTextureBuffer
926+ : SubsetSubject<
927+ Var, [{S->hasGlobalStorage() && S->getType()->getAs<RecordType>() &&
928+ S->getType()->getAs<RecordType>()->getDecl() &&
929+ (S->getType()->getAs<RecordType>()->getDecl()->getName() ==
930+ "ConstantBuffer" ||
931+ S->getType()->getAs<RecordType>()->getDecl()->getName() ==
932+ "TextureBuffer")}]>;
933+
908934def VKBuiltIn : InheritableAttr {
909935 let Spellings = [CXX11<"vk", "builtin">];
910936 let Subjects = SubjectList<[Function, ParmVar, Field], ErrorDiag>;
@@ -931,20 +957,13 @@ def VKIndex : InheritableAttr {
931957
932958def VKBinding : InheritableAttr {
933959 let Spellings = [CXX11<"vk", "binding">];
934- let Subjects = SubjectList<[GlobalVar, HLSLBuffer], ErrorDiag, "ExpectedGlobalVarOrCTBuffer">;
960+ let Subjects = SubjectList<[GlobalVar, HLSLBuffer, ConstantTextureBuffer],
961+ ErrorDiag, "ExpectedGlobalVarOrCTBuffer">;
935962 let Args = [IntArgument<"Binding">, DefaultIntArgument<"Set", 0>];
936963 let LangOpts = [SPIRV];
937964 let Documentation = [Undocumented];
938965}
939966
940- // StructuredBuffer types that can have associated counters
941- def CounterStructuredBuffer : SubsetSubject<
942- Var,
943- [{S->hasGlobalStorage() && S->getType()->getAs<RecordType>() &&
944- (S->getType()->getAs<RecordType>()->getDecl()->getName() == "RWStructuredBuffer" ||
945- S->getType()->getAs<RecordType>()->getDecl()->getName() == "AppendStructuredBuffer" ||
946- S->getType()->getAs<RecordType>()->getDecl()->getName() == "ConsumeStructuredBuffer")}]>;
947-
948967def VKCounterBinding : InheritableAttr {
949968 let Spellings = [CXX11<"vk", "counter_binding">];
950969 let Subjects = SubjectList<[CounterStructuredBuffer], ErrorDiag, "ExpectedCounterStructuredBuffer">;
@@ -1006,7 +1025,8 @@ def VKPostDepthCoverage : InheritableAttr {
10061025
10071026def VKShaderRecordNV : InheritableAttr {
10081027 let Spellings = [CXX11<"vk", "shader_record_nv">];
1009- let Subjects = SubjectList<[StructGlobalVar, HLSLBuffer], ErrorDiag, "ExpectedCTBuffer">;
1028+ let Subjects = SubjectList<[StructGlobalVar, HLSLBuffer, ConstantBuffer],
1029+ ErrorDiag, "ExpectedCTBuffer">;
10101030 let Args = [];
10111031 let LangOpts = [SPIRV];
10121032 let Documentation = [Undocumented];
0 commit comments