diff options
| author | Yong He <yonghe@outlook.com> | 2024-04-15 23:28:28 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-04-15 23:28:28 -0700 |
| commit | 3192f34f57abd3245995342a0a5971ebbbbd945c (patch) | |
| tree | dc139be9fe9f4995bac96513571cc9e0526ce547 /source/slang/slang-type-layout.cpp | |
| parent | 030d7f45726187b5b23a3cfb9743166aa60fae30 (diff) | |
[GFX] Fix d3d12 buffer view creation logic for StructuredBuffers. (#3954)
Diffstat (limited to 'source/slang/slang-type-layout.cpp')
| -rw-r--r-- | source/slang/slang-type-layout.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/source/slang/slang-type-layout.cpp b/source/slang/slang-type-layout.cpp index e791efadb..30c41d0fe 100644 --- a/source/slang/slang-type-layout.cpp +++ b/source/slang/slang-type-layout.cpp @@ -3,6 +3,7 @@ #include "slang-syntax.h" #include "slang-ir-insts.h" +#include "slang-check-impl.h" #include "../compiler-core/slang-artifact-desc-util.h" @@ -3331,7 +3332,7 @@ void StructTypeLayoutBuilder::beginLayoutIfNeeded( } RefPtr<VarLayout> StructTypeLayoutBuilder::addField( - DeclRef<VarDeclBase> field, + DeclRef<Decl> field, TypeLayoutResult fieldResult) { SLANG_ASSERT(m_typeLayout); @@ -4082,6 +4083,16 @@ static TypeLayoutResult _createTypeLayout( _addLayout(context, type, typeLayout); + // Add all base fields first. + for (auto inheritanceDeclRef : getMembersOfType<InheritanceDecl>(context.astBuilder, structDeclRef)) + { + auto baseType = getSup(context.astBuilder, inheritanceDeclRef); + if (isInterfaceType(baseType)) + continue; + auto baseTypeLayout = _createTypeLayout(context, baseType); + typeLayoutBuilder.addField(inheritanceDeclRef, baseTypeLayout); + } + // First, add all fields with explicit offsets. for (auto field : getFields(context.astBuilder, structDeclRef, MemberFilterStyle::Instance)) { |
