zink: clip-distance-vs-gs-out-sso.shader_test is broken when shader object is enabled
$ ZINK_DEBUG=noopt,nobgc RADV_PERFTEST=shader_object PIGLIT_PLATFORM=gbm MESA_LOADER_DRIVER_OVERRIDE=zink ./bin/shader_runner ./tests/spec/glsl-1.50/execution/geometry/clip-distance-vs-gs-out-sso.shader_test -auto -fbo
Probe color at (0,0)
Expected: 0 255 0 255
Observed: 0 0 0 0
Test failure on line 53
PIGLIT: {"result": "fail" }
Removing RADV_PERFTEST=shader_object fixes it.
For some reasons the GS output location is incorrect with ESO and it's fine with pipelines, see shaders below:
ESO (fail):
GS:
#version 450
layout(triangles) in;
layout(max_vertices = 3, triangle_strip) out;
struct _12
{
uint _m0[1];
uint _m1[1];
uint _m2[1];
uint _m3[2];
uint _m4[4];
uint _m5[1];
uint _m6[2];
uint _m7[1];
};
uniform _12 _3;
layout(location = 0) in vec4 _4[32];
layout(location = 2) out vec4 _7;
void main()
{
vec4 _40[3];
_40[0u] = _4[0u];
_40[1] = _4[1];
_40[2u] = _4[2u];
vec4 _41[3];
_41[0u] = gl_in[0u].gl_Position;
_41[1] = gl_in[1].gl_Position;
_41[2u] = gl_in[2u].gl_Position;
uint _42 = 0u;
for (;;)
{
if (int(_42) >= 3)
{
break;
}
else
{
}
gl_Position = _41[_42];
_7 = _40[_42];
gl_PointSize = 1.0;
EmitVertex();
_42 = uint(int(_42) + 1);
continue;
}
}
FS:
#version 450
struct _9
{
uint _m0[1];
uint _m1[1];
uint _m2[1];
uint _m3[2];
uint _m4[4];
uint _m5[1];
uint _m6[2];
uint _m7[1];
};
uniform _9 _3;
layout(location = 0) in vec4 _4;
layout(location = 0, index = 0) out vec4 _5;
void main()
{
_5 = _4;
}
no ESO (pass):
GS:
#version 450
layout(triangles) in;
layout(max_vertices = 3, triangle_strip) out;
struct _11
{
uint _m0[1];
uint _m1[1];
uint _m2[1];
uint _m3[2];
uint _m4[4];
uint _m5[1];
uint _m6[2];
uint _m7[1];
};
uniform _11 _3;
layout(location = 0) in vec4 _4[32];
layout(location = 0) out vec4 _7;
void main()
{
vec4 _37[3];
_37[0u] = _4[0u];
_37[1] = _4[1];
_37[2u] = _4[2u];
vec4 _38[3];
_38[0u] = gl_in[0u].gl_Position;
_38[1] = gl_in[1].gl_Position;
_38[2u] = gl_in[2u].gl_Position;
uint _39 = 0u;
for (;;)
{
if (int(_39) >= 3)
{
break;
}
else
{
}
gl_Position = _38[_39];
_7 = _37[_39];
EmitVertex();
_39 = uint(int(_39) + 1);
continue;
}
}
#version 450
struct _9
{
uint _m0[1];
uint _m1[1];
uint _m2[1];
uint _m3[2];
uint _m4[4];
uint _m5[1];
uint _m6[2];
uint _m7[1];
};
uniform _9 _3;
layout(location = 0) in vec4 _4;
layout(location = 0, index = 0) out vec4 _5;
void main()
{
_5 = _4;
}