From GLGL 4.5 spec, 5.11 "Out-of-Bounds Accesses": "In the subsections described above for array, vector, matrix and structure accesses, any out-of-bounds access produced undefined behavior. However, if robust buffer access is enabled via the OpenGL API, such accesses will be bound within the memory extent of the active program."
These tests perform writes to an unsized array, however some of these writes can be out-of-bounds and the result is undefined. As the tests are focused on in-bound access and they don't enable robust buffer access, then this patch removes the out-of-bounds writes because we cannot assume they will be ignored. Signed-off-by: Samuel Iglesias Gonsálvez <[email protected]> Cc: [email protected] --- .../arb_shader_storage_buffer_object/layout-std140-write-shader.c | 6 ++++-- .../arb_shader_storage_buffer_object/layout-std430-write-shader.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/spec/arb_shader_storage_buffer_object/layout-std140-write-shader.c b/tests/spec/arb_shader_storage_buffer_object/layout-std140-write-shader.c index c67248e7a..914fc000f 100644 --- a/tests/spec/arb_shader_storage_buffer_object/layout-std140-write-shader.c +++ b/tests/spec/arb_shader_storage_buffer_object/layout-std140-write-shader.c @@ -63,7 +63,8 @@ static const char vs_pass_thru_text[] = " f = 4.0;\n" " s.a2[0] = vec2(6.0, 7.0); \n" " int index = int(v.x); // index should be zero\n" - " unsized_array[index + gl_VertexID] = unsized_array.length();\n" + " if ((index + gl_VertexID) < 4)\n" + " unsized_array[index + gl_VertexID] = unsized_array.length();\n" "}\n"; static const char fs_source[] = @@ -91,7 +92,8 @@ static const char fs_source[] = " s.a2[1] = vec2(8.0, 9.0);\n" " s.a4 = mat2(10.0, 11.0, 12.0, 13.0);\n" " int index = int(v.z + gl_FragCoord.x);\n" - " unsized_array[index] = unsized_array.length() * 2.0;\n" + " if (index >= 0 && index < 4)\n" + " unsized_array[index] = unsized_array.length() * 2.0;\n" "}\n"; GLuint prog; diff --git a/tests/spec/arb_shader_storage_buffer_object/layout-std430-write-shader.c b/tests/spec/arb_shader_storage_buffer_object/layout-std430-write-shader.c index 70c87a164..3d5dcdc47 100644 --- a/tests/spec/arb_shader_storage_buffer_object/layout-std430-write-shader.c +++ b/tests/spec/arb_shader_storage_buffer_object/layout-std430-write-shader.c @@ -86,7 +86,8 @@ static const char vs_pass_thru_text[] = " v3a[0].xz = vec2(39.0, 41.0);\n" " v3a[1].y = 43.0;\n" " int index = int(v.x); // index should be zero\n" - " unsized_array[index + gl_VertexID] = unsized_array.length();\n" + " if ((index + gl_VertexID) < 4)\n" + " unsized_array[index + gl_VertexID] = unsized_array.length();\n" "}\n"; static const char fs_source[] = @@ -126,7 +127,8 @@ static const char fs_source[] = " v3a[0].y = 40.0;\n" " v3a[1].xz = vec2(42.0, 44.0);\n" " int index = int(v.z + gl_FragCoord.x);\n" - " unsized_array[index] = unsized_array.length() * 2.0;\n" + " if (index >= 0 && index < 4)\n" + " unsized_array[index] = unsized_array.length() * 2.0;\n" "}\n"; GLuint prog; -- 2.14.1 _______________________________________________ Piglit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/piglit
