diff options
author | Roland Scheidegger <rscheidegger@gmx.ch> | 2006-09-13 23:20:10 +0000 |
---|---|---|
committer | Roland Scheidegger <rscheidegger@gmx.ch> | 2006-09-13 23:20:10 +0000 |
commit | 99e0236046436fba25afb60632a76ad9cdfbbc9a (patch) | |
tree | 6e75454a5eb612c612ac7a17bd76d020615eb485 /src/mesa/drivers/dri/r200 | |
parent | 43aa03408497d653b7716b2b0fac116dc03e7e6e (diff) |
Always mark tex state atom as dirty when the texture image is dirty, this ensures texture cache gets flushed in case the new texture has the same offset as the old one (fixes glean pixelFormat test at least on r200).
Diffstat (limited to 'src/mesa/drivers/dri/r200')
-rw-r--r-- | src/mesa/drivers/dri/r200/r200_texstate.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/r200/r200_texstate.c b/src/mesa/drivers/dri/r200/r200_texstate.c index 9c8997a8c7..433bc67e3f 100644 --- a/src/mesa/drivers/dri/r200/r200_texstate.c +++ b/src/mesa/drivers/dri/r200/r200_texstate.c @@ -1137,7 +1137,10 @@ static void import_tex_obj_state( r200ContextPtr rmesa, int unit, r200TexObjPtr texobj ) { - GLuint *cmd = R200_DB_STATE( tex[unit] ); +/* do not use RADEON_DB_STATE to avoid stale texture caches */ + GLuint *cmd = &rmesa->hw.tex[unit].cmd[TEX_CMD_0]; + + R200_STATECHANGE( rmesa, tex[unit] ); cmd[TEX_PP_TXFILTER] &= ~TEXOBJ_TXFILTER_MASK; cmd[TEX_PP_TXFILTER] |= texobj->pp_txfilter & TEXOBJ_TXFILTER_MASK; @@ -1156,9 +1159,11 @@ static void import_tex_obj_state( r200ContextPtr rmesa, } if (texobj->base.tObj->Target == GL_TEXTURE_CUBE_MAP) { - GLuint *cube_cmd = R200_DB_STATE( cube[unit] ); + GLuint *cube_cmd = &rmesa->hw.cube[unit].cmd[CUBE_CMD_0]; GLuint bytesPerFace = texobj->base.totalSize / 6; ASSERT(texobj->base.totalSize % 6 == 0); + + R200_STATECHANGE( rmesa, cube[unit] ); cube_cmd[CUBE_PP_CUBIC_FACES] = texobj->pp_cubic_faces; if (rmesa->r200Screen->drmSupportsFragShader) { /* that value is submitted twice. could change cube atom @@ -1170,9 +1175,7 @@ static void import_tex_obj_state( r200ContextPtr rmesa, cube_cmd[CUBE_PP_CUBIC_OFFSET_F3] = texobj->pp_txoffset + 3 * bytesPerFace; cube_cmd[CUBE_PP_CUBIC_OFFSET_F4] = texobj->pp_txoffset + 4 * bytesPerFace; cube_cmd[CUBE_PP_CUBIC_OFFSET_F5] = texobj->pp_txoffset + 5 * bytesPerFace; - R200_DB_STATECHANGE( rmesa, &rmesa->hw.cube[unit] ); } - R200_DB_STATECHANGE( rmesa, &rmesa->hw.tex[unit] ); texobj->dirty_state &= ~(1<<unit); } |