On Mon, 2015-10-12 at 15:42 +0300, Tapani Pälli wrote: > v2: review feedback from Iago Toral and Ian Romanick > > Signed-off-by: Tapani Pälli <[email protected]> > --- > tests/all.py | 5 + > tests/spec/gles-3.0/CMakeLists.gles3.txt | 1 + > tests/spec/gles-3.0/read-depth.c | 163 > +++++++++++++++++++++++++++++++ > 3 files changed, 169 insertions(+) > create mode 100644 tests/spec/gles-3.0/read-depth.c > > diff --git a/tests/all.py b/tests/all.py > index 4531b01..610d89f 100644 > --- a/tests/all.py > +++ b/tests/all.py > @@ -4180,6 +4180,11 @@ with profile.group_manager( > g(['khr_compressed_astc-miptree_gles2'], 'miptree-gles') > > with profile.group_manager( > + PiglitGLTest, > + grouptools.join('spec', 'nv_read_depth')) as g: > + g(['read_depth_gles3']) > + > +with profile.group_manager( > PiglitGLTest, > grouptools.join('spec', 'oes_compressed_paletted_texture')) > as g: > g(['oes_compressed_paletted_texture-api'], 'basic API') > diff --git a/tests/spec/gles-3.0/CMakeLists.gles3.txt > b/tests/spec/gles-3.0/CMakeLists.gles3.txt > index d56a43e..864c862 100644 > --- a/tests/spec/gles-3.0/CMakeLists.gles3.txt > +++ b/tests/spec/gles-3.0/CMakeLists.gles3.txt > @@ -6,5 +6,6 @@ piglit_add_executable (gles-3.0-drawarrays-vertexid > drawarrays-vertexid.c) > piglit_add_executable(minmax_${piglit_target_api} minmax.c) > piglit_add_executable(oes_compressed_etc2_texture-miptree_gles3 > oes_compressed_etc2_texture-miptree.c) > piglit_add_executable(texture-immutable-levels_gles3 texture > -immutable-levels.c) > +piglit_add_executable(read_depth_gles3 read-depth.c) > > # vim: ft=cmake: > diff --git a/tests/spec/gles-3.0/read-depth.c b/tests/spec/gles > -3.0/read-depth.c > new file mode 100644 > index 0000000..1dd33e4 > --- /dev/null > +++ b/tests/spec/gles-3.0/read-depth.c > @@ -0,0 +1,163 @@ > +/* > + * Copyright © 2015 Intel Corporation > + * > + * Permission is hereby granted, free of charge, to any person > obtaining a > + * copy of this software and associated documentation files (the > "Software"), > + * to deal in the Software without restriction, including without > limitation > + * the rights to use, copy, modify, merge, publish, distribute, > sublicense, > + * and/or sell copies of the Software, and to permit persons to whom > the > + * Software is furnished to do so, subject to the following > conditions: > + * > + * The above copyright notice and this permission notice (including > the next > + * paragraph) shall be included in all copies or substantial > portions of the > + * Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, > EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF > MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO > EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES > OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, > ARISING > + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR > OTHER DEALINGS > + * IN THE SOFTWARE. > + */ > + > +/** @file read-depth.c > + * > + * Tests NV_read_depth implementation > + * > + * Test iterates over table of depth buffer formats and expected > types to > + * read values back from each format. For each format it renders a > rectangle at > + * different depth levels, reads back a pixel and verifies expected > depth value. > + */ > + > +#include "piglit-util-gl.h" > + > +PIGLIT_GL_TEST_CONFIG_BEGIN > + > + config.supports_gl_es_version = 30; > + config.window_visual = PIGLIT_GL_VISUAL_DEPTH; > + > +PIGLIT_GL_TEST_CONFIG_END > + > +static GLint prog; > + > +const char *vs_source = > + "attribute vec4 vertex;\n" > + "uniform float depth;\n" > + "void main()\n" > + "{\n" > + " gl_Position = vec4(vertex.xy, depth, 1.0);\n" > + "}\n"; > + > +const char *fs_source = > + "void main()\n" > + "{\n" > + " gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);\n" > + "}\n"; > + > +const GLenum tests[] = { > + GL_DEPTH_COMPONENT16, GL_UNSIGNED_INT_24_8_OES, > + GL_DEPTH_COMPONENT24, GL_UNSIGNED_INT_24_8_OES, > + GL_DEPTH_COMPONENT32F, GL_FLOAT, > +}; > + > +static bool > +equals(float a, float b) > +{ > + return fabs(a - b) < 0.00001; > +} > + > +static GLuint > +create_depth_fbo(GLenum depth_type) > +{ > + GLuint fbo, buffer; > + GLenum status; > + > + glGenRenderbuffers(1, &buffer); > + glBindRenderbuffer(GL_RENDERBUFFER, buffer); > + glRenderbufferStorage(GL_RENDERBUFFER, depth_type, > + piglit_width, piglit_height); > + > + glGenFramebuffers(1, &fbo); > + glBindFramebuffer(GL_FRAMEBUFFER, fbo); > + > + glFramebufferRenderbuffer(GL_FRAMEBUFFER, > GL_DEPTH_ATTACHMENT, > + GL_RENDERBUFFER, buffer); > + > + status = glCheckFramebufferStatus(GL_FRAMEBUFFER); > + if (status != GL_FRAMEBUFFER_COMPLETE) { > + fprintf(stderr, "error creating framebuffer, status > 0x%x\n", > + status); > + return 0; > + } > + return fbo; > +} > + > +static bool > +read_depth(GLenum type, float expect) > +{ > + GLfloat data; > + GLuint uint_pixel; > + if (type == GL_FLOAT) { > + glReadPixels(0, 0, 1, 1, GL_DEPTH_COMPONENT, type, > + (void *) &data); > + } else { > + glReadPixels(0, 0, 1, 1, GL_DEPTH_COMPONENT, type, > + (void *) &uint_pixel); > + uint_pixel = uint_pixel >> 8; > + data = (1.0 * ((float) uint_pixel)) / 16777215.0; > + } > + > + if (!piglit_check_gl_error(GL_NO_ERROR)) > + return false; > + > + if (!equals(data, expect)) { > + fprintf(stderr, "expected %f, got %f\n", expect, > data); > + return false; > + } > + return true; > +} > + > +enum piglit_result > +piglit_display(void) > +{ > + const float step = 0.1; > + > + glEnable(GL_DEPTH_TEST); > + > + /* Loop through formats listed in 'tests'. */ > + for (unsigned j = 0; j < ARRAY_SIZE(tests); j += 2) {
for loop breaks build.
read-depth.c:130:2: error: ‘for’ loop initial declarations are only
allowed in C99 or C11 mode
for (unsigned j = 0; j < ARRAY_SIZE(tests); j += 2) {
gcc (Gentoo 4.9.3 p1.0, pie-0.6.2) 4.9.3
> +
> + float expect = 0.0;
> +
> + GLuint fbo = create_depth_fbo(tests[j]);
> + if (!fbo)
> + return PIGLIT_FAIL;
> +
> + /* Step from -1.0 to 1.0, linear depth. Render a
> rectangle at depth i,
> + * read pixel and verify expected depth value.
> + */
> + for (float i = -1.0; !equals(i, 1.0 + step); i +=
> step) {
same as above
read-depth.c:141:3: error: ‘for’ loop initial declarations are only
allowed in C99 or C11 mode
for (float i = -1.0; !equals(i, 1.0 + step); i += step) {
Jan
> +
> + glClear(GL_DEPTH_BUFFER_BIT);
> + glUniform1f(glGetUniformLocation(prog,
> "depth"), i);
> +
> + piglit_draw_rect(-1, -1, 2, 2);
> +
> + if (!(read_depth(tests[j + 1], expect)))
> + return PIGLIT_FAIL;
> +
> + expect += step / 2.0;
> + }
> + glDeleteFramebuffers(1, &fbo);
> + }
> + return PIGLIT_PASS;
> +}
> +
> +void
> +piglit_init(int argc, char **argv)
> +{
> + piglit_require_extension("GL_NV_read_depth");
> + prog = piglit_build_simple_program(vs_source, fs_source);
> + glUseProgram(prog);
> +}
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
