The calculation of color_index isn't correct as sent -- inside the view range it should be i + NUM_LEVELS - VIEW_MIN_LEVEL.
Similar fix applies to the layers test. On Sun, Jan 19, 2014 at 4:32 PM, Chris Forbes <[email protected]> wrote: > Tests that the correct levels are overwritten when uploading texture > data through a view with a nonzero MinLevel. > > Signed-off-by: Chris Forbes <[email protected]> > --- > tests/all.py | 1 + > tests/spec/arb_texture_view/CMakeLists.gl.txt | 1 + > tests/spec/arb_texture_view/texsubimage-levels.c | 129 > +++++++++++++++++++++++ > 3 files changed, 131 insertions(+) > create mode 100644 tests/spec/arb_texture_view/texsubimage-levels.c > > diff --git a/tests/all.py b/tests/all.py > index 6ed30eb..01bd289 100644 > --- a/tests/all.py > +++ b/tests/all.py > @@ -1943,6 +1943,7 @@ arb_texture_view['rendering-target'] = > concurrent_test('arb_texture_view-renderi > arb_texture_view['rendering-levels'] = > concurrent_test('arb_texture_view-rendering-levels') > arb_texture_view['lifetime-format'] = > concurrent_test('arb_texture_view-lifetime-format') > arb_texture_view['getteximage-srgb'] = > concurrent_test('arb_texture_view-getteximage-srgb') > +arb_texture_view['texsubimage-levels'] = > concurrent_test('arb_texture_view-texsubimage-levels') > > tdfx_texture_compression_fxt1 = Group() > spec['3DFX_texture_compression_FXT1'] = tdfx_texture_compression_fxt1 > diff --git a/tests/spec/arb_texture_view/CMakeLists.gl.txt > b/tests/spec/arb_texture_view/CMakeLists.gl.txt > index cad7500..bfa9460 100644 > --- a/tests/spec/arb_texture_view/CMakeLists.gl.txt > +++ b/tests/spec/arb_texture_view/CMakeLists.gl.txt > @@ -18,5 +18,6 @@ piglit_add_executable(arb_texture_view-queries queries.c) > piglit_add_executable(arb_texture_view-rendering-target rendering_target.c > common.c) > piglit_add_executable(arb_texture_view-rendering-levels rendering_levels.c > common.c) > piglit_add_executable(arb_texture_view-lifetime-format lifetime_format.c > common.c) > +piglit_add_executable(arb_texture_view-texsubimage-levels > texsubimage-levels.c common.c) > > # vim: ft=cmake: > diff --git a/tests/spec/arb_texture_view/texsubimage-levels.c > b/tests/spec/arb_texture_view/texsubimage-levels.c > new file mode 100644 > index 0000000..69787f9 > --- /dev/null > +++ b/tests/spec/arb_texture_view/texsubimage-levels.c > @@ -0,0 +1,129 @@ > +/* > + * Copyright © 2014 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. > + * > + * Author: Chris Forbes <[email protected]> > + */ > + > +/** > + * \file > + * This tests that TexSubImage* into a view behaves correctly when the view > + * has a nonzero MinLevel. > + * > + */ > + > +#include "piglit-util-gl-common.h" > +#include "common.h" > + > +PIGLIT_GL_TEST_CONFIG_BEGIN > + > + config.supports_gl_compat_version = 15; > + config.window_visual = PIGLIT_GL_VISUAL_RGBA | > PIGLIT_GL_VISUAL_DOUBLE; > + > +PIGLIT_GL_TEST_CONFIG_END > + > +enum piglit_result > +piglit_display(void) > +{ > + return PIGLIT_FAIL; > +} > + > +#define NUM_LEVELS 7 > +#define VIEW_MIN_LEVEL 2 > +#define VIEW_NUM_LEVELS 3 > +#define TEX_SIZE 64 > + > +void > +piglit_init(int argc, char **argv) > +{ > + GLuint tex, view; > + int i, j; > + bool pass = true; > + > + piglit_require_extension("GL_ARB_texture_storage"); > + piglit_require_extension("GL_ARB_texture_view"); > + > + /* build a texture with full miptree */ > + glGenTextures(1, &tex); > + glBindTexture(GL_TEXTURE_2D, tex); > + glTexStorage2D(GL_TEXTURE_2D, NUM_LEVELS, > + GL_RGBA8, > + TEX_SIZE, > + TEX_SIZE); > + > + for (i=0; i < NUM_LEVELS; i++) { > + int dim = TEX_SIZE >> i; > + GLubyte *pixels = create_solid_image(dim, dim, > + 1, 4, i); > + glTexSubImage2D(GL_TEXTURE_2D, > + i, 0, 0, dim, dim, > + GL_RGBA, GL_UNSIGNED_BYTE, pixels); > + free(pixels); > + } > + > + /* create a view to a subset of the layers */ > + glGenTextures(1, &view); > + glTextureView(view, GL_TEXTURE_2D, tex, GL_RGBA8, > + VIEW_MIN_LEVEL, VIEW_NUM_LEVELS, > + 0, 1); > + > + if (!piglit_check_gl_error(GL_NO_ERROR)) > + piglit_report_result(PIGLIT_FAIL); > + > + /* upload through the view */ > + glBindTexture(GL_TEXTURE_2D, view); > + for (i = 0; i < VIEW_NUM_LEVELS; i++) { > + int dim = TEX_SIZE >> (VIEW_MIN_LEVEL + i); > + GLubyte *pixels = create_solid_image(dim, dim, > + 1, 4, i + NUM_LEVELS); > + glTexSubImage2D(GL_TEXTURE_2D, > + i, 0, 0, dim, dim, > + GL_RGBA, GL_UNSIGNED_BYTE, pixels); > + free(pixels); > + } > + > + if (!piglit_check_gl_error(GL_NO_ERROR)) > + piglit_report_result(PIGLIT_FAIL); > + > + /* bind the underlying texture and readback */ > + glBindTexture(GL_TEXTURE_2D, tex); > + for (i = 0; i < NUM_LEVELS; i++) { > + /* the levels inside the view should have been replaced. > + * everything else should be untouched. > + */ > + > + int color_index = (i < VIEW_MIN_LEVEL || > + i >= VIEW_MIN_LEVEL + VIEW_NUM_LEVELS) ? i : i + > NUM_LEVELS; > + float expected_color[4]; > + int dim = TEX_SIZE >> i; > + > + printf("Testing level %d\n", i); > + > + for (j = 0; j < 4; j++) > + expected_color[j] = Colors[color_index][j] / 255.0f; > + > + pass = piglit_probe_texel_rect_rgba(GL_TEXTURE_2D, > + i, 0, 0, dim, dim, > + expected_color) && pass; > + } > + > + piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); > +} > -- > 1.8.5.3 > _______________________________________________ Piglit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/piglit
