1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
[require]
GLSL >= 1.50
[vertex shader]
in vec4 piglit_vertex;
uniform ublk {
uniform vec4 color;
} c;
out vblk1 {
vec4 r;
};
void vs2_set_gb();
void vs2_set_a();
void vs3_set_b();
void vs4_set_a();
void main()
{
gl_Position = piglit_vertex;
r.r = c.color.r;
vs2_set_gb();
vs3_set_b();
vs4_set_a();
vs2_set_a();
}
[vertex shader]
uniform ublk {
uniform vec4 color;
} vs2ublk;
struct gb_struct {
vec2 gb;
};
out vblk2 {
float unused;
float a;
gb_struct gb_array[3];
} gb_blk;
/* Use an array within an interface block.
*/
void vs2_set_gb()
{
gb_blk.gb_array[1].gb = vs2ublk.color.gb;
}
/* Make sure that vblk2.a doesn't alias/overwrite vblk4.a.
* vblk4.a is used in the final result.
*/
void vs2_set_a()
{
gb_blk.a = 0;
}
[vertex shader]
uniform ublk {
uniform vec4 color;
} vs3ublk;
out vblk3 {
float b;
} b_blk[3];
/* Use an array of interface block instances.
*/
void vs3_set_b()
{
b_blk[1].b = vs3ublk.color.b;
b_blk[0].b = b_blk[2].b = 0.0;
}
[vertex shader]
uniform ublk {
uniform vec4 color;
} vs4ublk;
out vblk4 {
mat4 unused;
float a;
} a_blk;
void vs4_set_a()
{
a_blk.a = vs4ublk.color.a;
}
[fragment shader]
/* Note: vblk1 did not have an instance name in VS1
*/
in vblk1 {
vec4 r;
} r_blk;
struct gb_struct {
vec2 gb;
};
in vblk2 {
float unused;
float a;
gb_struct gb_array[3];
} gb_blk;
in vblk3 {
float b;
} b_blk[3];
/* Note: vblk4 had an instance name in VS4
*/
in vblk4 {
mat4 unused;
float a;
};
void main()
{
/* Note: gl_FragColor is set to the uniform named color, but it is
* passed through several interface blocks.
*/
gl_FragColor.r = r_blk.r.r;
gl_FragColor.gb = gb_blk.gb_array[1].gb;
gl_FragColor.b = b_blk[1].b;
gl_FragColor.a = a;
}
[test]
uniform vec4 ublk.color 1.0 0.0 0.0 0.0
draw rect -1 -1 2 2
probe all rgba 1.0 0.0 0.0 0.0
uniform vec4 ublk.color 0.0 1.0 0.0 0.0
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 0.0
uniform vec4 ublk.color 0.0 0.0 1.0 0.0
draw rect -1 -1 2 2
probe all rgba 0.0 0.0 1.0 0.0
uniform vec4 ublk.color 0.0 0.0 0.0 1.0
draw rect -1 -1 2 2
probe all rgba 0.0 0.0 0.0 1.0
uniform vec4 ublk.color 1.0 0.0 1.0 0.0
draw rect -1 -1 2 2
probe all rgba 1.0 0.0 1.0 0.0
uniform vec4 ublk.color 0.0 1.0 0.0 1.0
draw rect -1 -1 2 2
probe all rgba 0.0 1.0 0.0 1.0
|