https://bugs.freedesktop.org/show_bug.cgi?id=96254
Bug ID: 96254
Summary: [softpipe] piglit unsized-array-not-in-last-position
regression
Product: Mesa
Version: git
Hardware: x86-64 (AMD64)
OS: Linux (All)
Status: NEW
Keywords: bisected, regression
Severity: normal
Priority: medium
Component: Mesa core
Assignee: mesa-dev@lists.freedesktop.org
Reporter: v...@freedesktop.org
QA Contact: mesa-dev@lists.freedesktop.org
CC: airl...@freedesktop.org, sigles...@igalia.com
mesa: fb2a5ceb3264123e94a5e3f4d92cf6ec605e76e8 (master 11.3.0-devel)
$ ./bin/glslparsertest
tests/spec/arb_shader_storage_buffer_object/compiler/unsized-array-not-in-last-position.frag
fail 1.20 GL_ARB_shader_storage_buffer_object
Successfully compiled fragment shader
tests/spec/arb_shader_storage_buffer_object/compiler/unsized-array-not-in-last-position.frag:
Shader source:
// [config]
// expect_result: fail
// glsl_version: 1.20
// require_extensions: GL_ARB_shader_storage_buffer_object
// [end config]
#version 120
#extension GL_ARB_shader_storage_buffer_object: require
/* From the GL_ARB_shader_storage_buffer_object spec:
*
* "In a shader storage block, the last member may be declared without an
* explicit size."
*/
buffer a {
vec4 b;
int c[];
float d;
};
vec4 foo(void) {
return b;
}
PIGLIT: {"result": "fail" }
5b2675093e863a52b610f112884ae12d42513770 is the first bad commit
commit 5b2675093e863a52b610f112884ae12d42513770
Author: Dave Airlie <airl...@redhat.com>
Date: Wed May 25 13:31:41 2016 +1000
glsl: handle implicit sized arrays in ssbo
The current code disallows unsized arrays except at the end of
an SSBO but it is a bit overzealous in doing so.
struct a {
int b[];
int f[4];
};
is valid as long as b is implicitly sized within the shader,
i.e. it is accessed only by integer indices.
I've submitted some piglit tests to test for this.
This also has no regressions on piglit on my Haswell.
This fixes:
GL45-CTS.shader_storage_buffer_object.basic-syntax
GL45-CTS.shader_storage_buffer_object.basic-syntaxSSO
This patch moves a chunk of the linker code down, so
that we don't link the uniform blocks until after we've
merged all the variables. The logic went something like:
Removing the checks for last ssbo member unsized from
the compiler and into the linker, meant doing the check
in the link_uniform_blocks code. However to do that the
array sizing had to happen first, so we knew that the
only unsized arrays were in the last block. But array
sizing required the variable to be merged, otherwise
you'd get two different array sizes in different
version of two variables, and one would get lost
when merged. So the solution was to move array sizing
up, after variable merging, but before uniform block
visiting.
Reviewed-by: Samuel Iglesias Gonsálvez <sigles...@igalia.com>
Signed-off-by: Dave Airlie <airl...@redhat.com>
:040000 040000 86192aa213e706ebd8ac097144a34364c95c7233
b0fece865f8c1a2b6a1b656f628a4cd98b58b336 M src
bisect run success
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev