[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