Commit e744e0a8 authored by Kenneth Graunke's avatar Kenneth Graunke

Add a new test for a structure uniform splitting bug with samplers

Michael Fiano discovered an i965 crash in Mesa 19.0 when a uniform
structure contains samplers.  We were splitting the structure into
separate uniforms but botching the locations, leaving them set to 0,
then reading the wrong uniform storage and seeing the VS's matrix.

This test was reduced from his (MIT-licensed) application's shaders.
Reviewed-by: Eric Anholt's avatarEric Anholt <eric@anholt.net>
parent 70d233bb
[require]
GLSL >= 1.10
[vertex shader]
varying vec4 texcoords;
/* Make the first uniform in the linked program take up a bunch of storage */
uniform mat4 identity;
void main()
{
gl_Position = identity * gl_Vertex;
texcoords = (gl_Vertex + 1.0) / 2.0;
}
[fragment shader]
struct tex_struct {
vec4 mix;
sampler2D sampler;
};
varying vec4 texcoords;
/* If the implementation splits the struct badly and accidentally assigns
* location 0 to the sampler, an implementation may confuse it with the
* earlier matrix which takes up storage (unlike a sampler).
*/
uniform tex_struct tex;
void main()
{
gl_FragColor = texture2D(tex.sampler, texcoords.xy) * tex.mix;
}
[test]
uniform mat4 identity 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
uniform int tex.sampler 0
uniform vec4 tex.mix 0.5 0.5 0.5 0.5
texture rgbw 0 (8, 8)
draw rect -1 -1 2 2
relative probe rgb (0.25, 0.25) (0.5, 0.0, 0.0)
relative probe rgb (0.75, 0.25) (0.0, 0.5, 0.0)
relative probe rgb (0.25, 0.75) (0.0, 0.0, 0.5)
relative probe rgb (0.75, 0.75) (0.5, 0.5, 0.5)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment