Module: Mesa
Branch: master
Commit: 9495ee12c66798ac776f1a38dbb9c7416ba68c6b
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=9495ee12c66798ac776f1a38dbb9c7416ba68c6b

Author: Rob Clark <[email protected]>
Date:   Wed Apr 24 10:50:51 2013 -0400

freedreno: clear fixes and debugging

Set a few extra registers to make sure we are in proper state for
clearing.  And also add some debug options to mark all state dirty in
clear and gmem operations to aid in debugging.

Signed-off-by: Rob Clark <[email protected]>

---

 src/gallium/drivers/freedreno/freedreno_clear.c  |   23 +++++++++++++++++++++-
 src/gallium/drivers/freedreno/freedreno_gmem.c   |    3 ++
 src/gallium/drivers/freedreno/freedreno_screen.c |    2 +
 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 149c023..2cdb7bf 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 a6925a5..83e5ea6 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 336d030..b4fc20e 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 c9af471..f73f792 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, ...) \

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to