r300g: clear the ZB cache before clearing ZMASK or HIZ
This fixes wrong rendering in Lightsmark and the piglit/depthstencil-render-miplevels. I think I fixed Hyper-Z. So far every app seems to work like a charm.
This commit is contained in:
parent
62cba629c0
commit
0222b2bd41
|
@ -199,9 +199,9 @@ static boolean r300_setup_atoms(struct r300_context* r300)
|
|||
R300_INIT_ATOM(texture_cache_inval, 2);
|
||||
R300_INIT_ATOM(textures_state, 0);
|
||||
/* HiZ Clear */
|
||||
R300_INIT_ATOM(hiz_clear, r300->screen->caps.hiz_ram > 0 ? 4 : 0);
|
||||
R300_INIT_ATOM(hiz_clear, r300->screen->caps.hiz_ram > 0 ? 6 : 0);
|
||||
/* zmask clear */
|
||||
R300_INIT_ATOM(zmask_clear, r300->screen->caps.zmask_ram > 0 ? 4 : 0);
|
||||
R300_INIT_ATOM(zmask_clear, r300->screen->caps.zmask_ram > 0 ? 6 : 0);
|
||||
/* ZB (unpipelined), SU. */
|
||||
R300_INIT_ATOM(query_start, 4);
|
||||
|
||||
|
|
|
@ -1105,6 +1105,9 @@ void r300_emit_hiz_clear(struct r300_context *r300, unsigned size, void *state)
|
|||
tex = r300_resource(fb->zsbuf->texture);
|
||||
|
||||
BEGIN_CS(size);
|
||||
OUT_CS_REG(R300_ZB_ZCACHE_CTLSTAT,
|
||||
R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_FLUSH_AND_FREE |
|
||||
R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_FREE);
|
||||
OUT_CS_PKT3(R300_PACKET3_3D_CLEAR_HIZ, 2);
|
||||
OUT_CS(0);
|
||||
OUT_CS(tex->tex.hiz_dwords[fb->zsbuf->u.tex.level]);
|
||||
|
@ -1127,6 +1130,9 @@ void r300_emit_zmask_clear(struct r300_context *r300, unsigned size, void *state
|
|||
tex = r300_resource(fb->zsbuf->texture);
|
||||
|
||||
BEGIN_CS(size);
|
||||
OUT_CS_REG(R300_ZB_ZCACHE_CTLSTAT,
|
||||
R300_ZB_ZCACHE_CTLSTAT_ZC_FLUSH_FLUSH_AND_FREE |
|
||||
R300_ZB_ZCACHE_CTLSTAT_ZC_FREE_FREE);
|
||||
OUT_CS_PKT3(R300_PACKET3_3D_CLEAR_ZMASK, 2);
|
||||
OUT_CS(0);
|
||||
OUT_CS(tex->tex.zmask_dwords[fb->zsbuf->u.tex.level]);
|
||||
|
|
Loading…
Reference in New Issue