nv50,nvc0: implement texture barrier
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Thu, 17 Mar 2011 16:07:30 +0000 (17:07 +0100)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Sat, 19 Mar 2011 13:45:55 +0000 (14:45 +0100)
src/gallium/drivers/nv50/nv50_context.c
src/gallium/drivers/nvc0/nvc0_context.c

index 930cee7c1e748e7ba9e51cdb08de699a94c13d21..632ca4daf742adaa557bcfabbb61ef574a791c67 100644 (file)
@@ -46,6 +46,17 @@ nv50_flush(struct pipe_context *pipe,
    FIRE_RING(screen->channel);
 }
 
+static void
+nv50_texture_barrier(struct pipe_context *pipe)
+{
+   struct nouveau_channel *chan = nv50_context(pipe)->screen->base.channel;
+
+   BEGIN_RING(chan, RING_3D(SERIALIZE), 1);
+   OUT_RING  (chan, 0);
+   BEGIN_RING(chan, RING_3D(TEX_CACHE_CTL), 1);
+   OUT_RING  (chan, 0x20);
+}
+
 void
 nv50_default_flush_notify(struct nouveau_channel *chan)
 {
@@ -125,6 +136,7 @@ nv50_create(struct pipe_screen *pscreen, void *priv)
    pipe->clear = nv50_clear;
 
    pipe->flush = nv50_flush;
+   pipe->texture_barrier = nv50_texture_barrier;
 
    if (!screen->cur_ctx)
       screen->cur_ctx = nv50;
index 5d2168e600b4912b5f3ef67c65b58de3c68574dd..2f2a3da7c44f7f011238fe0b43364cdf86090569 100644 (file)
@@ -46,6 +46,15 @@ nvc0_flush(struct pipe_context *pipe,
    FIRE_RING(screen->channel);
 }
 
+static void
+nvc0_texture_barrier(struct pipe_context *pipe)
+{
+   struct nouveau_channel *chan = nvc0_context(pipe)->screen->base.channel;
+
+   IMMED_RING(chan, RING_3D(SERIALIZE), 0);
+   IMMED_RING(chan, RING_3D(TEX_CACHE_CTL), 0);
+}
+
 static void
 nvc0_context_unreference_resources(struct nvc0_context *nvc0)
 {
@@ -128,6 +137,7 @@ nvc0_create(struct pipe_screen *pscreen, void *priv)
    pipe->clear = nvc0_clear;
 
    pipe->flush = nvc0_flush;
+   pipe->texture_barrier = nvc0_texture_barrier;
 
    if (!screen->cur_ctx)
       screen->cur_ctx = nvc0;