summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2017-01-23 11:57:21 -0800
committerKenneth Graunke <[email protected]>2017-01-25 22:24:08 -0800
commit5106df85da20d57007e89262472bb1624afbdaba (patch)
treef54c40e552c5f1962fd66d9d3bc36c3b0ba0e8cf /src/mesa/drivers
parent022e5c7e5a5a1ff40d7f5e8d3d768345e7746678 (diff)
i965: Fix fast depth clears for surfaces with a dimension of 16384.
I hadn't bothered to set this bit because I figured it would just paper over us getting the rectangle wrong. But it turns out that there is a legitimate reason to use it, so let's do so. The alternative would be to chop up 16k clears to multiple 8k clears, which is pointlessly painful. Cc: "17.0" <[email protected]> Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Anuj Phogat <[email protected]> Reviewed-by: Nanley Chery <[email protected]>
Diffstat (limited to 'src/mesa/drivers')
-rw-r--r--src/mesa/drivers/dri/i965/gen8_depth_state.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/gen8_depth_state.c b/src/mesa/drivers/dri/i965/gen8_depth_state.c
index ec296698267..a7e61354fd5 100644
--- a/src/mesa/drivers/dri/i965/gen8_depth_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_depth_state.c
@@ -477,6 +477,18 @@ gen8_hiz_exec(struct brw_context *brw, struct intel_mipmap_tree *mt,
break;
case BLORP_HIZ_OP_DEPTH_CLEAR:
dw1 |= GEN8_WM_HZ_DEPTH_CLEAR;
+
+ /* The "Clear Rectangle X Max" (and Y Max) fields are exclusive,
+ * rather than inclusive, and limited to 16383. This means that
+ * for a 16384x16384 render target, we would miss the last row
+ * or column of pixels along the edge.
+ *
+ * To work around this, we have to set the "Full Surface Depth
+ * and Stencil Clear" bit. We can do this in all cases because
+ * we always clear the full rectangle anyway. We'll need to
+ * change this if we ever add scissored clear support.
+ */
+ dw1 |= GEN8_WM_HZ_FULL_SURFACE_DEPTH_CLEAR;
break;
case BLORP_HIZ_OP_NONE:
unreachable("Should not get here.");