mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-29 23:26:05 +00:00

This is first part for support cbuffer/tbuffer. The format for cbuffer/tbuffer is BufferType [Name] [: register(b#)] { VariableDeclaration [: packoffset(c#.xyzw)]; ... }; More details at https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-constants New keyword 'cbuffer' and 'tbuffer' are added. New AST node HLSLBufferDecl is added. Build AST for simple cbuffer/tbuffer without attribute support. The special thing is variables declared inside cbuffer is exposed into global scope. So isTransparentContext should return true for HLSLBuffer. Reviewed By: aaron.ballman Differential Revision: https://reviews.llvm.org/D129883
75 lines
1.5 KiB
HLSL
75 lines
1.5 KiB
HLSL
// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -o - -fsyntax-only %s -verify
|
|
|
|
// expected-error@+2 {{expected identifier}}
|
|
// expected-error@+1 {{expected unqualified-id}}
|
|
cbuffer { ... };
|
|
// expected-error@+1 {{expected '{'}}
|
|
cbuffer missing_definition;
|
|
// expected-error@+1 {{expected unqualified-id}}
|
|
int cbuffer;
|
|
// expected-error@+1 {{expected identifier}}
|
|
cbuffer;
|
|
|
|
// expected-error@+2 {{expected identifier}}
|
|
// expected-error@+1 {{expected unqualified-id}}
|
|
tbuffer { ... };
|
|
// expected-error@+1 {{expected '{'}}
|
|
tbuffer missing_definition;
|
|
// expected-error@+1 {{expected unqualified-id}}
|
|
int tbuffer;
|
|
// expected-error@+1 {{expected identifier}}
|
|
tbuffer;
|
|
|
|
// expected-error@+1 {{expected unqualified-id}}
|
|
cbuffer A {}, B{}
|
|
|
|
// cbuffer inside namespace is supported.
|
|
namespace N {
|
|
cbuffer A {
|
|
float g;
|
|
}
|
|
}
|
|
|
|
cbuffer A {
|
|
// expected-error@+1 {{invalid declaration inside cbuffer}}
|
|
namespace N {
|
|
}
|
|
}
|
|
|
|
cbuffer A {
|
|
// expected-error@+1 {{invalid declaration inside cbuffer}}
|
|
cbuffer Nested {
|
|
}
|
|
}
|
|
|
|
struct S {
|
|
// expected-error@+1 {{expected member name or ';' after declaration specifiers}}
|
|
cbuffer what {
|
|
int y;
|
|
}
|
|
};
|
|
|
|
void func() {
|
|
// expected-error@+1 {{expected expression}}
|
|
tbuffer derp {
|
|
int z;
|
|
}
|
|
|
|
decltype(derp) another {
|
|
int a;
|
|
}
|
|
}
|
|
|
|
// struct decl inside cb is supported.
|
|
cbuffer A {
|
|
struct S2 {
|
|
float s;
|
|
};
|
|
S2 s;
|
|
}
|
|
|
|
// function decl inside cb is supported.
|
|
cbuffer A {
|
|
float foo_inside_cb() { return 1.2;}
|
|
}
|