Fix isIoResizeArray() tessellation stage handling

This commit is contained in:
Kevin McCullough 2021-07-06 11:50:48 -07:00
parent ae2a562936
commit 5597c8d7cf
8 changed files with 430 additions and 1 deletions

View File

@ -0,0 +1,254 @@
link.tesselation.tese
Shader version: 440
input primitive = triangles
vertex spacing = fractional_odd_spacing
triangle order = cw
0:? Sequence
0:15 Function Definition: main( ( global void)
0:15 Function Parameters:
0:17 Sequence
0:17 Sequence
0:17 move second child to first child ( temp float)
0:17 'u' ( temp float)
0:17 direct index ( temp float)
0:17 'gl_TessCoord' ( in 3-component vector of float TessCoord)
0:17 Constant:
0:17 0 (const int)
0:18 Sequence
0:18 move second child to first child ( temp float)
0:18 'v' ( temp float)
0:18 direct index ( temp float)
0:18 'gl_TessCoord' ( in 3-component vector of float TessCoord)
0:18 Constant:
0:18 1 (const int)
0:19 Sequence
0:19 move second child to first child ( temp float)
0:19 'w' ( temp float)
0:19 direct index ( temp float)
0:19 'gl_TessCoord' ( in 3-component vector of float TessCoord)
0:19 Constant:
0:19 2 (const int)
0:21 Sequence
0:21 move second child to first child ( temp 2-component vector of float)
0:21 'newUv' ( temp 2-component vector of float)
0:21 Construct vec2 ( temp 2-component vector of float)
0:21 add ( temp 2-component vector of float)
0:21 add ( temp 2-component vector of float)
0:21 vector-scale ( temp 2-component vector of float)
0:21 'u' ( temp float)
0:21 texCoord: direct index for structure ( in 2-component vector of float)
0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:21 Constant:
0:21 0 (const int)
0:21 Constant:
0:21 0 (const int)
0:21 vector-scale ( temp 2-component vector of float)
0:21 'v' ( temp float)
0:21 texCoord: direct index for structure ( in 2-component vector of float)
0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:21 Constant:
0:21 1 (const int)
0:21 Constant:
0:21 0 (const int)
0:21 vector-scale ( temp 2-component vector of float)
0:21 'w' ( temp float)
0:21 texCoord: direct index for structure ( in 2-component vector of float)
0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:21 Constant:
0:21 2 (const int)
0:21 Constant:
0:21 0 (const int)
0:22 move second child to first child ( temp 2-component vector of float)
0:22 texCoord: direct index for structure ( out 2-component vector of float)
0:22 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:22 Constant:
0:22 0 (const int)
0:22 'newUv' ( temp 2-component vector of float)
0:23 move second child to first child ( temp 4-component vector of float)
0:23 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
0:23 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
0:23 Constant:
0:23 0 (const uint)
0:23 gl_Position: direct index for structure ( in 4-component vector of float Position)
0:23 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance})
0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance})
0:23 'gl_PatchVerticesIn' ( in int PatchVertices)
0:23 Constant:
0:23 0 (const int)
0:? Linker Objects
0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
link.tesselation.tesc
Shader version: 440
vertices = 3
0:? Sequence
0:14 Function Definition: main( ( global void)
0:14 Function Parameters:
0:16 Sequence
0:16 move second child to first child ( temp 2-component vector of float)
0:16 texCoord: direct index for structure ( out 2-component vector of float)
0:16 indirect index (layout( location=0) temp block{ out 2-component vector of float texCoord})
0:16 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord})
0:16 'gl_InvocationID' ( in int InvocationID)
0:16 Constant:
0:16 0 (const int)
0:16 texCoord: direct index for structure ( in 2-component vector of float)
0:16 indirect index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:16 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:16 'gl_InvocationID' ( in int InvocationID)
0:16 Constant:
0:16 0 (const int)
0:18 Sequence
0:18 move second child to first child ( temp float)
0:18 'tessLevel' ( temp float)
0:18 Constant:
0:18 10.000000
0:19 move second child to first child ( temp float)
0:19 indirect index ( patch temp float TessLevelOuter)
0:19 'gl_TessLevelOuter' ( patch out 4-element array of float TessLevelOuter)
0:19 'gl_InvocationID' ( in int InvocationID)
0:19 'tessLevel' ( temp float)
0:20 move second child to first child ( temp float)
0:20 direct index ( patch temp float TessLevelInner)
0:20 'gl_TessLevelInner' ( patch out 2-element array of float TessLevelInner)
0:20 Constant:
0:20 0 (const int)
0:20 'tessLevel' ( temp float)
0:? Linker Objects
0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:? 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord})
Linked tessellation control stage:
Linked tessellation evaluation stage:
Shader version: 440
vertices = 3
0:? Sequence
0:14 Function Definition: main( ( global void)
0:14 Function Parameters:
0:16 Sequence
0:16 move second child to first child ( temp 2-component vector of float)
0:16 texCoord: direct index for structure ( out 2-component vector of float)
0:16 indirect index (layout( location=0) temp block{ out 2-component vector of float texCoord})
0:16 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord})
0:16 'gl_InvocationID' ( in int InvocationID)
0:16 Constant:
0:16 0 (const int)
0:16 texCoord: direct index for structure ( in 2-component vector of float)
0:16 indirect index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:16 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:16 'gl_InvocationID' ( in int InvocationID)
0:16 Constant:
0:16 0 (const int)
0:18 Sequence
0:18 move second child to first child ( temp float)
0:18 'tessLevel' ( temp float)
0:18 Constant:
0:18 10.000000
0:19 move second child to first child ( temp float)
0:19 indirect index ( patch temp float TessLevelOuter)
0:19 'gl_TessLevelOuter' ( patch out 4-element array of float TessLevelOuter)
0:19 'gl_InvocationID' ( in int InvocationID)
0:19 'tessLevel' ( temp float)
0:20 move second child to first child ( temp float)
0:20 direct index ( patch temp float TessLevelInner)
0:20 'gl_TessLevelInner' ( patch out 2-element array of float TessLevelInner)
0:20 Constant:
0:20 0 (const int)
0:20 'tessLevel' ( temp float)
0:? Linker Objects
0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:? 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord})
Shader version: 440
input primitive = triangles
vertex spacing = fractional_odd_spacing
triangle order = cw
0:? Sequence
0:15 Function Definition: main( ( global void)
0:15 Function Parameters:
0:17 Sequence
0:17 Sequence
0:17 move second child to first child ( temp float)
0:17 'u' ( temp float)
0:17 direct index ( temp float)
0:17 'gl_TessCoord' ( in 3-component vector of float TessCoord)
0:17 Constant:
0:17 0 (const int)
0:18 Sequence
0:18 move second child to first child ( temp float)
0:18 'v' ( temp float)
0:18 direct index ( temp float)
0:18 'gl_TessCoord' ( in 3-component vector of float TessCoord)
0:18 Constant:
0:18 1 (const int)
0:19 Sequence
0:19 move second child to first child ( temp float)
0:19 'w' ( temp float)
0:19 direct index ( temp float)
0:19 'gl_TessCoord' ( in 3-component vector of float TessCoord)
0:19 Constant:
0:19 2 (const int)
0:21 Sequence
0:21 move second child to first child ( temp 2-component vector of float)
0:21 'newUv' ( temp 2-component vector of float)
0:21 Construct vec2 ( temp 2-component vector of float)
0:21 add ( temp 2-component vector of float)
0:21 add ( temp 2-component vector of float)
0:21 vector-scale ( temp 2-component vector of float)
0:21 'u' ( temp float)
0:21 texCoord: direct index for structure ( in 2-component vector of float)
0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:21 Constant:
0:21 0 (const int)
0:21 Constant:
0:21 0 (const int)
0:21 vector-scale ( temp 2-component vector of float)
0:21 'v' ( temp float)
0:21 texCoord: direct index for structure ( in 2-component vector of float)
0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:21 Constant:
0:21 1 (const int)
0:21 Constant:
0:21 0 (const int)
0:21 vector-scale ( temp 2-component vector of float)
0:21 'w' ( temp float)
0:21 texCoord: direct index for structure ( in 2-component vector of float)
0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord})
0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:21 Constant:
0:21 2 (const int)
0:21 Constant:
0:21 0 (const int)
0:22 move second child to first child ( temp 2-component vector of float)
0:22 texCoord: direct index for structure ( out 2-component vector of float)
0:22 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:22 Constant:
0:22 0 (const int)
0:22 'newUv' ( temp 2-component vector of float)
0:23 move second child to first child ( temp 4-component vector of float)
0:23 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
0:23 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
0:23 Constant:
0:23 0 (const uint)
0:23 gl_Position: direct index for structure ( in 4-component vector of float Position)
0:23 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance})
0:23 'gl_PatchVerticesIn' ( in int PatchVertices)
0:23 Constant:
0:23 0 (const int)
0:? Linker Objects
0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord})
0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})

View File

@ -0,0 +1,94 @@
link.tesselation.vert
Shader version: 440
0:? Sequence
0:11 Function Definition: main( ( global void)
0:11 Function Parameters:
0:13 Sequence
0:13 move second child to first child ( temp 4-component vector of float)
0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
0:13 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
0:13 Constant:
0:13 0 (const uint)
0:13 'i_Pos' (layout( location=0) in 4-component vector of float)
0:14 move second child to first child ( temp 2-component vector of float)
0:14 texCoord: direct index for structure ( out 2-component vector of float)
0:14 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:14 Constant:
0:14 0 (const int)
0:14 'i_Tex' (layout( location=1) in 2-component vector of float)
0:? Linker Objects
0:? 'i_Pos' (layout( location=0) in 4-component vector of float)
0:? 'i_Tex' (layout( location=1) in 2-component vector of float)
0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance})
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
link.tesselation.frag
Shader version: 440
0:? Sequence
0:12 Function Definition: main( ( global void)
0:12 Function Parameters:
0:14 Sequence
0:14 move second child to first child ( temp 4-component vector of float)
0:14 'oColor' (layout( location=0) out 4-component vector of float)
0:14 texture ( global 4-component vector of float)
0:14 'mytex' (layout( binding=0) uniform sampler2D)
0:14 texCoord: direct index for structure ( in 2-component vector of float)
0:14 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord})
0:14 Constant:
0:14 0 (const int)
0:? Linker Objects
0:? 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord})
0:? 'oColor' (layout( location=0) out 4-component vector of float)
0:? 'mytex' (layout( binding=0) uniform sampler2D)
Linked vertex stage:
Linked fragment stage:
Shader version: 440
0:? Sequence
0:11 Function Definition: main( ( global void)
0:11 Function Parameters:
0:13 Sequence
0:13 move second child to first child ( temp 4-component vector of float)
0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
0:13 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
0:13 Constant:
0:13 0 (const uint)
0:13 'i_Pos' (layout( location=0) in 4-component vector of float)
0:14 move second child to first child ( temp 2-component vector of float)
0:14 texCoord: direct index for structure ( out 2-component vector of float)
0:14 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:14 Constant:
0:14 0 (const int)
0:14 'i_Tex' (layout( location=1) in 2-component vector of float)
0:? Linker Objects
0:? 'i_Pos' (layout( location=0) in 4-component vector of float)
0:? 'i_Tex' (layout( location=1) in 2-component vector of float)
0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord})
0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance})
0:? 'gl_VertexID' ( gl_VertexId int VertexId)
0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId)
Shader version: 440
0:? Sequence
0:12 Function Definition: main( ( global void)
0:12 Function Parameters:
0:14 Sequence
0:14 move second child to first child ( temp 4-component vector of float)
0:14 'oColor' (layout( location=0) out 4-component vector of float)
0:14 texture ( global 4-component vector of float)
0:14 'mytex' (layout( binding=0) uniform sampler2D)
0:14 texCoord: direct index for structure ( in 2-component vector of float)
0:14 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord})
0:14 Constant:
0:14 0 (const int)
0:? Linker Objects
0:? 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord})
0:? 'oColor' (layout( location=0) out 4-component vector of float)
0:? 'mytex' (layout( binding=0) uniform sampler2D)

View File

@ -0,0 +1,15 @@
#version 440
layout(location = 0) in Primitive
{
vec2 texCoord;
} IN;
layout(location = 0) out vec4 oColor;
layout(binding = 0) uniform sampler2D mytex;
void main()
{
oColor = texture(mytex, IN.texCoord);
}

View File

@ -0,0 +1,21 @@
#version 440
layout(location = 0) in Primitive
{
vec2 texCoord;
} IN[];
layout(location = 0) out Primitive
{
vec2 texCoord;
} OUT[];
layout(vertices = 3) out;
void main()
{
OUT[gl_InvocationID].texCoord = IN[gl_InvocationID].texCoord;
float tessLevel = 10.0;
gl_TessLevelOuter[gl_InvocationID] = tessLevel;
gl_TessLevelInner[0] = tessLevel;
}

View File

@ -0,0 +1,26 @@
#version 440
layout(location = 0) in Primitive
{
vec2 texCoord;
} IN[];
layout(location = 0) out Primitive
{
vec2 texCoord;
} OUT;
layout(triangles, fractional_odd_spacing) in;
layout(cw) in;
void main()
{
float u = gl_TessCoord.x;
float v = gl_TessCoord.y;
float w = gl_TessCoord.z;
vec2 newUv = vec2( u * IN[0].texCoord + v * IN[1].texCoord + w * IN[2].texCoord);
OUT.texCoord = newUv;
gl_Position = gl_in[gl_PatchVerticesIn].gl_Position;
}

View File

@ -0,0 +1,16 @@
#version 440
layout(location = 0) in vec4 i_Pos;
layout(location = 1) in vec2 i_Tex;
layout(location = 0) out Primitive
{
vec2 texCoord;
} OUT;
void main()
{
gl_Position = i_Pos;
OUT.texCoord = i_Tex;
}

View File

@ -2158,8 +2158,9 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type)
bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) {
return type.isArray() &&
((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) ||
(language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
(language == EShLangTessControl && (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut) &&
! type.getQualifier().patch) ||
(language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) ||
(language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
type.getQualifier().pervertexNV) ||
(language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&

View File

@ -106,6 +106,8 @@ INSTANTIATE_TEST_SUITE_P(
{"link.multiAnonBlocksValid.0.0.vert", "link.multiAnonBlocksValid.0.1.vert"},
{"link.multiBlocksInvalid.0.0.vert", "link.multiBlocksInvalid.0.1.vert"},
{"link.multiBlocksValid.1.0.vert", "link.multiBlocksValid.1.1.vert"},
{"link.tesselation.vert", "link.tesselation.frag"},
{"link.tesselation.tese", "link.tesselation.tesc"},
}))
);
// clang-format on