diff options
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_clear.c | 23 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_gmem.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_screen.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/freedreno_util.h | 2 |
4 files changed, 29 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/freedreno_clear.c b/src/gallium/drivers/freedreno/freedreno_clear.c index 149c023d6f0..2cdb7bf1120 100644 --- a/src/gallium/drivers/freedreno/freedreno_clear.c +++ b/src/gallium/drivers/freedreno/freedreno_clear.c @@ -67,7 +67,9 @@ fd_clear(struct pipe_context *pctx, unsigned buffers, if (buffers & (PIPE_CLEAR_DEPTH | PIPE_CLEAR_STENCIL)) fd_resource(fb->zsbuf->texture)->dirty = true; - DBG("depth=%f, stencil=%u", depth, stencil); + DBG("%x depth=%f, stencil=%u (%s/%s)", buffers, depth, stencil, + util_format_name(fb->cbufs[0]->format), + fb->zsbuf ? util_format_name(fb->zsbuf->format) : "none"); if ((buffers & PIPE_CLEAR_COLOR) && fb->nr_cbufs) colr = pack_rgba(fb->cbufs[0]->format, color->f); @@ -118,6 +120,9 @@ fd_clear(struct pipe_context *pctx, unsigned buffers, if (buffers & PIPE_CLEAR_DEPTH) reg |= A2XX_RB_COPY_CONTROL_CLEAR_MASK(0xf); break; + default: + assert(1); + break; } } OUT_RING(ring, reg); @@ -155,6 +160,19 @@ fd_clear(struct pipe_context *pctx, unsigned buffers, OUT_RING(ring, reg); OUT_PKT3(ring, CP_SET_CONSTANT, 3); + OUT_RING(ring, CP_REG(REG_A2XX_RB_STENCILREFMASK_BF)); + OUT_RING(ring, 0xff000000 | A2XX_RB_STENCILREFMASK_BF_STENCILWRITEMASK(0xff)); + OUT_RING(ring, 0xff000000 | A2XX_RB_STENCILREFMASK_STENCILWRITEMASK(0xff)); + + OUT_PKT3(ring, CP_SET_CONSTANT, 2); + OUT_RING(ring, CP_REG(REG_A2XX_RB_COLORCONTROL)); + OUT_RING(ring, A2XX_RB_COLORCONTROL_ALPHA_FUNC(FUNC_ALWAYS) | + A2XX_RB_COLORCONTROL_BLEND_DISABLE | + A2XX_RB_COLORCONTROL_ROP_CODE(12) | + A2XX_RB_COLORCONTROL_DITHER_MODE(DITHER_DISABLE) | + A2XX_RB_COLORCONTROL_DITHER_TYPE(DITHER_PIXEL)); + + OUT_PKT3(ring, CP_SET_CONSTANT, 3); OUT_RING(ring, CP_REG(REG_A2XX_PA_CL_CLIP_CNTL)); OUT_RING(ring, 0x00000000); /* PA_CL_CLIP_CNTL */ OUT_RING(ring, A2XX_PA_SU_SC_MODE_CNTL_PROVOKING_VTX_LAST | /* PA_SU_SC_MODE_CNTL */ @@ -202,6 +220,9 @@ fd_clear(struct pipe_context *pctx, unsigned buffers, FD_DIRTY_PROG | FD_DIRTY_CONSTBUF | FD_DIRTY_BLEND; + + if (fd_mesa_debug & FD_DBG_DCLEAR) + ctx->dirty = 0xffffffff; } static void diff --git a/src/gallium/drivers/freedreno/freedreno_gmem.c b/src/gallium/drivers/freedreno/freedreno_gmem.c index a6925a55731..83e5ea664b7 100644 --- a/src/gallium/drivers/freedreno/freedreno_gmem.c +++ b/src/gallium/drivers/freedreno/freedreno_gmem.c @@ -528,4 +528,7 @@ fd_gmem_render_tiles(struct pipe_context *pctx) FD_DIRTY_VERTTEX | FD_DIRTY_FRAGTEX | FD_DIRTY_BLEND; + + if (fd_mesa_debug & FD_DBG_DGMEM) + ctx->dirty = 0xffffffff; } diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c index 336d0306ec9..b4fc20e5c59 100644 --- a/src/gallium/drivers/freedreno/freedreno_screen.c +++ b/src/gallium/drivers/freedreno/freedreno_screen.c @@ -56,6 +56,8 @@ static const struct debug_named_value debug_options[] = { {"msgs", FD_DBG_MSGS, "Print debug messages"}, {"disasm", FD_DBG_DISASM, "Dump TGSI and adreno shader disassembly"}, + {"dclear", FD_DBG_DCLEAR, "Mark all state dirty after clear"}, + {"dgmem", FD_DBG_DGMEM, "Mark all state dirty after GMEM tile pass"}, DEBUG_NAMED_VALUE_END }; diff --git a/src/gallium/drivers/freedreno/freedreno_util.h b/src/gallium/drivers/freedreno/freedreno_util.h index c9af4715454..f73f792857b 100644 --- a/src/gallium/drivers/freedreno/freedreno_util.h +++ b/src/gallium/drivers/freedreno/freedreno_util.h @@ -50,6 +50,8 @@ uint32_t fd_tex_swiz(enum pipe_format format, unsigned swizzle_r, #define FD_DBG_MSGS 0x1 #define FD_DBG_DISASM 0x2 +#define FD_DBG_DCLEAR 0x4 +#define FD_DBG_DGMEM 0x8 extern int fd_mesa_debug; #define DBG(fmt, ...) \ |