ext_gpu_shader4: add compiler tests for everything
[piglit.git] / tests / spec / arb_uniform_buffer_object / struct_base_alignment.shader_test
blob4239b6d3e3e9cd95087bdd2d13025c63c55bee63
1 [require]
2 GLSL >= 1.30
3 GL_ARB_uniform_buffer_object
5 [vertex shader]
6 #extension GL_ARB_uniform_buffer_object : require
8 struct S1 {
9         float r;
12 struct S2 {
13         float g;
14         float b;
15         float a;
18 /* Section 2.11.4 (Uniform Variables), subsection Standard Uniform
19  * Block Layout, of the OpenGL 3.1 spec says (emphasis mine):
20  *
21  *     "(9) If the member is a structure, the base alignment of the
22  *     structure is <N>, where <N> is the largest base alignment value
23  *     of any of its members, and *rounded up to the base alignment of
24  *     a vec4*. The individual members of this sub-structure are then
25  *     assigned offsets by applying this set of rules recursively,
26  *     where the base offset of the first member of the sub-structure
27  *     is equal to the aligned offset of the structure. The structure
28  *     may have padding at the end; the base offset of the member
29  *     following the sub-structure is rounded up to the next multiple
30  *     of the base alignment of the structure."
31  */
32 struct S {
33        S1 s1;
34        S2 s2;
37 layout(std140) uniform ubo1 {
38         S s;
41 in vec4 piglit_vertex;
42 flat out int pass;
44 void main()
46         /* std140 (or shared) layout prevents any fields or blocks from being
47          * eliminted.  Section 2.11.6 of the OpenGL ES 3.0 spec makes this
48          * explicit, but desktop GL specs only say it implicitly.  Either way,
49          * there is no need to reference any field of the std140 block.
50          */
51         gl_Position = piglit_vertex;
53         pass = int(s.s2.g == 3.3);
57 [fragment shader]
58 out vec4 piglit_fragcolor;
59 flat in int pass;
61 void main()
63         piglit_fragcolor = bool(pass) ? vec4(0, 1, 0, 1) : vec4(1, 0, 0, 1);
66 [test]
67 link success
69 active uniform s.s1.r GL_UNIFORM_TYPE GL_FLOAT
70 active uniform s.s1.r GL_UNIFORM_SIZE 1
71 active uniform s.s1.r GL_UNIFORM_OFFSET 0
72 active uniform s.s1.r GL_UNIFORM_ARRAY_STRIDE 0
73 active uniform s.s1.r GL_UNIFORM_MATRIX_STRIDE 0
74 active uniform s.s1.r GL_UNIFORM_IS_ROW_MAJOR 0
76 active uniform s.s2.g GL_UNIFORM_TYPE GL_FLOAT
77 active uniform s.s2.g GL_UNIFORM_SIZE 1
78 active uniform s.s2.g GL_UNIFORM_OFFSET 16
79 active uniform s.s2.g GL_UNIFORM_ARRAY_STRIDE 0
80 active uniform s.s2.g GL_UNIFORM_MATRIX_STRIDE 0
81 active uniform s.s2.g GL_UNIFORM_IS_ROW_MAJOR 0
83 active uniform s.s2.b GL_UNIFORM_TYPE GL_FLOAT
84 active uniform s.s2.b GL_UNIFORM_SIZE 1
85 active uniform s.s2.b GL_UNIFORM_OFFSET 20
86 active uniform s.s2.b GL_UNIFORM_ARRAY_STRIDE 0
87 active uniform s.s2.b GL_UNIFORM_MATRIX_STRIDE 0
88 active uniform s.s2.b GL_UNIFORM_IS_ROW_MAJOR 0
90 active uniform s.s2.a GL_UNIFORM_TYPE GL_FLOAT
91 active uniform s.s2.a GL_UNIFORM_SIZE 1
92 active uniform s.s2.a GL_UNIFORM_OFFSET 24
93 active uniform s.s2.a GL_UNIFORM_ARRAY_STRIDE 0
94 active uniform s.s2.a GL_UNIFORM_MATRIX_STRIDE 0
95 active uniform s.s2.a GL_UNIFORM_IS_ROW_MAJOR 0
97 uniform float s.s2.g 3.3
99 draw rect -1 -1 2 2
100 probe all rgba 0.0 1.0 0.0 1.0