@@ -344,6 +344,7 @@ enum ArBasicKind {
344344#define BPROP_FEEDBACKTEXTURE \
345345 0x00800000 // Whether the type is a feedback texture.
346346#define BPROP_ENUM 0x01000000 // Whether the type is a enum
347+ #define BPROP_RAWBUFFER 0x02000000 // Whether the type is a raw buffer.
347348
348349#define GET_BPROP_PRIM_KIND(_Props) \
349350 ((_Props) & (BPROP_BOOLEAN | BPROP_INTEGER | BPROP_FLOATING))
@@ -384,6 +385,7 @@ enum ArBasicKind {
384385 (IS_BPROP_AINT(_Props) && GET_BPROP_BITS(_Props) != BPROP_BITS12)
385386
386387#define IS_BPROP_ENUM(_Props) (((_Props)&BPROP_ENUM) != 0)
388+ #define IS_BPROP_RAWBUFFER(_Props) (((_Props)&BPROP_RAWBUFFER) != 0)
387389
388390const UINT g_uBasicKindProps[] = {
389391 BPROP_PRIMITIVE | BPROP_BOOLEAN | BPROP_INTEGER | BPROP_NUMERIC |
@@ -512,22 +514,30 @@ const UINT g_uBasicKindProps[] = {
512514 BPROP_OBJECT | BPROP_RWBUFFER | BPROP_TEXTURE, // AR_OBJECT_RWTEXTURE3D
513515 BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_RWBUFFER
514516
515- BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_BYTEADDRESS_BUFFER
516- BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_RWBYTEADDRESS_BUFFER
517- BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_STRUCTURED_BUFFER
518- BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_RWSTRUCTURED_BUFFER
519- BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_RWSTRUCTURED_BUFFER_ALLOC
520- BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_RWSTRUCTURED_BUFFER_CONSUME
521- BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_APPEND_STRUCTURED_BUFFER
522- BPROP_OBJECT | BPROP_RWBUFFER, // AR_OBJECT_CONSUME_STRUCTURED_BUFFER
517+ BPROP_OBJECT | BPROP_RBUFFER |
518+ BPROP_RAWBUFFER, // AR_OBJECT_BYTEADDRESS_BUFFER
519+ BPROP_OBJECT | BPROP_RWBUFFER |
520+ BPROP_RAWBUFFER, // AR_OBJECT_RWBYTEADDRESS_BUFFER
521+ BPROP_OBJECT | BPROP_RBUFFER |
522+ BPROP_RAWBUFFER, // AR_OBJECT_STRUCTURED_BUFFER
523+ BPROP_OBJECT | BPROP_RWBUFFER |
524+ BPROP_RAWBUFFER, // AR_OBJECT_RWSTRUCTURED_BUFFER
525+ BPROP_OBJECT | BPROP_RWBUFFER |
526+ BPROP_RAWBUFFER, // AR_OBJECT_RWSTRUCTURED_BUFFER_ALLOC
527+ BPROP_OBJECT | BPROP_RWBUFFER |
528+ BPROP_RAWBUFFER, // AR_OBJECT_RWSTRUCTURED_BUFFER_CONSUME
529+ BPROP_OBJECT | BPROP_RWBUFFER |
530+ BPROP_RAWBUFFER, // AR_OBJECT_APPEND_STRUCTURED_BUFFER
531+ BPROP_OBJECT | BPROP_RWBUFFER |
532+ BPROP_RAWBUFFER, // AR_OBJECT_CONSUME_STRUCTURED_BUFFER
523533
524534 BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_CONSTANT_BUFFER
525535 BPROP_OBJECT | BPROP_RBUFFER, // AR_OBJECT_TEXTURE_BUFFER
526536
527537 BPROP_OBJECT | BPROP_RWBUFFER | BPROP_ROVBUFFER, // AR_OBJECT_ROVBUFFER
528- BPROP_OBJECT | BPROP_RWBUFFER |
538+ BPROP_OBJECT | BPROP_RWBUFFER | BPROP_RAWBUFFER |
529539 BPROP_ROVBUFFER, // AR_OBJECT_ROVBYTEADDRESS_BUFFER
530- BPROP_OBJECT | BPROP_RWBUFFER |
540+ BPROP_OBJECT | BPROP_RWBUFFER | BPROP_RAWBUFFER |
531541 BPROP_ROVBUFFER, // AR_OBJECT_ROVSTRUCTURED_BUFFER
532542 BPROP_OBJECT | BPROP_RWBUFFER | BPROP_ROVBUFFER, // AR_OBJECT_ROVTEXTURE1D
533543 BPROP_OBJECT | BPROP_RWBUFFER |
@@ -641,6 +651,8 @@ C_ASSERT(ARRAYSIZE(g_uBasicKindProps) == AR_BASIC_MAXIMUM_COUNT);
641651
642652#define IS_BASIC_ENUM(_Kind) IS_BPROP_ENUM(GetBasicKindProps(_Kind))
643653
654+ #define IS_BASIC_RAWBUFFER(_Kind) IS_BPROP_RAWBUFFER(GetBasicKindProps(_Kind))
655+
644656#define BITWISE_ENUM_OPS(_Type) \
645657 inline _Type operator|(_Type F1, _Type F2) { \
646658 return (_Type)((UINT)F1 | (UINT)F2); \
@@ -15071,7 +15083,8 @@ bool Sema::DiagnoseHLSLDecl(Declarator &D, DeclContext *DC, Expr *BitWidth,
1507115083 }
1507215084
1507315085 // Disallow long vecs from $Global cbuffers.
15074- if (isGlobal && !isStatic && !isGroupShared) {
15086+ if (isGlobal && !isStatic && !isGroupShared &&
15087+ !IS_BASIC_RAWBUFFER(basicKind)) {
1507515088 // Suppress actual emitting of errors for incompletable types here
1507615089 // They are redundant to those produced in ActOnUninitializedDecl.
1507715090 struct SilentDiagnoser : public TypeDiagnoser {
0 commit comments