Unverified Commit 6f723ebb by Malcolm Bechard Committed by GitHub

fix incorrect error when multiple compilation units don't declare layouts (#2238)

when using multiple compilation units, input/output layouts don't need to be declared in every unit.
parent 044113ab
...@@ -936,7 +936,6 @@ ERROR: Linking tessellation control stage: can't handle multiple entry points pe ...@@ -936,7 +936,6 @@ ERROR: Linking tessellation control stage: can't handle multiple entry points pe
ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
main( main(
ERROR: Linking tessellation control stage: can't handle multiple entry points per stage ERROR: Linking tessellation control stage: can't handle multiple entry points per stage
ERROR: Linking tessellation control stage: Contradictory layout vertices values
ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
main( main(
ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
...@@ -961,7 +960,6 @@ ERROR: Linking tessellation evaluation stage: can't handle multiple entry points ...@@ -961,7 +960,6 @@ ERROR: Linking tessellation evaluation stage: can't handle multiple entry points
ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
main( main(
ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage ERROR: Linking tessellation evaluation stage: can't handle multiple entry points per stage
ERROR: Linking tessellation evaluation stage: Contradictory input layout primitives
ERROR: Linking tessellation evaluation stage: Contradictory input vertex spacing ERROR: Linking tessellation evaluation stage: Contradictory input vertex spacing
ERROR: Linking tessellation evaluation stage: Contradictory triangle ordering ERROR: Linking tessellation evaluation stage: Contradictory triangle ordering
ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: ERROR: Linking tessellation evaluation stage: Multiple function bodies in multiple compilation units for the same signature in the same stage:
......
contradict_0.geom
Shader version: 330
invocations = -1
max_vertices = 4
input primitive = points
output primitive = triangle_strip
0:? Sequence
0:8 Function Definition: main( ( global void)
0:8 Function Parameters:
0:10 Sequence
0:10 Sequence
0:10 move second child to first child ( temp float)
0:10 'v' ( temp float)
0:10 Function Call: getV( ( global float)
0:11 EndPrimitive ( global void)
0:12 EndPrimitive ( global void)
0:? Linker Objects
contradict_1.geom
Shader version: 330
invocations = -1
max_vertices = 6
input primitive = lines
output primitive = line_strip
0:? Sequence
0:6 Function Definition: getV( ( global float)
0:6 Function Parameters:
0:8 Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 1.000000
0:? Linker Objects
Linked geometry stage:
ERROR: Linking geometry stage: Contradictory layout max_vertices values
ERROR: Linking geometry stage: Contradictory input layout primitives
ERROR: Linking geometry stage: Contradictory output layout primitives
Shader version: 330
invocations = 1
max_vertices = 4
input primitive = points
output primitive = triangle_strip
0:? Sequence
0:8 Function Definition: main( ( global void)
0:8 Function Parameters:
0:10 Sequence
0:10 Sequence
0:10 move second child to first child ( temp float)
0:10 'v' ( temp float)
0:10 Function Call: getV( ( global float)
0:11 EndPrimitive ( global void)
0:12 EndPrimitive ( global void)
0:6 Function Definition: getV( ( global float)
0:6 Function Parameters:
0:8 Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 1.000000
0:? Linker Objects
#version 330
layout(points) in;
layout(triangle_strip, max_vertices = 4) out;
float getV();
void main (void)
{
float v = getV();
EndPrimitive();
EndPrimitive();
}
#version 330
layout(lines) in;
layout(line_strip, max_vertices = 6) out;
float getV()
{
return 1.0;
}
...@@ -153,7 +153,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) ...@@ -153,7 +153,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
if (vertices == TQualifier::layoutNotSet) if (vertices == TQualifier::layoutNotSet)
vertices = unit.vertices; vertices = unit.vertices;
else if (vertices != unit.vertices) { else if (unit.vertices != TQualifier::layoutNotSet && vertices != unit.vertices) {
if (language == EShLangGeometry || language == EShLangMeshNV) if (language == EShLangGeometry || language == EShLangMeshNV)
error(infoSink, "Contradictory layout max_vertices values"); error(infoSink, "Contradictory layout max_vertices values");
else if (language == EShLangTessControl) else if (language == EShLangTessControl)
...@@ -172,12 +172,12 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) ...@@ -172,12 +172,12 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
if (inputPrimitive == ElgNone) if (inputPrimitive == ElgNone)
inputPrimitive = unit.inputPrimitive; inputPrimitive = unit.inputPrimitive;
else if (inputPrimitive != unit.inputPrimitive) else if (unit.inputPrimitive != ElgNone && inputPrimitive != unit.inputPrimitive)
error(infoSink, "Contradictory input layout primitives"); error(infoSink, "Contradictory input layout primitives");
if (outputPrimitive == ElgNone) if (outputPrimitive == ElgNone)
outputPrimitive = unit.outputPrimitive; outputPrimitive = unit.outputPrimitive;
else if (outputPrimitive != unit.outputPrimitive) else if (unit.outputPrimitive != ElgNone && outputPrimitive != unit.outputPrimitive)
error(infoSink, "Contradictory output layout primitives"); error(infoSink, "Contradictory output layout primitives");
if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger) if (originUpperLeft != unit.originUpperLeft || pixelCenterInteger != unit.pixelCenterInteger)
......
...@@ -99,6 +99,7 @@ INSTANTIATE_TEST_CASE_P( ...@@ -99,6 +99,7 @@ INSTANTIATE_TEST_CASE_P(
{"empty.frag", "empty2.frag", "empty3.frag"}, {"empty.frag", "empty2.frag", "empty3.frag"},
{"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"}, {"150.tesc", "150.tese", "400.tesc", "400.tese", "410.tesc", "420.tesc", "420.tese"},
{"max_vertices_0.geom"}, {"max_vertices_0.geom"},
{"contradict_0.geom", "contradict_1.geom"},
{"es-link1.frag", "es-link2.frag"}, {"es-link1.frag", "es-link2.frag"},
{"missingBodies.vert"}, {"missingBodies.vert"},
{"link.multiAnonBlocksInvalid.0.0.vert", "link.multiAnonBlocksInvalid.0.1.vert"}, {"link.multiAnonBlocksInvalid.0.0.vert", "link.multiAnonBlocksInvalid.0.1.vert"},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment