From 62cba629c09aaf236b2750785b899934b531b17a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 2 Dec 2012 04:40:36 +0100 Subject: [PATCH] Revert "r300g: fix occlusion queries when depth test is disabled or zbuffer is missing" It broke Hyper-Z terribly. --- src/gallium/drivers/r300/r300_emit.c | 13 ------------- src/gallium/drivers/r300/r300_state.c | 20 ++++++-------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c index 1da6044eb87..8d9d3386239 100644 --- a/src/gallium/drivers/r300/r300_emit.c +++ b/src/gallium/drivers/r300/r300_emit.c @@ -441,19 +441,6 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state) OUT_CS_REG(R300_ZB_ZMASK_OFFSET, 0); OUT_CS_REG(R300_ZB_ZMASK_PITCH, surf->pitch_zmask); } - /* Set up a dummy zbuffer. Otherwise occlusion queries won't work. - * Use the first colorbuffer, we will disable writes in the DSA state - * so as not to corrupt it. */ - } else if (fb->nr_cbufs) { - surf = r300_surface(fb->cbufs[0]); - - OUT_CS_REG(R300_ZB_FORMAT, R300_DEPTHFORMAT_16BIT_INT_Z); - - OUT_CS_REG(R300_ZB_DEPTHOFFSET, 0); - OUT_CS_RELOC(surf); - - OUT_CS_REG(R300_ZB_DEPTHPITCH, 4 | R300_DEPTHMICROTILE_TILED_SQUARE); - OUT_CS_RELOC(surf); } END_CS; diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c index e5e68d22dd0..02a263eabda 100644 --- a/src/gallium/drivers/r300/r300_state.c +++ b/src/gallium/drivers/r300/r300_state.c @@ -578,10 +578,6 @@ static void* dsa->z_stencil_control |= (r300_translate_depth_stencil_function(state->depth.func) << R300_Z_FUNC_SHIFT); - } else { - /* We must enable depth test, otherwise occlusion queries won't work. */ - dsa->z_buffer_control |= R300_Z_ENABLE; - dsa->z_stencil_control |= R300_ZS_ALWAYS; } /* Stencil buffer setup. */ @@ -665,13 +661,11 @@ static void* OUT_CB_REG(R500_FG_ALPHA_VALUE, dsa->alpha_value); END_CB; - /* We must enable depth test, otherwise occlusion queries won't work. - * We setup a dummy zbuffer to silent the CS checker, see emit_fb_state. */ BEGIN_CB(dsa->cb_zb_no_readwrite, 10); OUT_CB_REG(R300_FG_ALPHA_FUNC, dsa->alpha_function); OUT_CB_REG_SEQ(R300_ZB_CNTL, 3); - OUT_CB(R300_Z_ENABLE); - OUT_CB(R300_ZS_ALWAYS); + OUT_CB(0); + OUT_CB(0); OUT_CB(0); OUT_CB_REG(R500_ZB_STENCILREFMASK_BF, 0); OUT_CB_REG(R500_FG_ALPHA_VALUE, dsa->alpha_value); @@ -680,8 +674,8 @@ static void* BEGIN_CB(dsa->cb_fp16_zb_no_readwrite, 10); OUT_CB_REG(R300_FG_ALPHA_FUNC, dsa->alpha_function_fp16); OUT_CB_REG_SEQ(R300_ZB_CNTL, 3); - OUT_CB(R300_Z_ENABLE); - OUT_CB(R300_ZS_ALWAYS); + OUT_CB(0); + OUT_CB(0); OUT_CB(0); OUT_CB_REG(R500_ZB_STENCILREFMASK_BF, 0); OUT_CB_REG(R500_FG_ALPHA_VALUE, dsa->alpha_value); @@ -827,14 +821,12 @@ void r300_mark_fb_state_dirty(struct r300_context *r300, /* Now compute the fb_state atom size. */ r300->fb_state.size = 2 + (8 * state->nr_cbufs); - if (r300->cbzb_clear) { + if (r300->cbzb_clear) r300->fb_state.size += 10; - } else if (state->zsbuf) { + else if (state->zsbuf) { r300->fb_state.size += 10; if (r300->hyperz_enabled) r300->fb_state.size += 8; - } else if (state->nr_cbufs) { - r300->fb_state.size += 10; } /* The size of the rest of atoms stays the same. */