[clang] [HLSL] Add testing for space parameter on global constants (PR #106782)
Damyan Pepper via cfe-commits
cfe-commits at lists.llvm.org
Fri Sep 13 09:12:43 PDT 2024
================
@@ -0,0 +1,56 @@
+// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -x hlsl -o - -fsyntax-only %s -verify
+
+// valid
+cbuffer cbuf {
+ RWBuffer<int> r : register(u0, space0);
+}
+
+cbuffer cbuf2 {
+ struct x {
+ // expected-error at +1 {{'register' attribute only applies to cbuffer/tbuffer and external global variables}}
+ RWBuffer<int> E : register(u2, space3);
+ };
+}
+
+struct MyStruct {
+ RWBuffer<int> E;
+};
+
+cbuffer cbuf3 {
+ MyStruct E : register(u2, space3);
----------------
damyanp wrote:
https://godbolt.org/z/ezj1sc3sx - it looks like DXC doesn't actually get the binding right in this case:
```
; Name Type Format Dim ID HLSL Bind Count
; ------------------------------ ---------- ------- ----------- ------- -------------- ------
; E.E UAV i32 buf U0 u4294967295 1
```
Also I think that the case we're discussing:
```
struct MyStruct {
RWBuffer<int> E;
};
cbuffer cbuf3 {
MyStruct E : register(u2, space3);
}
```
We should consider as equivalent to:
```
struct MyStruct {
RWBuffer<int> E;
};
MyStruct E : register(u2, space3);
```
And I think that we said that this would report a "can't use space on globals" error?
https://github.com/llvm/llvm-project/pull/106782
More information about the cfe-commits
mailing list