Skip to content

[HLSL] Constant buffers codegen #124886

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 20 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
63c465b
[HLSL] Constant buffer layout struct update
hekota Jan 28, 2025
c80415a
filter groupshared var decls
hekota Jan 29, 2025
cf08adb
[HLSL] Translate cbuffer declarations to target type dx.CBuffer - ini…
hekota Jan 28, 2025
56beb45
remove stride
hekota Jan 29, 2025
749e88e
cleanup, update comments
hekota Jan 29, 2025
a12bcbc
Move skipping of implicit initializer of hlsl_constant decls to a dif…
hekota Feb 4, 2025
6dc3a1a
Merge branch 'users/hekota/pr-124840' of https://github.com/llvm/llvm…
hekota Feb 4, 2025
66ae784
Add LayoutStruct to HLSLBufferDecl; add skipping of implicit initiali…
hekota Feb 5, 2025
e042f72
desugar types and check for resource builtin type
hekota Feb 5, 2025
a8cdd45
Merge branch 'users/hekota/pr-124840' of https://github.com/llvm/llvm…
hekota Feb 5, 2025
b62863b
Rework cbuffer codegen to use the target("dx.Layout", ...) type
hekota Feb 12, 2025
7499d40
Merge branch 'main' of https://github.com/llvm/llvm-project into cbuf…
hekota Feb 15, 2025
62094b2
code review feedback - add named constant, rename function, remove file
hekota Feb 15, 2025
6aa47e9
Merge branch 'main' into cbuffer-codegen5
hekota Feb 15, 2025
eaeaf2a
code review feedback - minor changes
hekota Feb 19, 2025
515c25e
Merge branch 'main' of https://github.com/llvm/llvm-project into cbuf…
hekota Feb 19, 2025
d3c8872
code review feedback - move layout calculations into a separate build…
hekota Feb 19, 2025
3cd4d49
Merge branch 'cbuffer-codegen5' of https://github.com/hekota/llvm-pro…
hekota Feb 19, 2025
77987bd
revert clang/lib/CodeGen/CMakeLists.txt whitespace changes
hekota Feb 19, 2025
b934073
clang-format
hekota Feb 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions clang/include/clang/AST/Decl.h
Original file line number Diff line number Diff line change
Expand Up @@ -5039,6 +5039,11 @@ class HLSLBufferDecl final : public NamedDecl, public DeclContext {
SourceLocation KwLoc;
/// IsCBuffer - Whether the buffer is a cbuffer (and not a tbuffer).
bool IsCBuffer;
/// HasValidPackoffset - Whether the buffer has valid packoffset annotations
// on all declarations
bool HasValidPackoffset;
// LayoutStruct - Layout struct for the buffer
CXXRecordDecl *LayoutStruct;

HLSLBufferDecl(DeclContext *DC, bool CBuffer, SourceLocation KwLoc,
IdentifierInfo *ID, SourceLocation IDLoc,
Expand All @@ -5059,6 +5064,10 @@ class HLSLBufferDecl final : public NamedDecl, public DeclContext {
SourceLocation getRBraceLoc() const { return RBraceLoc; }
void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
bool isCBuffer() const { return IsCBuffer; }
void setHasValidPackoffset(bool PO) { HasValidPackoffset = PO; }
bool hasValidPackoffset() const { return HasValidPackoffset; }
const CXXRecordDecl *getLayoutStruct() const { return LayoutStruct; }
void addLayoutStruct(CXXRecordDecl *LS);

// Implement isa/cast/dyncast/etc.
static bool classof(const Decl *D) { return classofKind(D->getKind()); }
Expand Down
4 changes: 2 additions & 2 deletions clang/include/clang/AST/Type.h
Original file line number Diff line number Diff line change
Expand Up @@ -6266,8 +6266,8 @@ class HLSLAttributedResourceType : public Type, public llvm::FoldingSetNode {
LLVM_PREFERRED_TYPE(bool)
uint8_t RawBuffer : 1;

Attributes(llvm::dxil::ResourceClass ResourceClass, bool IsROV,
bool RawBuffer)
Attributes(llvm::dxil::ResourceClass ResourceClass, bool IsROV = false,
bool RawBuffer = false)
: ResourceClass(ResourceClass), IsROV(IsROV), RawBuffer(RawBuffer) {}

Attributes() : Attributes(llvm::dxil::ResourceClass::UAV, false, false) {}
Expand Down
12 changes: 11 additions & 1 deletion clang/lib/AST/Decl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1747,6 +1747,10 @@ void NamedDecl::printNestedNameSpecifier(raw_ostream &OS,
}
}

// Suppress transparent contexts like export or HLSLBufferDecl context
if (Ctx->isTransparentContext())
continue;

// Skip non-named contexts such as linkage specifications and ExportDecls.
const NamedDecl *ND = dyn_cast<NamedDecl>(Ctx);
if (!ND)
Expand Down Expand Up @@ -5717,7 +5721,7 @@ HLSLBufferDecl::HLSLBufferDecl(DeclContext *DC, bool CBuffer,
SourceLocation IDLoc, SourceLocation LBrace)
: NamedDecl(Decl::Kind::HLSLBuffer, DC, IDLoc, DeclarationName(ID)),
DeclContext(Decl::Kind::HLSLBuffer), LBraceLoc(LBrace), KwLoc(KwLoc),
IsCBuffer(CBuffer) {}
IsCBuffer(CBuffer), HasValidPackoffset(false), LayoutStruct(nullptr) {}

HLSLBufferDecl *HLSLBufferDecl::Create(ASTContext &C,
DeclContext *LexicalParent, bool CBuffer,
Expand Down Expand Up @@ -5747,6 +5751,12 @@ HLSLBufferDecl *HLSLBufferDecl::CreateDeserialized(ASTContext &C,
SourceLocation(), SourceLocation());
}

void HLSLBufferDecl::addLayoutStruct(CXXRecordDecl *LS) {
assert(LayoutStruct == nullptr && "layout struct has already been set");
LayoutStruct = LS;
addDecl(LS);
}

//===----------------------------------------------------------------------===//
// ImportDecl Implementation
//===----------------------------------------------------------------------===//
Expand Down
Loading