[Piglit] [PATCH] copyteximage: Don't use fixed-function for array textures
Anuj Phogat
anuj.phogat at gmail.com
Wed Dec 18 11:03:59 PST 2013
On Wed, Nov 27, 2013 at 1:36 PM, Ian Romanick <idr at freedesktop.org> wrote:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> GL_EXT_texture_array does not add support for array textures with fixed
> function. The only reason this ever worked with Mesa is because Mesa
> also supported GL_MESA_texture_array... which does add support for array
> textures with fixed function.
>
> For the GL_TEXTURE_1D_ARRAY and GL_TEXTURE_2D_ARRAY cases, the test now
> uses a fragment shader that interacts with fixed-function vertex
> processing.
>
> I can't see how the GL_TEXTURE_1D_ARRAY or GL_TEXTURE_2D_ARRAY cases
> could have ever worked on any implementation other than Mesa. There are
> currently patches on the mesa-dev list that remove support for
> GL_MESA_texture_array, and these patches cause the unpatched version of
> this test to fail.
>
> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> tests/texturing/copyteximage.c | 46 +++++++++++++++++++++++++++++++++++++++---
> 1 file changed, 43 insertions(+), 3 deletions(-)
>
> diff --git a/tests/texturing/copyteximage.c b/tests/texturing/copyteximage.c
> index 8cd6d7e..0afcba5 100644
> --- a/tests/texturing/copyteximage.c
> +++ b/tests/texturing/copyteximage.c
> @@ -120,6 +120,25 @@ PIGLIT_GL_TEST_CONFIG_BEGIN
>
> PIGLIT_GL_TEST_CONFIG_END
>
> +static const char array1D_shader_text[] =
> + "#extension GL_EXT_texture_array: require\n"
> + "uniform sampler1DArray s;\n"
> + "void main()\n"
> + "{\n"
> + " gl_FragColor = texture1DArray(s, gl_TexCoord[0].xy);\n"
> + "}\n"
> + ;
> +
> +static const char array2D_shader_text[] =
> + "#extension GL_EXT_texture_array: require\n"
> + "uniform sampler2DArray s;\n"
> + "void main()\n"
> + "{\n"
> + " gl_FragColor = texture2DArray(s, gl_TexCoord[0].xyz);\n"
> + "}\n"
> + ;
> +
> +
> static GLboolean
> is_compressed_format(GLenum format)
> {
> @@ -188,6 +207,14 @@ supported_target_format(GLenum target, GLenum format)
> static bool
> supported_target(unsigned i)
> {
> + /* Array targets are only supported if GLSL is available.
> + */
> + if ((target[i].target == GL_TEXTURE_1D_ARRAY
> + || target[i].target == GL_TEXTURE_2D_ARRAY)
> + && (piglit_get_gl_version() < 20
> + && !piglit_is_extension_supported("GL_ARB_fragment_shader")))
> + return false;
> +
> return piglit_get_gl_version() >= target[i].gl_version ||
> (target[i].extension &&
> piglit_is_extension_supported(target[i].extension));
> @@ -364,6 +391,7 @@ test_target_and_format(GLint x, GLint y, GLenum target, GLenum format,
> {
> GLboolean pass = GL_TRUE;
> GLuint k;
> + GLuint prog = 0;
>
> printf("Texture target = %s, Internal format = %s",
> piglit_get_gl_enum_name(target),
> @@ -474,7 +502,9 @@ test_target_and_format(GLint x, GLint y, GLenum target, GLenum format,
>
> pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
>
> - glEnable(target);
> + prog = piglit_build_simple_program(NULL, array1D_shader_text);
> + glUseProgram(prog);
> + glDeleteProgram(prog);
>
> for (k = 0; k < 16; k++) {
> piglit_draw_rect_tex(x, y, IMAGE_SIZE, IMAGE_SIZE,
> @@ -496,7 +526,9 @@ test_target_and_format(GLint x, GLint y, GLenum target, GLenum format,
>
> pass = piglit_check_gl_error(GL_NO_ERROR) && pass;
>
> - glEnable(target);
> + prog = piglit_build_simple_program(NULL, array2D_shader_text);
> + glUseProgram(prog);
> + glDeleteProgram(prog);
>
> for (k = 0; k < 4; k++) {
> draw_rect_tex_3d(x, y, IMAGE_SIZE, IMAGE_SIZE,
> @@ -522,7 +554,15 @@ test_target_and_format(GLint x, GLint y, GLenum target, GLenum format,
> break;
> }
>
> - glDisable(target);
> + /* If a GLSL program is in use, then the preceeding code should not
> + * have called glEnable(target). In that case, this code should not
> + * disable it. For some targets, like GL_TEXTURE_1D_ARRAY,
> + * glDisable(target) will generate an error.
> + */
> + if (prog == 0)
> + glDisable(target);
> + else
> + glUseProgram(0);
>
> return pass;
> }
> --
> 1.8.1.4
>
> _______________________________________________
> Piglit mailing list
> Piglit at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/piglit
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
More information about the Piglit
mailing list