@@ -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); | |||
} | |||
} |
@@ -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; | |||
@@ -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. */ |
@@ -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; | |||
} | |||
} | |||
} |