On 01/21/2016 10:44 AM, Neil Roberts wrote: > This creates a cubemap where one of the faces either has a different > size or a different format from the other faces and then checks that > it is incomplete by rendering with it and veryifying that the sampler verifying
A couple of minor nits below. With or without them changed, this patch is Reviewed-by: Ian Romanick <ian.d.roman...@intel.com> > returns solid black. > > The format test currently fails on Mesa. > --- > tests/all.py | 2 + > tests/texturing/CMakeLists.gl.txt | 1 + > tests/texturing/incomplete-cubemap.c | 191 > +++++++++++++++++++++++++++++++++++ > 3 files changed, 194 insertions(+) > create mode 100644 tests/texturing/incomplete-cubemap.c > > diff --git a/tests/all.py b/tests/all.py > index f57d205..29c58ac 100644 > --- a/tests/all.py > +++ b/tests/all.py > @@ -1132,6 +1132,8 @@ with profile.group_manager( > g(['max-samplers']) > g(['max-samplers', 'border']) > g(['gl-2.0-active-sampler-conflict']) > + g(['incomplete-cubemap', 'size'], 'incomplete-cubemap-size') > + g(['incomplete-cubemap', 'format'], 'incomplete-cubemap-format') > > with profile.group_manager( > PiglitGLTest, > diff --git a/tests/texturing/CMakeLists.gl.txt > b/tests/texturing/CMakeLists.gl.txt > index 704ea6d..c344cdf 100644 > --- a/tests/texturing/CMakeLists.gl.txt > +++ b/tests/texturing/CMakeLists.gl.txt > @@ -36,6 +36,7 @@ piglit_add_executable (getteximage-luminance > getteximage-luminance.c) > piglit_add_executable (getteximage-targets getteximage-targets.c) > piglit_add_executable (getteximage-depth getteximage-depth.c) > piglit_add_executable (incomplete-texture incomplete-texture.c) > +piglit_add_executable (incomplete-cubemap incomplete-cubemap.c) > piglit_add_executable (generatemipmap-cubemap generatemipmap-cubemap.c) > piglit_add_executable (fragment-and-vertex-texturing > fragment-and-vertex-texturing.c) > piglit_add_executable (levelclamp levelclamp.c) > diff --git a/tests/texturing/incomplete-cubemap.c > b/tests/texturing/incomplete-cubemap.c > new file mode 100644 > index 0000000..99f6e9a > --- /dev/null > +++ b/tests/texturing/incomplete-cubemap.c > @@ -0,0 +1,191 @@ > +/* > + * Copyright © 2016 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. > + */ > + > +/** > + * Tests that a cube map texture which doesn't have the same size or > + * format for all of the faces isn't considered complete. > + */ > + > +#include "piglit-util-gl.h" > + > +PIGLIT_GL_TEST_CONFIG_BEGIN > + > + config.supports_gl_compat_version = 20; > + config.supports_gl_core_version = 31; > + > + config.window_visual = PIGLIT_GL_VISUAL_RGBA | PIGLIT_GL_VISUAL_DOUBLE; > + > +PIGLIT_GL_TEST_CONFIG_END > + > +static const GLenum > +faces[6] = { > + GL_TEXTURE_CUBE_MAP_POSITIVE_X, > + GL_TEXTURE_CUBE_MAP_NEGATIVE_X, > + GL_TEXTURE_CUBE_MAP_POSITIVE_Y, > + GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, > + GL_TEXTURE_CUBE_MAP_POSITIVE_Z, > + GL_TEXTURE_CUBE_MAP_NEGATIVE_Z > +}; > + > +enum test_attribute { > + TEST_ATTRIBUTE_SIZE, > + TEST_ATTRIBUTE_FORMAT > +}; > + > +static enum test_attribute > +test_attribute; > + > +/* Incomplete textures return 0,0,0,1 when sampled in GLSL */ > +static const float > +expected_color[] = { > + 0.0f, 0.0f, 0.0f, 1.0f > +}; > + > +static const char > +vertex_source[] = > + "attribute vec2 piglit_vertex;\n" > + "\n" > + "void\n" > + "main()\n" > + "{\n" > + " gl_Position = vec4(piglit_vertex, 0.0, 1.0);\n" > + "}\n"; > + > +static const char > +fragment_source[] = > + "uniform samplerCube tex;\n" > + "\n" > + "void\n" > + "main()\n" > + "{\n" > + " gl_FragColor = textureCube(tex, vec3(0.0));\n" > + "}\n"; > + > +static void > +make_image(GLenum target, > + int size, > + GLenum internal_format) > +{ > + GLubyte *data = malloc(size * size * 4), *p = data; > + int i; > + > + for (i = 0; i < size * size; i++) { > + /* Red texture because it should be incomplete so if > + * it is displayed then it is a failure. > + */ > + *(p++) = 0xff; > + *(p++) = 0x00; > + *(p++) = 0x00; > + *(p++) = 0xff; > + } > + > + glTexImage2D(target, > + 0, /* level */ > + internal_format, > + size, size, > + 0, /* border */ > + GL_RGBA, > + GL_UNSIGNED_BYTE, > + data); > + > + free(data); > +} > + > +enum piglit_result > +piglit_display(void) > +{ > + GLuint tex; > + int face; > + GLenum internal_format; > + int size; > + bool pass; > + > + glGenTextures(1, &tex); > + glBindTexture(GL_TEXTURE_CUBE_MAP, tex); > + > + for (face = 0; face < ARRAY_SIZE (faces); face++) { ^ Spurious space Also... Since it works with Visual Studio, at least some people have started using the form for (unsigned face = 0; face < ARRAY_SIZE(faces); face++) { > + internal_format = GL_RGBA; > + size = 4; > + > + if (face == 3) { > + switch (test_attribute) { > + case TEST_ATTRIBUTE_SIZE: > + size = 8; > + break; > + case TEST_ATTRIBUTE_FORMAT: > + internal_format = GL_RGB; > + break; > + } > + } > + > + make_image(faces[face], size, internal_format); > + } > + > + glTexParameteri(GL_TEXTURE_CUBE_MAP, > + GL_TEXTURE_MIN_FILTER, > + GL_NEAREST); > + glTexParameteri(GL_TEXTURE_CUBE_MAP, > + GL_TEXTURE_MAG_FILTER, > + GL_NEAREST); > + > + piglit_draw_rect(-1, -1, 2, 2); > + > + glDeleteTextures(1, &tex); > + > + pass = piglit_probe_rect_rgba(0, 0, > + piglit_width, piglit_height, > + expected_color); > + > + piglit_present_results(); > + > + return pass ? PIGLIT_PASS : PIGLIT_FAIL; > +} > + > +static void > +show_usage(void) > +{ > + fprintf(stderr, "usage: incomplete-cubemap <size|format>\n"); > + piglit_report_result(PIGLIT_FAIL); > +} > + > +void > +piglit_init(int argc, char **argv) > +{ > + GLuint program; > + GLuint tex_location; > + > + if (argc != 2) > + show_usage(); > + > + if (!strcmp(argv[1], "size")) > + test_attribute = TEST_ATTRIBUTE_SIZE; > + else if (!strcmp(argv[1], "format")) > + test_attribute = TEST_ATTRIBUTE_FORMAT; > + else > + show_usage(); > + > + program = piglit_build_simple_program(vertex_source, fragment_source); > + glUseProgram(program); > + tex_location = glGetUniformLocation(program, "tex"); > + glUniform1i(tex_location, 0); Since the default value of all uniforms is 0, you can omit this. > +} > _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/piglit