diff options
author | Klaus Schnass <klaus.schnass@student.tuwien.ac.at> | 2010-02-26 15:39:17 -0500 |
---|---|---|
committer | Alex Deucher <alexdeucher@gmail.com> | 2010-02-26 15:39:17 -0500 |
commit | 2edb1b95346575eb260cfc329a973ab0e0a18796 (patch) | |
tree | c1852d076ec50b41504e74809de20f9ab07be824 | |
parent | 69334d6784e22b82a0449eab1645ae901c2c6842 (diff) |
r600: fail to validate unsupported texture formats
-rw-r--r-- | src/mesa/drivers/dri/r600/r600_texstate.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/mesa/drivers/dri/r600/r600_texstate.c b/src/mesa/drivers/dri/r600/r600_texstate.c index 8fdca0bab15..18810817ffc 100644 --- a/src/mesa/drivers/dri/r600/r600_texstate.c +++ b/src/mesa/drivers/dri/r600/r600_texstate.c @@ -374,17 +374,11 @@ static GLboolean r600GetTexFormat(struct gl_texture_object *tObj, gl_format mesa break; */ case MESA_FORMAT_RGB_DXT1: /* not supported yet */ - - break; case MESA_FORMAT_RGBA_DXT1: /* not supported yet */ - - break; case MESA_FORMAT_RGBA_DXT3: /* not supported yet */ - - break; case MESA_FORMAT_RGBA_DXT5: /* not supported yet */ + return GL_FALSE; - break; case MESA_FORMAT_RGBA_FLOAT32: SETfield(t->SQ_TEX_RESOURCE1, FMT_32_32_32_32_FLOAT, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_shift, SQ_TEX_RESOURCE_WORD1_0__DATA_FORMAT_mask); @@ -671,8 +665,8 @@ void r600SetDepthTexMode(struct gl_texture_object *tObj) t = radeon_tex_obj(tObj); - r600GetTexFormat(tObj, tObj->Image[0][tObj->BaseLevel]->TexFormat); - + if(!r600GetTexFormat(tObj, tObj->Image[0][tObj->BaseLevel]->TexFormat)) + t->validated = GL_FALSE; } /** @@ -681,7 +675,7 @@ void r600SetDepthTexMode(struct gl_texture_object *tObj) * \param rmesa Context pointer * \param t the r300 texture object */ -static void setup_hardware_state(context_t *rmesa, struct gl_texture_object *texObj) +static GLboolean setup_hardware_state(context_t *rmesa, struct gl_texture_object *texObj) { radeonTexObj *t = radeon_tex_obj(texObj); const struct gl_texture_image *firstImage; @@ -690,15 +684,15 @@ static void setup_hardware_state(context_t *rmesa, struct gl_texture_object *tex if (rmesa->radeon.radeonScreen->driScreen->dri2.enabled && t->image_override && t->bo) - return; + return GL_TRUE; firstImage = t->base.Image[0][t->minLod]; if (!t->image_override) { if (!r600GetTexFormat(texObj, firstImage->TexFormat)) { - radeon_error("unexpected texture format in %s\n", - __FUNCTION__); - return; + radeon_warning("unsupported texture format in %s\n", + __FUNCTION__); + return GL_FALSE; } } @@ -723,7 +717,7 @@ static void setup_hardware_state(context_t *rmesa, struct gl_texture_object *tex break; default: radeon_error("unexpected texture target type in %s\n", __FUNCTION__); - return; + return GL_FALSE; } row_align = rmesa->radeon.texture_row_align - 1; @@ -749,6 +743,7 @@ static void setup_hardware_state(context_t *rmesa, struct gl_texture_object *tex SETfield(t->SQ_TEX_RESOURCE4, 0, BASE_LEVEL_shift, BASE_LEVEL_mask); SETfield(t->SQ_TEX_RESOURCE5, t->maxLod - t->minLod, LAST_LEVEL_shift, LAST_LEVEL_mask); } + return GL_TRUE; } /** @@ -766,7 +761,8 @@ static GLboolean r600_validate_texture(GLcontext * ctx, struct gl_texture_object /* Configure the hardware registers (more precisely, the cached version * of the hardware registers). */ - setup_hardware_state(rmesa, texObj); + if (!setup_hardware_state(rmesa, texObj)) + return GL_FALSE; t->validated = GL_TRUE; return GL_TRUE; |