diff options
| author | Yong He <yonghe@outlook.com> | 2023-11-01 21:42:12 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-01 21:42:12 -0700 |
| commit | 6aca3813c4ccc496c0f9b2db293acb546aa11d2d (patch) | |
| tree | 5281f0ac62946787db90409c1ab3da5ed3f0fc5c /source/slang/slang-emit-c-like.cpp | |
| parent | 532c4322c9d9ab2c95a5bb573c89062456b59236 (diff) | |
Parameter binding and gfx fixes. (#3302)
* Parameter binding and gfx fixes.
* Add diagnostics on entry point parameters.
* Fix.
---------
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-emit-c-like.cpp')
| -rw-r--r-- | source/slang/slang-emit-c-like.cpp | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp index a2c3abb5e..7eebf1cac 100644 --- a/source/slang/slang-emit-c-like.cpp +++ b/source/slang/slang-emit-c-like.cpp @@ -642,9 +642,14 @@ UInt CLikeSourceEmitter::getBindingOffsetForKinds(EmitVarChain* chain, LayoutRes return offset; } +Index findRegisterSpaceResourceInfo(IRVarLayout* layout); + UInt CLikeSourceEmitter::getBindingSpaceForKinds(EmitVarChain* chain, LayoutResourceKindFlags kindFlags) { UInt space = 0; + + bool useSubElementSpace = false; + for (auto cc = chain; cc; cc = cc->next) { auto varLayout = cc->varLayout; @@ -657,10 +662,21 @@ UInt CLikeSourceEmitter::getBindingSpaceForKinds(EmitVarChain* chain, LayoutReso space += offsetAttr->getSpace(); } } - - if (auto resInfo = varLayout->findOffsetAttr(LayoutResourceKind::RegisterSpace)) + if (!useSubElementSpace) { - space += resInfo->getOffset(); + auto spaceOffset = findRegisterSpaceResourceInfo(varLayout); + if (spaceOffset != -1) + { + space += spaceOffset; + useSubElementSpace = true; + } + } + else + { + if (auto resInfo = varLayout->findOffsetAttr(LayoutResourceKind::SubElementRegisterSpace)) + { + space += resInfo->getOffset(); + } } } return space; @@ -669,6 +685,7 @@ UInt CLikeSourceEmitter::getBindingSpaceForKinds(EmitVarChain* chain, LayoutReso UInt CLikeSourceEmitter::getBindingOffset(EmitVarChain* chain, LayoutResourceKind kind) { UInt offset = 0; + for(auto cc = chain; cc; cc = cc->next) { if(auto resInfo = cc->varLayout->findOffsetAttr(kind)) @@ -682,6 +699,7 @@ UInt CLikeSourceEmitter::getBindingOffset(EmitVarChain* chain, LayoutResourceKin UInt CLikeSourceEmitter::getBindingSpace(EmitVarChain* chain, LayoutResourceKind kind) { UInt space = 0; + bool useSubElementSpace = false; for(auto cc = chain; cc; cc = cc->next) { auto varLayout = cc->varLayout; @@ -689,9 +707,21 @@ UInt CLikeSourceEmitter::getBindingSpace(EmitVarChain* chain, LayoutResourceKind { space += resInfo->getSpace(); } - if(auto resInfo = varLayout->findOffsetAttr(LayoutResourceKind::RegisterSpace)) + if (!useSubElementSpace) { - space += resInfo->getOffset(); + auto spaceOffset = findRegisterSpaceResourceInfo(varLayout); + if (spaceOffset != -1) + { + space += spaceOffset; + useSubElementSpace = true; + } + } + else + { + if (auto resInfo = varLayout->findOffsetAttr(LayoutResourceKind::SubElementRegisterSpace)) + { + space += resInfo->getOffset(); + } } } return space; |
