From: Ian Romanick <[email protected]> NOTE: On Mesa we get the correct locations, but the shader doesn't generate the correct results. The test fails.
Signed-off-by: Ian Romanick <[email protected]> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=83741 --- ...struct-struct-mat2x3-mat2x4-and-int.shader_test | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 tests/spec/arb_uniform_buffer_object/std140-row_major-array-struct-struct-mat2x3-mat2x4-and-int.shader_test diff --git a/tests/spec/arb_uniform_buffer_object/std140-row_major-array-struct-struct-mat2x3-mat2x4-and-int.shader_test b/tests/spec/arb_uniform_buffer_object/std140-row_major-array-struct-struct-mat2x3-mat2x4-and-int.shader_test new file mode 100644 index 0000000..9eda8a5 --- /dev/null +++ b/tests/spec/arb_uniform_buffer_object/std140-row_major-array-struct-struct-mat2x3-mat2x4-and-int.shader_test @@ -0,0 +1,81 @@ +[require] +GLSL >= 1.30 +GL_ARB_uniform_buffer_object + +[vertex shader] +#extension GL_ARB_uniform_buffer_object: require +#extension GL_ARB_shader_bit_encoding: enable +#extension GL_ARB_gpu_shader5: enable + +struct S2 { + mat2x3 m23; + mat2x4 m24; +}; + +struct S1 { + S2[1] s2; + int i1; +}; + + +layout(std140, row_major) +uniform UB1 { + // base base align padded row- array matrix + // align off. off. size major stride stride + S1 s1; // 16 0 0 128 - - - +// S2[1] s2 16 0 0 112 - 112 - +// [0] +// mat2x3 m23 16 0 0 48 yes - 16 +// mat2x4 m24 16 48 48 64 yes - 16 +// int i1 4 112 112 4 - - - +} ; + +flat out int vertex_pass; +in vec4 piglit_vertex; + +#if defined(GL_ARB_shader_bit_encoding) || defined(GL_ARB_gpu_shader5) || __VERSION__ >= 430 +bool float_match(float u, float f, uint bits) { return floatBitsToUint(u) == bits; } +#else +bool float_match(float u, float f, uint bits) { return u == f; } +#endif + +void main() +{ + /* std140 (or shared) layout prevents any fields or blocks from being + * eliminated. Section 2.11.6 of the OpenGL ES 3.0 spec makes this + * explicit, but desktop GL specs only imply it. + */ + bool pass = true; + + if (s1.i1 != 111) + pass = false; + + vertex_pass = int(pass); + gl_Position = piglit_vertex; +} + +[fragment shader] +precision highp float; + +out vec4 piglit_fragcolor; +flat in int vertex_pass; + +void main() +{ + piglit_fragcolor = bool(vertex_pass) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1); +} + +[test] +link success + +active uniform s1.i1 GL_UNIFORM_TYPE GL_INT +active uniform s1.i1 GL_UNIFORM_SIZE 1 +active uniform s1.i1 GL_UNIFORM_OFFSET 112 +active uniform s1.i1 GL_UNIFORM_ARRAY_STRIDE 0 +active uniform s1.i1 GL_UNIFORM_MATRIX_STRIDE 0 +active uniform s1.i1 GL_UNIFORM_IS_ROW_MAJOR 0 + +uniform int s1.i1 111 + +draw rect -1 -1 2 2 +probe all rgba 0.0 1.0 0.0 1.0 -- 1.8.1.4 _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
