summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2015-04-14 11:24:00 -0700
committerEric Anholt <[email protected]>2015-04-15 16:50:22 -0700
commitbd957b1b79124c5061af1eddf16932793e806d87 (patch)
tree67a6a55c330dd929a061f01c55ad2ca01c7a5859
parente1d095053b2b50109f77fd9eb524e8e1c7d025af (diff)
vc4: Hook up VC4_DEBUG=perf to some useful printfs.
-rw-r--r--src/gallium/drivers/vc4/vc4_context.h5
-rw-r--r--src/gallium/drivers/vc4/vc4_draw.c7
-rw-r--r--src/gallium/drivers/vc4/vc4_resource.c5
3 files changed, 16 insertions, 1 deletions
diff --git a/src/gallium/drivers/vc4/vc4_context.h b/src/gallium/drivers/vc4/vc4_context.h
index 68eacb84fd1..d89f1974e12 100644
--- a/src/gallium/drivers/vc4/vc4_context.h
+++ b/src/gallium/drivers/vc4/vc4_context.h
@@ -303,6 +303,11 @@ struct vc4_depth_stencil_alpha_state {
uint32_t stencil_uniforms[3];
};
+#define perf_debug(...) do { \
+ if (unlikely(vc4_debug & VC4_DEBUG_PERF)) \
+ fprintf(stderr, __VA_ARGS__); \
+} while (0)
+
static inline struct vc4_context *
vc4_context(struct pipe_context *pcontext)
{
diff --git a/src/gallium/drivers/vc4/vc4_draw.c b/src/gallium/drivers/vc4/vc4_draw.c
index 3a6d6254a1b..717eb8aea2b 100644
--- a/src/gallium/drivers/vc4/vc4_draw.c
+++ b/src/gallium/drivers/vc4/vc4_draw.c
@@ -22,6 +22,7 @@
* IN THE SOFTWARE.
*/
+#include "util/u_prim.h"
#include "util/u_format.h"
#include "util/u_pack_color.h"
#include "indices/u_primconvert.h"
@@ -139,6 +140,8 @@ vc4_draw_vbo(struct pipe_context *pctx, const struct pipe_draw_info *info)
util_primconvert_save_index_buffer(vc4->primconvert, &vc4->indexbuf);
util_primconvert_save_rasterizer_state(vc4->primconvert, &vc4->rasterizer->base);
util_primconvert_draw_vbo(vc4->primconvert, info);
+ perf_debug("Fallback conversion for %d %s vertices\n",
+ info->count, u_prim_name(info->mode));
return;
}
@@ -303,8 +306,10 @@ vc4_clear(struct pipe_context *pctx, unsigned buffers,
/* We can't flag new buffers for clearing once we've queued draws. We
* could avoid this by using the 3d engine to clear.
*/
- if (vc4->draw_call_queued)
+ if (vc4->draw_call_queued) {
+ perf_debug("Flushing rendering to process new clear.");
vc4_flush(pctx);
+ }
if (buffers & PIPE_CLEAR_COLOR0) {
vc4->clear_color[0] = vc4->clear_color[1] =
diff --git a/src/gallium/drivers/vc4/vc4_resource.c b/src/gallium/drivers/vc4/vc4_resource.c
index f6ca0759012..94bab9934e7 100644
--- a/src/gallium/drivers/vc4/vc4_resource.c
+++ b/src/gallium/drivers/vc4/vc4_resource.c
@@ -586,6 +586,9 @@ vc4_update_shadow_baselevel_texture(struct pipe_context *pctx,
if (shadow->writes == orig->writes)
return;
+ perf_debug("Updating shadow texture due to %s\n",
+ view->u.tex.first_level ? "base level" : "raster layout");
+
for (int i = 0; i <= shadow->base.b.last_level; i++) {
unsigned width = u_minify(shadow->base.b.width0, i);
unsigned height = u_minify(shadow->base.b.height0, i);
@@ -646,6 +649,8 @@ vc4_update_shadow_index_buffer(struct pipe_context *pctx,
if (shadow->writes == orig->writes)
return;
+ perf_debug("Fallback conversion for %d uint indices\n", count);
+
struct pipe_transfer *src_transfer;
uint32_t *src = pipe_buffer_map_range(pctx, &orig->base.b,
ib->offset,