diff options
author | Marek Olšák <[email protected]> | 2011-03-01 01:46:10 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2011-03-01 01:46:27 +0100 |
commit | 790c73140939fb60c1b702215bb6afa09f401a8e (patch) | |
tree | 09f24392a994aa33edb1e6d5360a1e270c9424bf | |
parent | 4609be44106274fa88cfdf935257dfbe51cb6039 (diff) |
r300g: set the correct HiZ clear value
-rw-r--r-- | src/gallium/drivers/r300/r300_blit.c | 8 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_context.h | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_hyperz.c | 3 |
4 files changed, 12 insertions, 3 deletions
diff --git a/src/gallium/drivers/r300/r300_blit.c b/src/gallium/drivers/r300/r300_blit.c index fd8ef444dc4..8c13ac5dff7 100644 --- a/src/gallium/drivers/r300/r300_blit.c +++ b/src/gallium/drivers/r300/r300_blit.c @@ -141,6 +141,13 @@ static uint32_t r300_depth_clear_value(enum pipe_format format, } } +static uint32_t r300_hiz_clear_value(double depth) +{ + uint32_t r = (uint32_t)(CLAMP(depth, 0, 1) * 255.5); + assert(r <= 255); + return r | (r << 8) | (r << 16) | (r << 24); +} + /* Clear currently bound buffers. */ static void r300_clear(struct pipe_context* pipe, unsigned buffers, @@ -214,6 +221,7 @@ static void r300_clear(struct pipe_context* pipe, } if (r300_hiz_clear_allowed(r300)) { + r300->hiz_clear_value = r300_hiz_clear_value(depth); r300_mark_atom_dirty(r300, &r300->hiz_clear); } } diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h index 33d1390b070..64b06ca7b06 100644 --- a/src/gallium/drivers/r300/r300_context.h +++ b/src/gallium/drivers/r300/r300_context.h @@ -575,6 +575,8 @@ struct r300_context { boolean hiz_in_use; /* HiZ function. Can be either MIN or MAX. */ enum r300_hiz_func hiz_func; + /* HiZ clear value. */ + uint32_t hiz_clear_value; void *dsa_decompress_zmask; diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index 6061c2a623c..9b4a3063f6d 100644 --- a/src/gallium/drivers/r300/r300_emit.c +++ b/src/gallium/drivers/r300/r300_emit.c @@ -1037,7 +1037,7 @@ void r300_emit_hiz_clear(struct r300_context *r300, unsigned size, void *state) OUT_CS_PKT3(R300_PACKET3_3D_CLEAR_HIZ, 2); OUT_CS(0); OUT_CS(tex->tex.hiz_dwords[fb->zsbuf->u.tex.level]); - OUT_CS(0xffffffff); + OUT_CS(r300->hiz_clear_value); END_CS; /* Mark the current zbuffer's hiz ram as in use. */ diff --git a/src/gallium/drivers/r300/r300_hyperz.c b/src/gallium/drivers/r300/r300_hyperz.c index 8474839960f..75e6e535519 100644 --- a/src/gallium/drivers/r300/r300_hyperz.c +++ b/src/gallium/drivers/r300/r300_hyperz.c @@ -187,8 +187,7 @@ static void r300_update_hyperz(struct r300_context* r300) r300_get_sc_hz_max(r300); if (r300->screen->caps.is_r500) { - z->zb_bw_cntl |= R500_HIZ_FP_EXP_BITS_3 | - R500_HIZ_EQUAL_REJECT_ENABLE; + z->zb_bw_cntl |= R500_HIZ_EQUAL_REJECT_ENABLE; } } } |