Mesa (master): r300g: set the correct HiZ clear value
Marek Olšák
mareko at kemper.freedesktop.org
Tue Mar 1 00:47:21 UTC 2011
Module: Mesa
Branch: master
Commit: 790c73140939fb60c1b702215bb6afa09f401a8e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=790c73140939fb60c1b702215bb6afa09f401a8e
Author: Marek Olšák <maraeo at gmail.com>
Date: Tue Mar 1 01:46:10 2011 +0100
r300g: set the correct HiZ clear value
---
src/gallium/drivers/r300/r300_blit.c | 8 ++++++++
src/gallium/drivers/r300/r300_context.h | 2 ++
src/gallium/drivers/r300/r300_emit.c | 2 +-
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 fd8ef44..8c13ac5 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 33d1390..64b06ca 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 6061c2a..9b4a306 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 8474839..75e6e53 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;
}
}
}
More information about the mesa-commit
mailing list