[PATCH] D130131: [HLSL] CodeGen hlsl cbuffer/tbuffer.
Xiang Li via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 28 10:59:19 PDT 2022
python3kgae added inline comments.
================
Comment at: clang/lib/CodeGen/CGHLSLRuntime.cpp:61
+
+GlobalVariable *replaceCBuffer(CGHLSLRuntime::CBuffer &CB) {
+ const unsigned CBufferAddressSpace = 4;
----------------
Anastasia wrote:
> I don't think I understand the intent of this function along with `CGHLSLRuntime::addConstant` that populates this collection.
It is translating
```
cbuffer A {
float a;
float b;
}
float foo() {
return a + b;
}
```
into
```
struct cb.A.Ty {
float a;
float b;
};
cbuffer A {
cb.A.Ty CBA;
}
float foo() {
return CBA.a + CBA.b;
}
```
Both a and b are in the global scope and will get a GlobalVariable in clang codeGen.
By doing the translation, we can ensure each buffer map to one GlobalVariable and save cbuffer layout in the value type of that GlobalVariable.
================
Comment at: clang/lib/CodeGen/CGHLSLRuntime.cpp:62
+GlobalVariable *replaceCBuffer(CGHLSLRuntime::CBuffer &CB) {
+ const unsigned CBufferAddressSpace = 4;
+ const unsigned TBufferAddressSpace = 5;
----------------
Anastasia wrote:
> It might be better to avoid using hard-coded constants. Are you adding new entires in clang's `AddressSpace` enum to represent different logical memory segment of the language?
Thanks for pointing it out. I'll add the new address space to LangAS.
================
Comment at: clang/lib/CodeGen/CGHLSLRuntime.cpp:142
+ if (!Inner) {
+ DiagnosticsEngine &Diags = CGM.getDiags();
+ unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
----------------
Anastasia wrote:
> Is this case covered by the test?
Nice catch.
I'll add a test for this.
================
Comment at: clang/lib/CodeGen/CGHLSLRuntime.h:39
+ llvm::StringRef Name;
+ bool IsCBuffer;
+ unsigned Reg;
----------------
Anastasia wrote:
> what does this field represent?
The field is for marking the CBuffer as a cbuffer or tbuffer.
The name is confusing.
How about adding an enum BufferKind { CBuffer, TBuffer };?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D130131/new/
https://reviews.llvm.org/D130131
More information about the cfe-commits
mailing list