Mesa (master): r100: Don't assume that the base mipmap of a texture exists

Ian Romanick idr at kemper.freedesktop.org
Thu Jun 1 04:32:22 UTC 2017


Module: Mesa
Branch: master
Commit: 2dcec62075d8da8b7d8741df75b09907e1eea460
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2dcec62075d8da8b7d8741df75b09907e1eea460

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Wed May 24 16:36:28 2017 -0700

r100: Don't assume that the base mipmap of a texture exists

Fixes crashes in piglit's gl-1.2-texture-base-level.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Cc: mesa-stable at lists.freedesktop.org
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/drivers/dri/radeon/radeon_texstate.c | 14 ++++++++++----
 1 file changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/mesa/drivers/dri/radeon/radeon_texstate.c b/src/mesa/drivers/dri/radeon/radeon_texstate.c
index 35b1538d9e..5cabba1227 100644
--- a/src/mesa/drivers/dri/radeon/radeon_texstate.c
+++ b/src/mesa/drivers/dri/radeon/radeon_texstate.c
@@ -199,6 +199,12 @@ do {							\
  * Texture unit state management
  */
 
+static GLenum
+texture_base_format(const struct gl_texture_object *t)
+{
+	return t->Image[0][t->BaseLevel]->_BaseFormat;
+}
+
 static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit )
 {
    r100ContextPtr rmesa = R100_CONTEXT(ctx);
@@ -251,7 +257,7 @@ static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit )
 	 assert(op <= 3);
 	 switch ( srcRGBi ) {
 	 case GL_TEXTURE:
-	    if (texUnit->_Current->Image[0][0]->_BaseFormat == GL_ALPHA)
+	    if (texture_base_format(texUnit->_Current) == GL_ALPHA)
 	       color_arg[i] = radeon_zero_color[op];
 	    else
 	       color_arg[i] = radeon_texture_color[op][unit];
@@ -275,7 +281,7 @@ static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit )
 	 case GL_TEXTURE1:
 	 case GL_TEXTURE2: {
 	    GLuint txunit = srcRGBi - GL_TEXTURE0;
-	    if (ctx->Texture.Unit[txunit]._Current->Image[0][0]->_BaseFormat == GL_ALPHA)
+	    if (texture_base_format(ctx->Texture.Unit[txunit]._Current) == GL_ALPHA)
 	       color_arg[i] = radeon_zero_color[op];
 	    else
 	 /* implement ogl 1.4/1.5 core spec here, not specification of
@@ -296,7 +302,7 @@ static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit )
 	 assert(op <= 1);
 	 switch ( srcAi ) {
 	 case GL_TEXTURE:
-	    if (texUnit->_Current->Image[0][0]->_BaseFormat == GL_LUMINANCE)
+	    if (texture_base_format(texUnit->_Current) == GL_LUMINANCE)
 	       alpha_arg[i] = radeon_zero_alpha[op+1];
 	    else
 	       alpha_arg[i] = radeon_texture_alpha[op][unit];
@@ -320,7 +326,7 @@ static GLboolean radeonUpdateTextureEnv( struct gl_context *ctx, int unit )
 	 case GL_TEXTURE1:
 	 case GL_TEXTURE2: {    
 	    GLuint txunit = srcAi - GL_TEXTURE0;
-	    if (ctx->Texture.Unit[txunit]._Current->Image[0][0]->_BaseFormat == GL_LUMINANCE)
+	    if (texture_base_format(ctx->Texture.Unit[txunit]._Current) == GL_LUMINANCE)
 	       alpha_arg[i] = radeon_zero_alpha[op+1];
 	    else
 	       alpha_arg[i] = radeon_texture_alpha[op][txunit];




More information about the mesa-commit mailing list