r300g: set the correct HiZ clear value
authorMarek Olšák <maraeo@gmail.com>
Tue, 1 Mar 2011 00:46:10 +0000 (01:46 +0100)
committerMarek Olšák <maraeo@gmail.com>
Tue, 1 Mar 2011 00:46:27 +0000 (01:46 +0100)
src/gallium/drivers/r300/r300_blit.c
src/gallium/drivers/r300/r300_context.h
src/gallium/drivers/r300/r300_emit.c
src/gallium/drivers/r300/r300_hyperz.c

index fd8ef444dc4fb222a9d4507ea609cb09a6f2c4ba..8c13ac5dff783616617cf9eaaa4cabd3885a3985 100644 (file)
@@ -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);
         }
     }
index 33d1390b070bca95607bf0b59a7822f1805b4844..64b06ca7b06519c15645b63a86091cceea7b113c 100644 (file)
@@ -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;
 
index 6061c2a623cd28dee4248ae75dc79e3fb6ebe83d..9b4a3063f6dfdd077e0497049894b5715b352dbf 100644 (file)
@@ -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. */
index 8474839960f9089a34bb62fefdf3e41ee5c58766..75e6e535519cac34140b39a0f7f6729a4c3794bc 100644 (file)
@@ -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;
             }
         }
     }