summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2018-03-16 14:28:04 -0400
committerTim Foley <tfoleyNV@users.noreply.github.com>2018-03-16 11:28:04 -0700
commita549362ba7011562f123b52c35c875c2c02f4f40 (patch)
tree45fa1fa81e88652d9ea7f8d55d791dd810d01d96 /source
parent4c23ba2af6dfb244bbf193f2e540e5e70e13f629 (diff)
Small bug fixes. (#445)
This commit contains two small bug fixes: 1. In `specializeProgramLayout`, we cannot assume the resourceInfo entries in a varLayout and its corresponding type layout has the same order. Should use `FindResourceLayout`. 2. When generating ir for a switch statement, make sure to remove the breakLabel from the shared context when done. For some reason if a switch statement is being lowered twice, the Dictionary::Add method will complain the statement key already exists.
Diffstat (limited to 'source')
-rw-r--r--source/slang/lower-to-ir.cpp1
-rw-r--r--source/slang/parameter-binding.cpp6
2 files changed, 4 insertions, 3 deletions
diff --git a/source/slang/lower-to-ir.cpp b/source/slang/lower-to-ir.cpp
index 428044830..0970eef98 100644
--- a/source/slang/lower-to-ir.cpp
+++ b/source/slang/lower-to-ir.cpp
@@ -2549,6 +2549,7 @@ struct StmtLoweringVisitor : StmtVisitor<StmtLoweringVisitor>
// (and that control flow will fall through to otherwise).
// This is the block that subsequent code will go into.
insertBlock(breakLabel);
+ context->shared->breakLabels.Remove(stmt);
}
};
diff --git a/source/slang/parameter-binding.cpp b/source/slang/parameter-binding.cpp
index b0d90d435..3ff2be61f 100644
--- a/source/slang/parameter-binding.cpp
+++ b/source/slang/parameter-binding.cpp
@@ -2492,14 +2492,14 @@ RefPtr<ProgramLayout> specializeProgramLayout(
for (UInt i = 0; i < varLayout->resourceInfos.Count(); i++)
{
auto resInfo = varLayout->resourceInfos[i];
- auto tresInfo = varLayout->typeLayout->resourceInfos[i];
- SLANG_ASSERT(resInfo.kind == tresInfo.kind);
+ auto tresInfo = varLayout->typeLayout->FindResourceInfo(resInfo.kind);
+ SLANG_ASSERT(tresInfo);
auto usedRangeSet = findUsedRangeSetForSpace(&context, resInfo.space);
markSpaceUsed(&context, resInfo.space);
usedRangeSet->usedResourceRanges[(int)resInfo.kind].Add(
nullptr, // we don't need to track parameter info here
resInfo.index,
- resInfo.index + tresInfo.count);
+ resInfo.index + tresInfo->count);
}
structLayout->fields[varId] = varLayout;
varLayoutMapping[varLayout] = varLayout;