On Sat, Jul 19, 2014 at 9:33 PM, Chris Forbes <[email protected]> wrote: > This ensures that the block index of the base of the array is correctly > taken into account, along with just being a little more stressful. > > Signed-off-by: Chris Forbes <[email protected]>
This, and your previous series, Reviewed-by: Ilia Mirkin <[email protected]> > --- > .../ubo_array_indexing/fs-two-arrays.shader_test | 200 +++++++++++++++++++ > .../ubo_array_indexing/gs-two-arrays.shader_test | 218 > +++++++++++++++++++++ > .../ubo_array_indexing/vs-two-arrays.shader_test | 211 ++++++++++++++++++++ > 3 files changed, 629 insertions(+) > create mode 100644 > tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/fs-two-arrays.shader_test > create mode 100644 > tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/gs-two-arrays.shader_test > create mode 100644 > tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/vs-two-arrays.shader_test > > diff --git > a/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/fs-two-arrays.shader_test > > b/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/fs-two-arrays.shader_test > new file mode 100644 > index 0000000..2ae03e4 > --- /dev/null > +++ > b/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/fs-two-arrays.shader_test > @@ -0,0 +1,200 @@ > +# This test verifies that dynamically uniform indexing of UBO arrays > +# in the fragment shader behaves correctly, with two separate arrays. > + > +[require] > +GLSL >= 1.50 > +GL_ARB_gpu_shader5 > + > +[vertex shader passthrough] > + > +[fragment shader] > +#version 150 > +#extension GL_ARB_gpu_shader5: require > + > +uniform r_values { > + float val; > +} r_arr[5]; > + > +uniform g_values { > + float val; > +} g_arr[5]; > + > +uniform int n; > +uniform int m; > + > +out vec4 color; > + > +void main() > +{ > + color.x = r_arr[n].val; > + color.y = g_arr[m].val; > + color.z = 0.0; > + color.w = 0.0; > +} > + > +[test] > +clear color 0.2 0.2 0.2 0.2 > +clear > + > +ubo array index 0 > +uniform float r_values.val 0.0 > +uniform float g_values.val 1.0 > + > +ubo array index 1 > +uniform float r_values.val 0.2 > +uniform float g_values.val 0.8 > + > +ubo array index 2 > +uniform float r_values.val 0.4 > +uniform float g_values.val 0.6 > + > +ubo array index 3 > +uniform float r_values.val 0.6 > +uniform float g_values.val 0.4 > + > +ubo array index 4 > +uniform float r_values.val 0.8 > +uniform float g_values.val 0.2 > + > + > + > +uniform int m 0 > +uniform int n 0 > +draw rect -1 -1 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.0, 0.2, 0.2) (0.0, 1.0, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -1 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.0, 0.2, 0.2) (0.2, 1.0, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -1 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.0, 0.2, 0.2) (0.4, 1.0, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -1 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.0, 0.2, 0.2) (0.6, 1.0, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -1 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.0, 0.2, 0.2) (0.8, 1.0, 0.0) > + > + > + > + > +uniform int m 1 > +uniform int n 0 > +draw rect -1 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.2, 0.2, 0.2) (0.0, 0.8, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.2, 0.2, 0.2) (0.2, 0.8, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.2, 0.2, 0.2) (0.4, 0.8, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.2, 0.2, 0.2) (0.6, 0.8, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.2, 0.2, 0.2) (0.8, 0.8, 0.0) > + > + > + > + > +uniform int m 2 > +uniform int n 0 > +draw rect -1 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.4, 0.2, 0.2) (0.0, 0.6, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.4, 0.2, 0.2) (0.2, 0.6, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.4, 0.2, 0.2) (0.4, 0.6, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.4, 0.2, 0.2) (0.6, 0.6, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.4, 0.2, 0.2) (0.8, 0.6, 0.0) > + > + > + > +uniform int m 3 > +uniform int n 0 > +draw rect -1 0.2 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.6, 0.2, 0.2) (0.0, 0.4, 0.0) > + > +uniform int n 1 > +draw rect -0.6 0.2 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.6, 0.2, 0.2) (0.2, 0.4, 0.0) > + > +uniform int n 2 > +draw rect -0.2 0.2 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.6, 0.2, 0.2) (0.4, 0.4, 0.0) > + > +uniform int n 3 > +draw rect 0.2 0.2 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.6, 0.2, 0.2) (0.6, 0.4, 0.0) > + > +uniform int n 4 > +draw rect 0.6 0.2 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.6, 0.2, 0.2) (0.8, 0.4, 0.0) > + > + > + > +uniform int m 4 > +uniform int n 0 > +draw rect -1 0.6 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.8, 0.2, 0.2) (0.0, 0.2, 0.0) > + > +uniform int n 1 > +draw rect -0.6 0.6 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.8, 0.2, 0.2) (0.2, 0.2, 0.0) > + > +uniform int n 2 > +draw rect -0.2 0.6 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.8, 0.2, 0.2) (0.4, 0.2, 0.0) > + > +uniform int n 3 > +draw rect 0.2 0.6 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.8, 0.2, 0.2) (0.6, 0.2, 0.0) > + > +uniform int n 4 > +draw rect 0.6 0.6 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.8, 0.2, 0.2) (0.8, 0.2, 0.0) > + > diff --git > a/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/gs-two-arrays.shader_test > > b/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/gs-two-arrays.shader_test > new file mode 100644 > index 0000000..4e25853 > --- /dev/null > +++ > b/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/gs-two-arrays.shader_test > @@ -0,0 +1,218 @@ > +# This test verifies that dynamically uniform indexing of UBO arrays > +# in the geometry shader behaves correctly, with two separate arrays. > + > +[require] > +GLSL >= 1.50 > +GL_ARB_gpu_shader5 > + > +[vertex shader passthrough] > + > +[geometry shader] > +#version 150 > +#extension GL_ARB_gpu_shader5: require > + > +uniform r_values { > + float val; > +} r_arr[5]; > + > +uniform g_values { > + float val; > +} g_arr[5]; > + > +uniform int n; > +uniform int m; > + > +layout(triangles) in; > +layout(triangle_strip, max_vertices=3) out; > +out vec4 color; > + > +void main() > +{ > + for (int i = 0; i < 3; i++) { > + gl_Position = gl_in[i].gl_Position; > + color.x = r_arr[n].val; > + color.y = g_arr[m].val; > + color.z = 0.0; > + color.w = 0.0; > + EmitVertex(); > + } > + EndPrimitive(); > +} > + > +[fragment shader] > +#version 150 > + > +in vec4 color; > +out vec4 out_color; > + > +void main() > +{ > + out_color = color; > +} > + > +[test] > +clear color 0.2 0.2 0.2 0.2 > +clear > + > +ubo array index 0 > +uniform float r_values.val 0.0 > +uniform float g_values.val 1.0 > + > +ubo array index 1 > +uniform float r_values.val 0.2 > +uniform float g_values.val 0.8 > + > +ubo array index 2 > +uniform float r_values.val 0.4 > +uniform float g_values.val 0.6 > + > +ubo array index 3 > +uniform float r_values.val 0.6 > +uniform float g_values.val 0.4 > + > +ubo array index 4 > +uniform float r_values.val 0.8 > +uniform float g_values.val 0.2 > + > + > + > +uniform int m 0 > +uniform int n 0 > +draw rect -1 -1 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.0, 0.2, 0.2) (0.0, 1.0, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -1 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.0, 0.2, 0.2) (0.2, 1.0, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -1 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.0, 0.2, 0.2) (0.4, 1.0, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -1 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.0, 0.2, 0.2) (0.6, 1.0, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -1 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.0, 0.2, 0.2) (0.8, 1.0, 0.0) > + > + > + > + > +uniform int m 1 > +uniform int n 0 > +draw rect -1 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.2, 0.2, 0.2) (0.0, 0.8, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.2, 0.2, 0.2) (0.2, 0.8, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.2, 0.2, 0.2) (0.4, 0.8, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.2, 0.2, 0.2) (0.6, 0.8, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.2, 0.2, 0.2) (0.8, 0.8, 0.0) > + > + > + > + > +uniform int m 2 > +uniform int n 0 > +draw rect -1 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.4, 0.2, 0.2) (0.0, 0.6, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.4, 0.2, 0.2) (0.2, 0.6, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.4, 0.2, 0.2) (0.4, 0.6, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.4, 0.2, 0.2) (0.6, 0.6, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.4, 0.2, 0.2) (0.8, 0.6, 0.0) > + > + > + > +uniform int m 3 > +uniform int n 0 > +draw rect -1 0.2 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.6, 0.2, 0.2) (0.0, 0.4, 0.0) > + > +uniform int n 1 > +draw rect -0.6 0.2 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.6, 0.2, 0.2) (0.2, 0.4, 0.0) > + > +uniform int n 2 > +draw rect -0.2 0.2 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.6, 0.2, 0.2) (0.4, 0.4, 0.0) > + > +uniform int n 3 > +draw rect 0.2 0.2 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.6, 0.2, 0.2) (0.6, 0.4, 0.0) > + > +uniform int n 4 > +draw rect 0.6 0.2 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.6, 0.2, 0.2) (0.8, 0.4, 0.0) > + > + > + > +uniform int m 4 > +uniform int n 0 > +draw rect -1 0.6 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.8, 0.2, 0.2) (0.0, 0.2, 0.0) > + > +uniform int n 1 > +draw rect -0.6 0.6 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.8, 0.2, 0.2) (0.2, 0.2, 0.0) > + > +uniform int n 2 > +draw rect -0.2 0.6 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.8, 0.2, 0.2) (0.4, 0.2, 0.0) > + > +uniform int n 3 > +draw rect 0.2 0.6 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.8, 0.2, 0.2) (0.6, 0.2, 0.0) > + > +uniform int n 4 > +draw rect 0.6 0.6 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.8, 0.2, 0.2) (0.8, 0.2, 0.0) > + > diff --git > a/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/vs-two-arrays.shader_test > > b/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/vs-two-arrays.shader_test > new file mode 100644 > index 0000000..8133b94 > --- /dev/null > +++ > b/tests/spec/arb_gpu_shader5/execution/ubo_array_indexing/vs-two-arrays.shader_test > @@ -0,0 +1,211 @@ > +# This test verifies that dynamically uniform indexing of UBO arrays > +# in the vertex shader behaves correctly, with two separate arrays. > + > +[require] > +GLSL >= 1.50 > +GL_ARB_gpu_shader5 > + > +[vertex shader] > +#version 150 > +#extension GL_ARB_gpu_shader5: require > + > +uniform r_values { > + float val; > +} r_arr[5]; > + > +uniform g_values { > + float val; > +} g_arr[5]; > + > +uniform int n; > +uniform int m; > + > +in vec4 piglit_vertex; > +out vec4 color; > + > +void main() > +{ > + gl_Position = piglit_vertex; > + color.x = r_arr[n].val; > + color.y = g_arr[m].val; > + color.z = 0.0; > + color.w = 0.0; > +} > + > +[fragment shader] > +#version 150 > + > +in vec4 color; > +out vec4 out_color; > + > +void main() > +{ > + out_color = color; > +} > + > +[test] > +clear color 0.2 0.2 0.2 0.2 > +clear > + > +ubo array index 0 > +uniform float r_values.val 0.0 > +uniform float g_values.val 1.0 > + > +ubo array index 1 > +uniform float r_values.val 0.2 > +uniform float g_values.val 0.8 > + > +ubo array index 2 > +uniform float r_values.val 0.4 > +uniform float g_values.val 0.6 > + > +ubo array index 3 > +uniform float r_values.val 0.6 > +uniform float g_values.val 0.4 > + > +ubo array index 4 > +uniform float r_values.val 0.8 > +uniform float g_values.val 0.2 > + > + > + > +uniform int m 0 > +uniform int n 0 > +draw rect -1 -1 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.0, 0.2, 0.2) (0.0, 1.0, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -1 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.0, 0.2, 0.2) (0.2, 1.0, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -1 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.0, 0.2, 0.2) (0.4, 1.0, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -1 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.0, 0.2, 0.2) (0.6, 1.0, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -1 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.0, 0.2, 0.2) (0.8, 1.0, 0.0) > + > + > + > + > +uniform int m 1 > +uniform int n 0 > +draw rect -1 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.2, 0.2, 0.2) (0.0, 0.8, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.2, 0.2, 0.2) (0.2, 0.8, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.2, 0.2, 0.2) (0.4, 0.8, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.2, 0.2, 0.2) (0.6, 0.8, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -0.6 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.2, 0.2, 0.2) (0.8, 0.8, 0.0) > + > + > + > + > +uniform int m 2 > +uniform int n 0 > +draw rect -1 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.4, 0.2, 0.2) (0.0, 0.6, 0.0) > + > +uniform int n 1 > +draw rect -0.6 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.4, 0.2, 0.2) (0.2, 0.6, 0.0) > + > +uniform int n 2 > +draw rect -0.2 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.4, 0.2, 0.2) (0.4, 0.6, 0.0) > + > +uniform int n 3 > +draw rect 0.2 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.4, 0.2, 0.2) (0.6, 0.6, 0.0) > + > +uniform int n 4 > +draw rect 0.6 -0.2 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.4, 0.2, 0.2) (0.8, 0.6, 0.0) > + > + > + > +uniform int m 3 > +uniform int n 0 > +draw rect -1 0.2 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.6, 0.2, 0.2) (0.0, 0.4, 0.0) > + > +uniform int n 1 > +draw rect -0.6 0.2 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.6, 0.2, 0.2) (0.2, 0.4, 0.0) > + > +uniform int n 2 > +draw rect -0.2 0.2 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.6, 0.2, 0.2) (0.4, 0.4, 0.0) > + > +uniform int n 3 > +draw rect 0.2 0.2 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.6, 0.2, 0.2) (0.6, 0.4, 0.0) > + > +uniform int n 4 > +draw rect 0.6 0.2 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.6, 0.2, 0.2) (0.8, 0.4, 0.0) > + > + > + > +uniform int m 4 > +uniform int n 0 > +draw rect -1 0.6 0.4 0.4 > + > +relative probe rect rgb (0.0, 0.8, 0.2, 0.2) (0.0, 0.2, 0.0) > + > +uniform int n 1 > +draw rect -0.6 0.6 0.4 0.4 > + > +relative probe rect rgb (0.2, 0.8, 0.2, 0.2) (0.2, 0.2, 0.0) > + > +uniform int n 2 > +draw rect -0.2 0.6 0.4 0.4 > + > +relative probe rect rgb (0.4, 0.8, 0.2, 0.2) (0.4, 0.2, 0.0) > + > +uniform int n 3 > +draw rect 0.2 0.6 0.4 0.4 > + > +relative probe rect rgb (0.6, 0.8, 0.2, 0.2) (0.6, 0.2, 0.0) > + > +uniform int n 4 > +draw rect 0.6 0.6 0.4 0.4 > + > +relative probe rect rgb (0.8, 0.8, 0.2, 0.2) (0.8, 0.2, 0.0) > + > -- > 2.0.1 > > _______________________________________________ > Piglit mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/piglit _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
