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
|
# Tests that the same name can be used for 'different interfaces' where
# different in this case means uniform vs. varying.
#
# GLSLangSpec.1.50.11, 4.3.7 Interface Blocks:
# "A block name is allowed to have different definitions in different
# interfaces."
#
# And clarified in GLSLangSpec.4.30.8, 4.3.9 Interface Blocks:
# "A block name is allowed to have different definitions in different
# interfaces within the same shader, allowing, for example, an input
# block and output block to have the same name."
#
# An input block and output block having the same name is only possible
# for a geometry shader, but a uniform interface name matching a varying
# interface name is possible without a geometry shader, and that is what
# we test here.
[require]
GLSL >= 1.50
[vertex shader]
in vec4 piglit_vertex;
uniform block {
uniform vec4 color;
} ucolor;
out block {
vec4 color;
} vcolor;
void main()
{
gl_Position = piglit_vertex;
vcolor.color = ucolor.color;
}
[fragment shader]
in block {
vec4 color;
} vcolor;
void main()
{
gl_FragColor = vcolor.color;
}
[test]
uniform vec4 block.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 block.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
|