Skip to content

Commit cdaca3f

Browse files
author
Greg Roth
committed
Allow declaring long vector rawbuffer resources
Previously disallowed along with other global types, this provides a mechanism for indicating which buffers are raw and allowing them to contain long vectors, continuing to produce an error for other resource types verified by existing tests
1 parent a13938d commit cdaca3f

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

tools/clang/lib/Sema/SemaHLSL.cpp

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

388390
const 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

Comments
 (0)