summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2019-01-28 10:47:48 -0800
committerGitHub <noreply@github.com>2019-01-28 10:47:48 -0800
commit016f38981a52dd31aa4d3d35272c37f992a07862 (patch)
treed11ff742f08a25469fa1a86c8b4d0061853fb63d /source
parentdf9dc5710725d00630831b77ca7005e390383aa6 (diff)
parent962f265df9e1b8549202a9b9543e1bead190638d (diff)
Merge pull request #805 from csyonghe/yong-fix
More fixes to empty-struct parameters
Diffstat (limited to 'source')
-rw-r--r--source/slang/emit.cpp63
-rw-r--r--source/slang/ir-glsl-legalize.cpp18
2 files changed, 45 insertions, 36 deletions
diff --git a/source/slang/emit.cpp b/source/slang/emit.cpp
index 71b961616..dd6feb50d 100644
--- a/source/slang/emit.cpp
+++ b/source/slang/emit.cpp
@@ -3585,6 +3585,9 @@ struct EmitVisitor
UInt argCount = inst->getOperandCount();
for( UInt aa = 1; aa < argCount; ++aa )
{
+ auto operand = inst->getOperand(aa);
+ if (as<IRVoidType>(operand->getDataType()))
+ continue;
if(aa != 1) emit(", ");
emitIROperand(ctx, inst->getOperand(aa), mode, kEOp_General);
}
@@ -6100,6 +6103,8 @@ struct EmitVisitor
{
varType = outType->getValueType();
}
+ if (as<IRVoidType>(varType))
+ return;
// When a global shader parameter represents a "parameter group"
// (either a constant buffer or a parameter block with non-resource
@@ -6653,36 +6658,6 @@ String emitEntryPoint(
// un-specialized IR.
dumpIRIfEnabled(compileRequest, irModule);
-
-
- // For GLSL only, we will need to perform "legalization" of
- // the entry point and any entry-point parameters.
- //
- // TODO: We should consider moving this legalization work
- // as late as possible, so that it doesn't affect how other
- // optimization passes need to work.
- //
- switch (target)
- {
- case CodeGenTarget::GLSL:
- {
- legalizeEntryPointForGLSL(
- session,
- irModule,
- irEntryPoint,
- &compileRequest->mSink,
- &sharedContext.extensionUsageTracker);
- }
- break;
-
- default:
- break;
- }
-#if 0
- dumpIRIfEnabled(compileRequest, irModule, "GLSL LEGALIZED");
-#endif
- validateIRModuleIfEnabled(compileRequest, irModule);
-
// Desguar any union types, since these will be illegal on
// various targets.
//
@@ -6778,6 +6753,34 @@ String emitEntryPoint(
#endif
validateIRModuleIfEnabled(compileRequest, irModule);
+ // For GLSL only, we will need to perform "legalization" of
+ // the entry point and any entry-point parameters.
+ //
+ // TODO: We should consider moving this legalization work
+ // as late as possible, so that it doesn't affect how other
+ // optimization passes need to work.
+ //
+ switch (target)
+ {
+ case CodeGenTarget::GLSL:
+ {
+ legalizeEntryPointForGLSL(
+ session,
+ irModule,
+ irEntryPoint,
+ &compileRequest->mSink,
+ &sharedContext.extensionUsageTracker);
+ }
+ break;
+
+ default:
+ break;
+ }
+#if 0
+ dumpIRIfEnabled(compileRequest, irModule, "GLSL LEGALIZED");
+#endif
+ validateIRModuleIfEnabled(compileRequest, irModule);
+
// The resource-based specialization pass above
// may create specialized versions of functions, but
// it does not try to completely eliminate the original
diff --git a/source/slang/ir-glsl-legalize.cpp b/source/slang/ir-glsl-legalize.cpp
index 9c4210be0..d2b696c5b 100644
--- a/source/slang/ir-glsl-legalize.cpp
+++ b/source/slang/ir-glsl-legalize.cpp
@@ -567,7 +567,11 @@ ScalarizedVal createGLSLGlobalVaryingsImpl(
UInt bindingIndex,
GlobalVaryingDeclarator* declarator)
{
- if( as<IRBasicType>(type) )
+ if (as<IRVoidType>(type))
+ {
+ return ScalarizedVal();
+ }
+ else if( as<IRBasicType>(type) )
{
return createSimpleGLSLGlobalVarying(
context,
@@ -675,12 +679,14 @@ ScalarizedVal createGLSLGlobalVaryingsImpl(
stage,
fieldBindingIndex,
declarator);
+ if (fieldVal.flavor != ScalarizedVal::Flavor::none)
+ {
+ ScalarizedTupleValImpl::Element element;
+ element.val = fieldVal;
+ element.key = field->getKey();
- ScalarizedTupleValImpl::Element element;
- element.val = fieldVal;
- element.key = field->getKey();
-
- tupleValImpl->elements.Add(element);
+ tupleValImpl->elements.Add(element);
+ }
}
return ScalarizedVal::tuple(tupleValImpl);