gallium: add flags parameter to texture barrier
authorIlia Mirkin <imirkin@alum.mit.edu>
Mon, 2 Jan 2017 04:42:17 +0000 (23:42 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Tue, 17 Jan 2017 02:13:09 +0000 (21:13 -0500)
This is so that we can differentiate between flushing any framebuffer
reading caches from regular sampler caches.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
14 files changed:
src/gallium/docs/source/context.rst
src/gallium/drivers/ddebug/dd_context.c
src/gallium/drivers/ilo/ilo_draw.c
src/gallium/drivers/nouveau/nv50/nv50_context.c
src/gallium/drivers/nouveau/nvc0/nvc0_context.c
src/gallium/drivers/r300/r300_state.c
src/gallium/drivers/r600/r600_state_common.c
src/gallium/drivers/radeonsi/si_state.c
src/gallium/drivers/softpipe/sp_flush.c
src/gallium/drivers/softpipe/sp_flush.h
src/gallium/drivers/trace/tr_context.c
src/gallium/include/pipe/p_context.h
src/gallium/include/pipe/p_defines.h
src/mesa/state_tracker/st_cb_texturebarrier.c

index 35f51a09410dfc444ca8f991cfd0688ecc3222bd..d8b25601a623910eacbb94660233a698ff7a7a44 100644 (file)
@@ -578,7 +578,8 @@ texture_barrier
 %%%%%%%%%%%%%%%
 
 This function flushes all pending writes to the currently-set surfaces and
-invalidates all read caches of the currently-set samplers.
+invalidates all read caches of the currently-set samplers. This can be used
+for both regular textures as well as for framebuffers read via FBFETCH.
 
 
 
index edcbf2cdfecd28cf70ba2364086e0fbb4f16d301..0b1dfbbc57c66681a29364f032faf4afd37b7b98 100644 (file)
@@ -676,11 +676,11 @@ dd_context_texture_subdata(struct pipe_context *_pipe,
  */
 
 static void
-dd_context_texture_barrier(struct pipe_context *_pipe)
+dd_context_texture_barrier(struct pipe_context *_pipe, unsigned flags)
 {
    struct pipe_context *pipe = dd_context(_pipe)->pipe;
 
-   pipe->texture_barrier(pipe);
+   pipe->texture_barrier(pipe, flags);
 }
 
 static void
index 6831d2c4eff381b5050b86daad171f59a0ba0e89..bef238aa8339a1553dbca79b324b58a33a166054 100644 (file)
@@ -603,7 +603,7 @@ ilo_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info)
 }
 
 static void
-ilo_texture_barrier(struct pipe_context *pipe)
+ilo_texture_barrier(struct pipe_context *pipe, unsigned flags)
 {
    struct ilo_context *ilo = ilo_context(pipe);
 
index fc852d7068c8a1d1e305ba6809ed33ef8a1c814a..ece7da9c5b436b73fb3aa0f6a8f12a25982e571a 100644 (file)
@@ -43,7 +43,7 @@ nv50_flush(struct pipe_context *pipe,
 }
 
 static void
-nv50_texture_barrier(struct pipe_context *pipe)
+nv50_texture_barrier(struct pipe_context *pipe, unsigned flags)
 {
    struct nouveau_pushbuf *push = nv50_context(pipe)->base.pushbuf;
 
index c711cb07de98573cebbd92734765a447c348608c..8f2b974b34a7cbded2aaea8d7a324eb04c233608 100644 (file)
@@ -44,7 +44,7 @@ nvc0_flush(struct pipe_context *pipe,
 }
 
 static void
-nvc0_texture_barrier(struct pipe_context *pipe)
+nvc0_texture_barrier(struct pipe_context *pipe, unsigned flags)
 {
    struct nouveau_pushbuf *push = nvc0_context(pipe)->base.pushbuf;
 
index 196c0df88644b3ca472c23b62f79a85b1308429f..8c49bfdddd12bac651ce046af1079b209dd65440 100644 (file)
@@ -2068,7 +2068,7 @@ static void r300_set_constant_buffer(struct pipe_context *pipe,
     }
 }
 
-static void r300_texture_barrier(struct pipe_context *pipe)
+static void r300_texture_barrier(struct pipe_context *pipe, unsigned flags)
 {
     struct r300_context *r300 = r300_context(pipe);
 
index 60490b0d69511c55b151807b88c75fdaebd0b718..a9dbc8bc982f0329a4cb141da1e008a0b966e5ac 100644 (file)
@@ -91,7 +91,7 @@ void r600_emit_alphatest_state(struct r600_context *rctx, struct r600_atom *atom
        radeon_set_context_reg(cs, R_028438_SX_ALPHA_REF, alpha_ref);
 }
 
-static void r600_texture_barrier(struct pipe_context *ctx)
+static void r600_texture_barrier(struct pipe_context *ctx, unsigned flags)
 {
        struct r600_context *rctx = (struct r600_context *)ctx;
 
index 865a75dbe64965a4ff7f603a7cc0e03a416e4d72..4aa1cd7436d605d0422fc0168e973914aa9bca85 100644 (file)
@@ -3498,7 +3498,7 @@ static void si_set_tess_state(struct pipe_context *ctx,
        pipe_resource_reference(&cb.buffer, NULL);
 }
 
-static void si_texture_barrier(struct pipe_context *ctx)
+static void si_texture_barrier(struct pipe_context *ctx, unsigned flags)
 {
        struct si_context *sctx = (struct si_context *)ctx;
 
index 656d8a3257ab086759f95f1a969add583832f7e1..3bf8c49921888281b3c258736a07f9e7559f7687 100644 (file)
@@ -169,7 +169,7 @@ softpipe_flush_resource(struct pipe_context *pipe,
    return TRUE;
 }
 
-void softpipe_texture_barrier(struct pipe_context *pipe)
+void softpipe_texture_barrier(struct pipe_context *pipe, unsigned flags)
 {
    struct softpipe_context *softpipe = softpipe_context(pipe);
    uint i, sh;
@@ -192,5 +192,5 @@ void softpipe_texture_barrier(struct pipe_context *pipe)
 
 void softpipe_memory_barrier(struct pipe_context *pipe, unsigned flags)
 {
-   softpipe_texture_barrier(pipe);
+   softpipe_texture_barrier(pipe, 0);
 }
index 0674b4a7e4891898112e7e6ba689ce3ba6eeddd3..abbc098657c80cb7b8b9a2cd375e3ae70522643f 100644 (file)
@@ -55,6 +55,6 @@ softpipe_flush_resource(struct pipe_context *pipe,
                         boolean cpu_access,
                         boolean do_not_block);
 
-void softpipe_texture_barrier(struct pipe_context *pipe);
+void softpipe_texture_barrier(struct pipe_context *pipe, unsigned flags);
 void softpipe_memory_barrier(struct pipe_context *pipe, unsigned flags);
 #endif
index 8423bb28c014a7a2b96d46ae4d8bb7ab4b55acd6..de03e29b4e3be8d3a2af66dc1c68343b907b8568 100644 (file)
@@ -1681,7 +1681,7 @@ trace_context_render_condition(struct pipe_context *_context,
 
 
 static void
-trace_context_texture_barrier(struct pipe_context *_context)
+trace_context_texture_barrier(struct pipe_context *_context, unsigned flags)
 {
    struct trace_context *tr_context = trace_context(_context);
    struct pipe_context *context = tr_context->pipe;
@@ -1689,10 +1689,11 @@ trace_context_texture_barrier(struct pipe_context *_context)
    trace_dump_call_begin("pipe_context", "texture_barrier");
 
    trace_dump_arg(ptr, context);
+   trace_dump_arg(uint, flags);
 
    trace_dump_call_end();
 
-   context->texture_barrier(context);
+   context->texture_barrier(context, flags);
 }
 
 
index 171dc570ba0def93a39272e4c23da73a646f39c0..45098c9c74f86dd5d39333fcc5cca15e0932618c 100644 (file)
@@ -566,7 +566,7 @@ struct pipe_context {
    /**
     * Flush any pending framebuffer writes and invalidate texture caches.
     */
-   void (*texture_barrier)(struct pipe_context *);
+   void (*texture_barrier)(struct pipe_context *, unsigned flags);
 
    /**
     * Flush caches according to flags.
index d5139c7f8f1decd0be9633b8458cf8a3bfc3c220..3eb5b3b88739233e811965d3b9c1a24addaf5eb6 100644 (file)
@@ -399,6 +399,12 @@ enum pipe_flush_flags
 #define PIPE_BARRIER_GLOBAL_BUFFER     (1 << 11)
 #define PIPE_BARRIER_ALL               ((1 << 12) - 1)
 
+/**
+ * Flags for pipe_context::texture_barrier.
+ */
+#define PIPE_TEXTURE_BARRIER_SAMPLER      (1 << 0)
+#define PIPE_TEXTURE_BARRIER_FRAMEBUFFER  (1 << 1)
+
 /**
  * Resource binding flags -- state tracker must specify in advance all
  * the ways a resource might be used.
index fecba65a64d01c5249d48bb06c16611870960175..7fd1cbd1d7c37c41e365028ca3211489e44b4971 100644 (file)
@@ -50,7 +50,7 @@ st_TextureBarrier(struct gl_context *ctx)
 {
    struct pipe_context *pipe = st_context(ctx)->pipe;
 
-   pipe->texture_barrier(pipe);
+   pipe->texture_barrier(pipe, PIPE_TEXTURE_BARRIER_SAMPLER);
 }