r600: add some missing cayman register defines
[mesa.git] / src / gallium / drivers / freedreno / freedreno_draw.c
index 60a1180f24d5b17dc02a4348c0b628788d7f057e..d3bf3165276191a616883c6279f3bea63969a5ec 100644 (file)
@@ -27,6 +27,7 @@
  */
 
 #include "pipe/p_state.h"
+#include "util/u_draw.h"
 #include "util/u_string.h"
 #include "util/u_memory.h"
 #include "util/u_prim.h"
@@ -54,7 +55,6 @@ resource_written(struct fd_batch *batch, struct pipe_resource *prsc)
 {
        if (!prsc)
                return;
-       fd_resource(prsc)->valid = true;
        fd_batch_resource_used(batch, fd_resource(prsc), true);
 }
 
@@ -67,6 +67,15 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
        struct pipe_scissor_state *scissor = fd_context_get_scissor(ctx);
        unsigned i, prims, buffers = 0, restore_buffers = 0;
 
+       /* for debugging problems with indirect draw, it is convenient
+        * to be able to emulate it, to determine if game is feeding us
+        * bogus data:
+        */
+       if (info->indirect && (fd_mesa_debug & FD_DBG_NOINDR)) {
+               util_draw_indirect(pctx, info);
+               return;
+       }
+
        if (!info->count_from_stream_output && !info->indirect &&
            !info->primitive_restart &&
            !u_trim_pipe_prim(info->mode, (unsigned*)&info->count))
@@ -137,7 +146,7 @@ fd_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
 
        if (fd_stencil_enabled(ctx)) {
                if (fd_resource(pfb->zsbuf->texture)->valid)
-                       restore_buffers |= FD_BUFFER_DEPTH;
+                       restore_buffers |= FD_BUFFER_STENCIL;
                buffers |= FD_BUFFER_STENCIL;
                resource_written(batch, pfb->zsbuf->texture);
                batch->gmem_reason |= FD_GMEM_STENCIL_ENABLED;