From 2dcec62075d8da8b7d8741df75b09907e1eea460 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Wed, 24 May 2017 16:36:28 -0700 Subject: [PATCH] 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 Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Kenneth Graunke --- 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 35b1538d9e1..5cabba1227f 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]; -- 2.30.2