summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-c-like.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-11-01 21:42:12 -0700
committerGitHub <noreply@github.com>2023-11-01 21:42:12 -0700
commit6aca3813c4ccc496c0f9b2db293acb546aa11d2d (patch)
tree5281f0ac62946787db90409c1ab3da5ed3f0fc5c /source/slang/slang-emit-c-like.cpp
parent532c4322c9d9ab2c95a5bb573c89062456b59236 (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.cpp40
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;