[Mesa-dev] [Bug 96358] SSO: wrong interface validation between GS and VS (regresion due to latest gles 3.1)
bugzilla-daemon at freedesktop.org
bugzilla-daemon at freedesktop.org
Fri Jun 3 19:28:54 UTC 2016
https://bugs.freedesktop.org/show_bug.cgi?id=96358
Bug ID: 96358
Summary: SSO: wrong interface validation between GS and VS
(regresion due to latest gles 3.1)
Product: Mesa
Version: git
Hardware: Other
OS: All
Status: NEW
Severity: normal
Priority: medium
Component: Mesa core
Assignee: mesa-dev at lists.freedesktop.org
Reporter: gregory.hainaut at gmail.com
QA Contact: mesa-dev at lists.freedesktop.org
Hello,
My program generates pipeline invalidation error but it used to be fine. It is
related to bd3f15cffdbbec6d1ea5b7db2fcddaf8b7ae4524.
Here the Vertex Shader output
out SHADER
{
vec4 t_float;
vec4 t_int;
vec4 c;
flat vec4 fc;
} VSout;
Here the Geometry Shader input. Please notice the array.
in SHADER
{
vec4 t_float;
vec4 t_int;
vec4 c;
flat vec4 fc;
} GSin[];
In src/mesa/main/shader_query.cpp in validate_io function:
The error detected is this one:
/* Section 7.4.1 (Shader Interface Matching) of the OpenGL ES 3.1 spec
* says:
*
* - An output variable is considered to match an input variable in
* the subsequent shader if:
*
* - the two variables match in name, type, and qualification; or
*
* - the two variables are declared with the same location
* qualifier and match in type and qualification.
*/
if (producer_var == NULL) {
valid = false;
goto out;
}
Here the consumer_var info
(gdb) p *consumer_var
$17 = {
type = 0x8acc940,
interface_type = 0x8b39b50,
outermost_struct_type = 0x0,
name = 0x8ae8e68 "SHADER[2].c",
location = -1,
component = 0,
index = 0,
patch = 0,
mode = 4,
interpolation = 2,
explicit_location = 0,
precision = 0
}
And the first output
gdb) p *outputs[0
$24 = {
type = 0xf4b9f4f0 <glsl_type::_vec4_type>,
interface_type = 0x8b382e8,
outermost_struct_type = 0x0,
name = 0x8b27b80 "SHADER.c",
location = -1,
component = 0,
index = 0,
patch = 0,
mode = 5,
interpolation = 0,
explicit_location = 0,
precision = 0
}
As you can the name of the GS interface got an extra "[2]" likely the size of
the array. So the previous strcmp isn't possible
<<<<
if (!var->explicit_location &&
strcmp(consumer_var->name, var->name) == 0) {
>>>>
Good luck :)
--
You are receiving this mail because:
You are the QA Contact for the bug.
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160603/f96ae73c/attachment.html>
More information about the mesa-dev
mailing list