summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/parameter-binding.cpp32
-rw-r--r--tests/rewriter/gh-160.hlsl13
-rw-r--r--tests/rewriter/gh-160.slang3
3 files changed, 35 insertions, 13 deletions
diff --git a/source/slang/parameter-binding.cpp b/source/slang/parameter-binding.cpp
index 877597640..757662101 100644
--- a/source/slang/parameter-binding.cpp
+++ b/source/slang/parameter-binding.cpp
@@ -1253,15 +1253,18 @@ static RefPtr<TypeLayout> processEntryPointParameter(
state,
fieldVarLayout);
- fieldVarLayout->typeLayout = fieldTypeLayout;
-
- for (auto rr : fieldTypeLayout->resourceInfos)
+ if(fieldTypeLayout)
{
- SLANG_RELEASE_ASSERT(rr.count != 0);
+ fieldVarLayout->typeLayout = fieldTypeLayout;
+
+ for (auto rr : fieldTypeLayout->resourceInfos)
+ {
+ SLANG_RELEASE_ASSERT(rr.count != 0);
- auto structRes = structLayout->findOrAddResourceInfo(rr.kind);
- fieldVarLayout->findOrAddResourceInfo(rr.kind)->index = structRes->count;
- structRes->count += rr.count;
+ auto structRes = structLayout->findOrAddResourceInfo(rr.kind);
+ fieldVarLayout->findOrAddResourceInfo(rr.kind)->index = structRes->count;
+ structRes->count += rr.count;
+ }
}
structLayout->fields.Add(fieldVarLayout);
@@ -1404,13 +1407,16 @@ static void collectEntryPointParameters(
state,
resultLayout);
- resultLayout->typeLayout = resultTypeLayout;
-
- for (auto rr : resultTypeLayout->resourceInfos)
+ if( resultTypeLayout )
{
- auto entryPointRes = entryPointLayout->findOrAddResourceInfo(rr.kind);
- resultLayout->findOrAddResourceInfo(rr.kind)->index = entryPointRes->count;
- entryPointRes->count += rr.count;
+ resultLayout->typeLayout = resultTypeLayout;
+
+ for (auto rr : resultTypeLayout->resourceInfos)
+ {
+ auto entryPointRes = entryPointLayout->findOrAddResourceInfo(rr.kind);
+ resultLayout->findOrAddResourceInfo(rr.kind)->index = entryPointRes->count;
+ entryPointRes->count += rr.count;
+ }
}
entryPointLayout->resultLayout = resultLayout;
diff --git a/tests/rewriter/gh-160.hlsl b/tests/rewriter/gh-160.hlsl
new file mode 100644
index 000000000..46ef6a92c
--- /dev/null
+++ b/tests/rewriter/gh-160.hlsl
@@ -0,0 +1,13 @@
+//TEST:COMPARE_HLSL: -no-checking -target dxbc-assembly -profile ps_4_0 -entry main
+
+#ifdef __SLANG__
+__import gh_160;
+#endif
+
+vec4 main(VS_OUT vOut) : SV_TARGET
+{
+ float3 color = float3(1,0,0);
+
+ vec4 finalColor = vec4(color, 1.f);
+ return finalColor;
+} \ No newline at end of file
diff --git a/tests/rewriter/gh-160.slang b/tests/rewriter/gh-160.slang
new file mode 100644
index 000000000..c86f63c19
--- /dev/null
+++ b/tests/rewriter/gh-160.slang
@@ -0,0 +1,3 @@
+//TEST_IGNORE_FILE:
+
+// This file only exists so that `gh-160.hlsl` can import it.