On 31 May 2013 15:56, Fabian Bieler <fabianbie...@fastmail.fm> wrote:
> Test that gl_VerticesIn can be used as a valid constant expression. > > Also test that it evaluates to 3 for triangles. > Ok, I've finished reviewing the series at last! Thanks for your patience. I sent responses on patches 1-8, 10, 12, 13, and 15-17. Patches 9, 11, 14, and 18 are: Reviewed-by: Paul Berry <stereotype...@gmail.com> Thanks again for your hard work on this patch series. I hope my review comments aren't too onerous. In general the series looks really good, and I'm looking forward to merging it upstream! > > --- > .../compiler/verticesin-const-expression.geom | 31 ++++++++ > .../compiler/verticesin-const.geom | 31 ++++++++ > .../linker/verticesin-const.shader_test | 91 > ++++++++++++++++++++++ > 3 files changed, 153 insertions(+) > create mode 100644 > tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom > create mode 100644 > tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom > create mode 100644 > tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test > > diff --git > a/tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom > b/tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom > new file mode 100644 > index 0000000..f4b77f7 > --- /dev/null > +++ > b/tests/spec/arb_geometry_shader4/compiler/verticesin-const-expression.geom > @@ -0,0 +1,31 @@ > +// [config] > +// expect_result: pass > +// glsl_version: 1.30 > +// require_extensions: GL_ARB_geometry_shader4 > +// [end config] > + > +#version 130 > +#extension GL_ARB_geometry_shader4: enable > + > +uniform int idx; > +uniform sampler2D tex; > +uniform sampler2D tex_array[10]; > + > +void main() > +{ > + //All quotes are from the glsl 1.3 specification. > + > + //"Samplers aggregated into arrays within a shader [...] can only > be indexed with integral constant expressions" > + texture(tex_array[gl_VerticesIn * 2 - 2], vec2(0, 0)); > + > + //"When an array size is specified in a declaration, it must be an > integral constant expression" > + float array[gl_VerticesIn * 2 - 2]; > + array[idx]; > + > + //"Initializers for const declarations must be constant expression" > + const int var = gl_VerticesIn * 2 - 2; > + > + //"The offset value must be a constant expression." > + textureOffset(tex, vec2(0, 0), ivec2(gl_VerticesIn * 2 - 2)); > +} > + > diff --git > a/tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom > b/tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom > new file mode 100644 > index 0000000..f7aec2a > --- /dev/null > +++ b/tests/spec/arb_geometry_shader4/compiler/verticesin-const.geom > @@ -0,0 +1,31 @@ > +// [config] > +// expect_result: pass > +// glsl_version: 1.30 > +// require_extensions: GL_ARB_geometry_shader4 > +// [end config] > + > +#version 130 > +#extension GL_ARB_geometry_shader4: enable > + > +uniform int idx; > +uniform sampler2D tex; > +uniform sampler2D tex_array[7]; > + > +void main() > +{ > + //All quotes are from the glsl 1.3 specification. > + > + //"Samplers aggregated into arrays within a shader [...] can only > be indexed with integral constant expressions" > + texture(tex_array[gl_VerticesIn], vec2(0, 0)); > + > + //"When an array size is specified in a declaration, it must be an > integral constant expression" > + float array[gl_VerticesIn]; > + array[idx]; > + > + //"Initializers for const declarations must be constant expression" > + const int var = gl_VerticesIn; > + > + //"The offset value must be a constant expression." > + textureOffset(tex, vec2(0, 0), ivec2(gl_VerticesIn)); > +} > + > diff --git > a/tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test > b/tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test > new file mode 100644 > index 0000000..5f697ee > --- /dev/null > +++ b/tests/spec/arb_geometry_shader4/linker/verticesin-const.shader_test > @@ -0,0 +1,91 @@ > +[require] > +GL >= 2.0 > +GLSL >= 1.30 > +GL_ARB_geometry_shader4 > + > +[vertex shader] > +#version 130 > + > +in vec4 vertex; > + > +out float gs_input[6]; > +void main() > +{ > + for (int i = 0; i < 6; i++) > + gs_input[i] = 0.5; > + gl_Position = vertex; > +} > + > +[geometry shader] > +#version 130 > +#extension GL_ARB_geometry_shader4: enable > +#line 22 > + > +uniform int zero; > +uniform sampler2D tex; > +uniform sampler2D tex_array[7]; > + > +in float gs_input[][6]; > + > +out vec4 color; > + > +void main() > +{ > + for (int i = 0; i < gl_VerticesIn; i++) { > + vec4 c = vec4(0, 0, 0, 1); > + c.x = texture(tex_array[gl_VerticesIn], vec2(0.5, 0.5)).x; > + > + const int three = gl_VerticesIn; > + if (three == 3) > + c.y = 1.0; > + else > + c.y = 0.0; > + > + //We sample from a row of 8 pixels, the left 4 blue and > the right 4 white. > + //Since we only use the red channel, the left 4 are 0, and > the right 4 are 1. > + //sample twice from the fith pixel in the row: > + c.z = textureOffset(tex, vec2(3.0/16.0, 0.75), > ivec2(gl_VerticesIn, 0)).x; > + c.z *= textureOffset(tex, vec2(15.0/16.0, 0.75), > ivec2(gl_VerticesIn, 0)).x; > + > + gl_Position = gl_PositionIn[i]; > + color = c; > + EmitVertex(); > + } > +} > + > +[geometry layout] > +input type GL_TRIANGLES > +output type GL_TRIANGLE_STRIP > +vertices out 3 > + > +[fragment shader] > +#version 130 > + > +in vec4 color; > + > +void main() > +{ > + gl_FragColor = color; > +} > + > +[vertex data] > +vertex/float/2 > +-1.0 -1.0 > + 1.0 -1.0 > + 1.0 1.0 > +-1.0 1.0 > + > +[test] > +uniform int tex_array[0] 1 > +uniform int tex_array[1] 1 > +uniform int tex_array[2] 1 > +uniform int tex_array[3] 2 > +uniform int tex_array[4] 1 > +uniform int tex_array[5] 1 > +uniform int tex_array[6] 1 > +uniform int tex 0 > +texture rgbw 0 (8, 8) > +texture checkerboard 1 0 (8, 8) (0.0, 0.0, 0.0, 0.0) (0.0, 0.0, 0.0, 0.0) > +texture checkerboard 2 0 (8, 8) (1.0, 1.0, 1.0, 1.0) (1.0, 1.0, 1.0, 1.0) > +draw arrays GL_TRIANGLE_FAN 0 4 > +probe all rgb 1.0 1.0 1.0 > -- > 1.8.1.2 > > _______________________________________________ > Piglit mailing list > Piglit@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/piglit >
_______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit