freedreno: prep work for timestamp queries
authorRob Clark <robclark@freedesktop.org>
Tue, 1 Mar 2016 15:45:32 +0000 (10:45 -0500)
committerRob Clark <robdclark@gmail.com>
Sat, 23 Jul 2016 17:39:30 +0000 (13:39 -0400)
We need "NULL" state to be a valid bit in the bitmask, because timestamp
queries are not restricted to draw/etc stages (ie. the only commands to
submit may just be to read the timestamp).  And just because there are
no draws, isn't a reason to skip the flush and return zero.

Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/freedreno_context.c
src/gallium/drivers/freedreno/freedreno_context.h
src/gallium/drivers/freedreno/freedreno_query_hw.c

index 52557d160686fa6e3b0b243bc49b50353bcfc123..65c38913c222baea9d4abb730fd5bdfb9072c02d 100644 (file)
@@ -244,6 +244,8 @@ fd_context_init(struct fd_context *ctx, struct pipe_screen *pscreen,
         */
        ctx->sample_mask = 0xffff;
 
+       ctx->stage = FD_STAGE_NULL;
+
        pctx = &ctx->base;
        pctx->screen = pscreen;
        pctx->priv = priv;
index 438c2e270354f1f04a9be158c5e40b5996844bfa..53b4e1dbaa735c0c87f46fc5b29cdafd3f2fe267 100644 (file)
@@ -116,18 +116,19 @@ struct fd_vertex_state {
  * is active across IB's (or between tile IB and draw IB)
  */
 enum fd_render_stage {
-       FD_STAGE_NULL     = 0x00,
-       FD_STAGE_DRAW     = 0x01,
-       FD_STAGE_CLEAR    = 0x02,
+       FD_STAGE_NULL     = 0x01,
+       FD_STAGE_DRAW     = 0x02,
+       FD_STAGE_CLEAR    = 0x04,
        /* TODO before queries which include MEM2GMEM or GMEM2MEM will
         * work we will need to call fd_hw_query_prepare() from somewhere
         * appropriate so that queries in the tiling IB get backed with
         * memory to write results to.
         */
-       FD_STAGE_MEM2GMEM = 0x04,
-       FD_STAGE_GMEM2MEM = 0x08,
+       FD_STAGE_MEM2GMEM = 0x08,
+       FD_STAGE_GMEM2MEM = 0x10,
        /* used for driver internal draws (ie. util_blitter_blit()): */
-       FD_STAGE_BLIT     = 0x10,
+       FD_STAGE_BLIT     = 0x20,
+       FD_STAGE_ALL      = 0xff,
 };
 
 #define MAX_HW_SAMPLE_PROVIDERS 4
index 95fff3f108e10c3e014cb566eb4b52bdd199882f..141dc8a28fe747a7764c64377e9ae569606e2063 100644 (file)
@@ -66,6 +66,7 @@ get_sample(struct fd_context *ctx, struct fd_ringbuffer *ring,
        if (!ctx->sample_cache[idx]) {
                ctx->sample_cache[idx] =
                        ctx->sample_providers[idx]->get_sample(ctx, ring);
+               ctx->needs_flush = true;
        }
 
        fd_hw_sample_reference(ctx, &samp, ctx->sample_cache[idx]);