From 079bff5a99fa19029fc0caba92fe57046ee29b23 Mon Sep 17 00:00:00 2001 From: Anuj Phogat Date: Mon, 3 Mar 2014 14:40:14 -0800 Subject: [PATCH] mesa: Allow GL_DEPTH_COMPONENT and GL_DEPTH_STENCIL combinations in glTexImage{123}D() From OpenGL 3.3 spec, page 141: "Textures with a base internal format of DEPTH_COMPONENT or DEPTH_STENCIL require either depth component data or depth/stencil component data. Textures with other base internal formats require RGBA component data. The error INVALID_OPERATION is generated if one of the base internal format and format is DEPTH_COMPONENT or DEPTH_STENCIL, and the other is neither of these values." Fixes Khronos OpenGL CTS test failure: proxy_textures_invalid_size Cc: Signed-off-by: Anuj Phogat Reviewed-by: Brian Paul --- src/mesa/main/teximage.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 1cd6ade..1192b45 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -2039,6 +2039,8 @@ texture_error_check( struct gl_context *ctx, GLint depth, GLint border ) { GLboolean colorFormat; + GLboolean is_format_depth_or_depthstencil; + GLboolean is_internalFormat_depth_or_depthstencil; GLenum err; /* Even though there are no color-index textures, we still have to support @@ -2129,11 +2131,18 @@ texture_error_check( struct gl_context *ctx, } /* make sure internal format and format basically agree */ + is_internalFormat_depth_or_depthstencil = + _mesa_is_depth_format(internalFormat) || + _mesa_is_depthstencil_format(internalFormat); + + is_format_depth_or_depthstencil = + _mesa_is_depth_format(format) || + _mesa_is_depthstencil_format(format); + colorFormat = _mesa_is_color_format(format); if ((_mesa_is_color_format(internalFormat) && !colorFormat && !indexFormat) || - (_mesa_is_depth_format(internalFormat) != _mesa_is_depth_format(format)) || + (is_internalFormat_depth_or_depthstencil != is_format_depth_or_depthstencil) || (_mesa_is_ycbcr_format(internalFormat) != _mesa_is_ycbcr_format(format)) || - (_mesa_is_depthstencil_format(internalFormat) != _mesa_is_depthstencil_format(format)) || (_mesa_is_dudv_format(internalFormat) != _mesa_is_dudv_format(format))) { _mesa_error(ctx, GL_INVALID_OPERATION, "glTexImage%dD(incompatible internalFormat = %s, format = %s)", -- 2.7.4