From: Maarten Lankhorst <maarten.lankhorst-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
To: "nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org"
<nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Cc: "mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org"
<mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org>
Subject: [PATCH try 2 1/2] gallium/nouveau: decouple nouveau_fence implementation from screen
Date: Tue, 17 Jun 2014 08:33:16 +0200 [thread overview]
Message-ID: <539FE12C.90900@canonical.com> (raw)
Signed-off-by: Maarten Lankhorst <maarten.lankhorst-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
---
src/gallium/drivers/nouveau/nouveau_fence.c | 76 ++++++++++++-------------
src/gallium/drivers/nouveau/nouveau_fence.h | 22 +++++--
src/gallium/drivers/nouveau/nouveau_screen.c | 9 +++
src/gallium/drivers/nouveau/nouveau_screen.h | 14 ++---
src/gallium/drivers/nouveau/nv30/nv30_context.c | 4 +-
src/gallium/drivers/nouveau/nv30/nv30_screen.c | 23 +++++---
src/gallium/drivers/nouveau/nv50/nv50_context.c | 4 +-
src/gallium/drivers/nouveau/nv50/nv50_screen.c | 20 +++++--
src/gallium/drivers/nouveau/nv50/nv50_vbo.c | 2 +-
src/gallium/drivers/nouveau/nvc0/nvc0_context.c | 4 +-
src/gallium/drivers/nouveau/nvc0/nvc0_screen.c | 19 +++++--
src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c | 2 +-
12 files changed, 121 insertions(+), 78 deletions(-)
diff --git a/src/gallium/drivers/nouveau/nouveau_fence.c b/src/gallium/drivers/nouveau/nouveau_fence.c
index c686710..09b3b1e 100644
--- a/src/gallium/drivers/nouveau/nouveau_fence.c
+++ b/src/gallium/drivers/nouveau/nouveau_fence.c
@@ -31,14 +31,14 @@
#endif
boolean
-nouveau_fence_new(struct nouveau_screen *screen, struct nouveau_fence **fence,
+nouveau_fence_new(struct nouveau_fence_mgr *mgr, struct nouveau_fence **fence,
boolean emit)
{
*fence = CALLOC_STRUCT(nouveau_fence);
if (!*fence)
return FALSE;
- (*fence)->screen = screen;
+ (*fence)->mgr = mgr;
(*fence)->ref = 1;
LIST_INITHEAD(&(*fence)->work);
@@ -83,7 +83,7 @@ nouveau_fence_work(struct nouveau_fence *fence,
void
nouveau_fence_emit(struct nouveau_fence *fence)
{
- struct nouveau_screen *screen = fence->screen;
+ struct nouveau_fence_mgr *mgr = fence->mgr;
assert(fence->state == NOUVEAU_FENCE_STATE_AVAILABLE);
@@ -92,14 +92,14 @@ nouveau_fence_emit(struct nouveau_fence *fence)
++fence->ref;
- if (screen->fence.tail)
- screen->fence.tail->next = fence;
+ if (mgr->tail)
+ mgr->tail->next = fence;
else
- screen->fence.head = fence;
+ mgr->head = fence;
- screen->fence.tail = fence;
+ mgr->tail = fence;
- screen->fence.emit(&screen->base, &fence->sequence);
+ mgr->emit(mgr, &fence->sequence);
assert(fence->state == NOUVEAU_FENCE_STATE_EMITTING);
fence->state = NOUVEAU_FENCE_STATE_EMITTED;
@@ -109,19 +109,19 @@ void
nouveau_fence_del(struct nouveau_fence *fence)
{
struct nouveau_fence *it;
- struct nouveau_screen *screen = fence->screen;
+ struct nouveau_fence_mgr *mgr = fence->mgr;
if (fence->state == NOUVEAU_FENCE_STATE_EMITTED ||
fence->state == NOUVEAU_FENCE_STATE_FLUSHED) {
- if (fence == screen->fence.head) {
- screen->fence.head = fence->next;
- if (!screen->fence.head)
- screen->fence.tail = NULL;
+ if (fence == mgr->head) {
+ mgr->head = fence->next;
+ if (!mgr->head)
+ mgr->tail = NULL;
} else {
- for (it = screen->fence.head; it && it->next != fence; it = it->next);
+ for (it = mgr->head; it && it->next != fence; it = it->next);
it->next = fence->next;
- if (screen->fence.tail == fence)
- screen->fence.tail = it;
+ if (mgr->tail == fence)
+ mgr->tail = it;
}
}
@@ -134,17 +134,17 @@ nouveau_fence_del(struct nouveau_fence *fence)
}
void
-nouveau_fence_update(struct nouveau_screen *screen, boolean flushed)
+nouveau_fence_update(struct nouveau_fence_mgr *mgr, boolean flushed)
{
struct nouveau_fence *fence;
struct nouveau_fence *next = NULL;
- u32 sequence = screen->fence.update(&screen->base);
+ u32 sequence = mgr->update(mgr);
- if (screen->fence.sequence_ack == sequence)
+ if (mgr->sequence_ack == sequence)
return;
- screen->fence.sequence_ack = sequence;
+ mgr->sequence_ack = sequence;
- for (fence = screen->fence.head; fence; fence = next) {
+ for (fence = mgr->head; fence; fence = next) {
next = fence->next;
sequence = fence->sequence;
@@ -153,12 +153,12 @@ nouveau_fence_update(struct nouveau_screen *screen, boolean flushed)
nouveau_fence_trigger_work(fence);
nouveau_fence_ref(NULL, &fence);
- if (sequence == screen->fence.sequence_ack)
+ if (sequence == mgr->sequence_ack)
break;
}
- screen->fence.head = next;
+ mgr->head = next;
if (!next)
- screen->fence.tail = NULL;
+ mgr->tail = NULL;
if (flushed) {
for (fence = next; fence; fence = fence->next)
@@ -172,10 +172,10 @@ nouveau_fence_update(struct nouveau_screen *screen, boolean flushed)
boolean
nouveau_fence_signalled(struct nouveau_fence *fence)
{
- struct nouveau_screen *screen = fence->screen;
+ struct nouveau_fence_mgr *mgr = fence->mgr;
if (fence->state >= NOUVEAU_FENCE_STATE_EMITTED)
- nouveau_fence_update(screen, FALSE);
+ nouveau_fence_update(mgr, FALSE);
return fence->state == NOUVEAU_FENCE_STATE_SIGNALLED;
}
@@ -183,7 +183,7 @@ nouveau_fence_signalled(struct nouveau_fence *fence)
boolean
nouveau_fence_wait(struct nouveau_fence *fence)
{
- struct nouveau_screen *screen = fence->screen;
+ struct nouveau_fence_mgr *mgr = fence->mgr;
uint32_t spins = 0;
/* wtf, someone is waiting on a fence in flush_notify handler? */
@@ -193,19 +193,19 @@ nouveau_fence_wait(struct nouveau_fence *fence)
nouveau_fence_emit(fence);
if (fence->state < NOUVEAU_FENCE_STATE_FLUSHED)
- if (nouveau_pushbuf_kick(screen->pushbuf, screen->pushbuf->channel))
+ if (mgr->flush(mgr))
return FALSE;
- if (fence == screen->fence.current)
- nouveau_fence_next(screen);
+ if (fence == mgr->current)
+ nouveau_fence_next(mgr);
do {
- nouveau_fence_update(screen, FALSE);
+ nouveau_fence_update(mgr, FALSE);
if (fence->state == NOUVEAU_FENCE_STATE_SIGNALLED)
return TRUE;
if (!spins)
- NOUVEAU_DRV_STAT(screen, any_non_kernel_fence_sync_count, 1);
+ NOUVEAU_DRV_STAT(mgr->screen, any_non_kernel_fence_sync_count, 1);
spins++;
#ifdef PIPE_OS_UNIX
if (!(spins % 8)) /* donate a few cycles */
@@ -215,18 +215,18 @@ nouveau_fence_wait(struct nouveau_fence *fence)
debug_printf("Wait on fence %u (ack = %u, next = %u) timed out !\n",
fence->sequence,
- screen->fence.sequence_ack, screen->fence.sequence);
+ mgr->sequence_ack, mgr->sequence);
return FALSE;
}
void
-nouveau_fence_next(struct nouveau_screen *screen)
+nouveau_fence_next(struct nouveau_fence_mgr *mgr)
{
- if (screen->fence.current->state < NOUVEAU_FENCE_STATE_EMITTING)
- nouveau_fence_emit(screen->fence.current);
+ if (mgr->current->state < NOUVEAU_FENCE_STATE_EMITTING)
+ nouveau_fence_emit(mgr->current);
- nouveau_fence_ref(NULL, &screen->fence.current);
+ nouveau_fence_ref(NULL, &mgr->current);
- nouveau_fence_new(screen, &screen->fence.current, FALSE);
+ nouveau_fence_new(mgr, &mgr->current, FALSE);
}
diff --git a/src/gallium/drivers/nouveau/nouveau_fence.h b/src/gallium/drivers/nouveau/nouveau_fence.h
index 3984a9a..cb44dd3 100644
--- a/src/gallium/drivers/nouveau/nouveau_fence.h
+++ b/src/gallium/drivers/nouveau/nouveau_fence.h
@@ -11,6 +11,20 @@
#define NOUVEAU_FENCE_STATE_FLUSHED 3
#define NOUVEAU_FENCE_STATE_SIGNALLED 4
+struct nouveau_fence_mgr {
+ struct nouveau_fence *head;
+ struct nouveau_fence *tail;
+ struct nouveau_fence *current;
+ uint32_t sequence;
+ uint32_t sequence_ack;
+ int (*flush)(struct nouveau_fence_mgr *);
+ void (*emit)(struct nouveau_fence_mgr *, uint32_t *sequence);
+ uint32_t (*update)(struct nouveau_fence_mgr *);
+
+ /* for driver stats */
+ struct nouveau_screen *screen;
+};
+
struct nouveau_fence_work {
struct list_head list;
void (*func)(void *);
@@ -19,7 +33,7 @@ struct nouveau_fence_work {
struct nouveau_fence {
struct nouveau_fence *next;
- struct nouveau_screen *screen;
+ struct nouveau_fence_mgr *mgr;
int state;
int ref;
uint32_t sequence;
@@ -29,11 +43,11 @@ struct nouveau_fence {
void nouveau_fence_emit(struct nouveau_fence *);
void nouveau_fence_del(struct nouveau_fence *);
-boolean nouveau_fence_new(struct nouveau_screen *, struct nouveau_fence **,
+boolean nouveau_fence_new(struct nouveau_fence_mgr *, struct nouveau_fence **,
boolean emit);
boolean nouveau_fence_work(struct nouveau_fence *, void (*)(void *), void *);
-void nouveau_fence_update(struct nouveau_screen *, boolean flushed);
-void nouveau_fence_next(struct nouveau_screen *);
+void nouveau_fence_update(struct nouveau_fence_mgr *, boolean flushed);
+void nouveau_fence_next(struct nouveau_fence_mgr *);
boolean nouveau_fence_wait(struct nouveau_fence *);
boolean nouveau_fence_signalled(struct nouveau_fence *);
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.c b/src/gallium/drivers/nouveau/nouveau_screen.c
index 9d71bf7..9ea3a46 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.c
+++ b/src/gallium/drivers/nouveau/nouveau_screen.c
@@ -223,3 +223,12 @@ nouveau_screen_fini(struct nouveau_screen *screen)
nouveau_device_del(&screen->device);
}
+
+int nouveau_screen_fence_kick(struct nouveau_fence_mgr *mgr)
+{
+ struct nouveau_screen *screen = NULL;
+
+ screen = container_of(mgr, screen, fence);
+
+ return nouveau_pushbuf_kick(screen->pushbuf, screen->pushbuf->channel);
+}
diff --git a/src/gallium/drivers/nouveau/nouveau_screen.h b/src/gallium/drivers/nouveau/nouveau_screen.h
index cf06f7e..7682214 100644
--- a/src/gallium/drivers/nouveau/nouveau_screen.h
+++ b/src/gallium/drivers/nouveau/nouveau_screen.h
@@ -4,6 +4,8 @@
#include "pipe/p_screen.h"
#include "util/u_memory.h"
+#include "nouveau_fence.h"
+
#ifdef DEBUG
# define NOUVEAU_ENABLE_DRIVER_STATISTICS
#endif
@@ -34,15 +36,7 @@ struct nouveau_screen {
uint16_t class_3d;
- struct {
- struct nouveau_fence *head;
- struct nouveau_fence *tail;
- struct nouveau_fence *current;
- u32 sequence;
- u32 sequence_ack;
- void (*emit)(struct pipe_screen *, u32 *sequence);
- u32 (*update)(struct pipe_screen *);
- } fence;
+ struct nouveau_fence_mgr fence;
struct nouveau_mman *mm_VRAM;
struct nouveau_mman *mm_GART;
@@ -132,4 +126,6 @@ void nouveau_screen_fini(struct nouveau_screen *);
void nouveau_screen_init_vdec(struct nouveau_screen *);
+int nouveau_screen_fence_kick(struct nouveau_fence_mgr *);
+
#endif
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_context.c b/src/gallium/drivers/nouveau/nv30/nv30_context.c
index f325c5c..35c66f1 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_context.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_context.c
@@ -44,8 +44,8 @@ nv30_context_kick_notify(struct nouveau_pushbuf *push)
nv30 = container_of(push->user_priv, nv30, bufctx);
screen = &nv30->screen->base;
- nouveau_fence_next(screen);
- nouveau_fence_update(screen, TRUE);
+ nouveau_fence_next(&screen->fence);
+ nouveau_fence_update(&screen->fence, TRUE);
if (push->bufctx) {
struct nouveau_bufref *bref;
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index fb9378c..a0518c3 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -287,10 +287,13 @@ nv30_screen_is_format_supported(struct pipe_screen *pscreen,
}
static void
-nv30_screen_fence_emit(struct pipe_screen *pscreen, uint32_t *sequence)
+nv30_screen_fence_emit(struct nouveau_fence_mgr *mgr, uint32_t *sequence)
{
- struct nv30_screen *screen = nv30_screen(pscreen);
- struct nouveau_pushbuf *push = screen->base.pushbuf;
+ struct nv30_screen *screen = NULL;
+ struct nouveau_pushbuf *push;
+
+ screen = container_of(mgr, screen, base.fence);
+ push = screen->base.pushbuf;
*sequence = ++screen->base.fence.sequence;
@@ -300,10 +303,14 @@ nv30_screen_fence_emit(struct pipe_screen *pscreen, uint32_t *sequence)
}
static uint32_t
-nv30_screen_fence_update(struct pipe_screen *pscreen)
+nv30_screen_fence_update(struct nouveau_fence_mgr *mgr)
{
- struct nv30_screen *screen = nv30_screen(pscreen);
- struct nv04_notify *fence = screen->fence->data;
+ struct nv30_screen *screen = NULL;
+ struct nv04_notify *fence;
+
+ screen = container_of(mgr, screen, base.fence);
+ fence = screen->fence->data;
+
return *(uint32_t *)((char *)screen->notify->map + fence->offset);
}
@@ -404,6 +411,8 @@ nv30_screen_create(struct nouveau_device *dev)
nv30_resource_screen_init(pscreen);
nouveau_screen_init_vdec(&screen->base);
+ screen->base.fence.screen = &screen->base;
+ screen->base.fence.flush = nouveau_screen_fence_kick;
screen->base.fence.emit = nv30_screen_fence_emit;
screen->base.fence.update = nv30_screen_fence_update;
@@ -607,6 +616,6 @@ nv30_screen_create(struct nouveau_device *dev)
nouveau_pushbuf_kick(push, push->channel);
- nouveau_fence_new(&screen->base, &screen->base.fence.current, FALSE);
+ nouveau_fence_new(&screen->base.fence, &screen->base.fence.current, FALSE);
return pscreen;
}
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_context.c b/src/gallium/drivers/nouveau/nv50/nv50_context.c
index f844592..af1e436 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_context.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_context.c
@@ -83,8 +83,8 @@ nv50_default_kick_notify(struct nouveau_pushbuf *push)
struct nv50_screen *screen = push->user_priv;
if (screen) {
- nouveau_fence_next(&screen->base);
- nouveau_fence_update(&screen->base, TRUE);
+ nouveau_fence_next(&screen->base.fence);
+ nouveau_fence_update(&screen->base.fence, TRUE);
if (screen->cur_ctx)
screen->cur_ctx->state.flushed = TRUE;
}
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 015f139..8195650 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -348,10 +348,13 @@ nv50_screen_destroy(struct pipe_screen *pscreen)
}
static void
-nv50_screen_fence_emit(struct pipe_screen *pscreen, u32 *sequence)
+nv50_screen_fence_emit(struct nouveau_fence_mgr *mgr, u32 *sequence)
{
- struct nv50_screen *screen = nv50_screen(pscreen);
- struct nouveau_pushbuf *push = screen->base.pushbuf;
+ struct nv50_screen *screen = NULL;
+ struct nouveau_pushbuf *push;
+
+ screen = container_of(mgr, screen, base.fence);
+ push = screen->base.pushbuf;
/* we need to do it after possible flush in MARK_RING */
*sequence = ++screen->base.fence.sequence;
@@ -369,9 +372,12 @@ nv50_screen_fence_emit(struct pipe_screen *pscreen, u32 *sequence)
}
static u32
-nv50_screen_fence_update(struct pipe_screen *pscreen)
+nv50_screen_fence_update(struct nouveau_fence_mgr *mgr)
{
- return nv50_screen(pscreen)->fence.map[0];
+ struct nv50_screen *screen = NULL;
+
+ screen = container_of(mgr, screen, base.fence);
+ return screen->fence.map[0];
}
static void
@@ -717,6 +723,8 @@ nv50_screen_create(struct nouveau_device *dev)
nouveau_bo_map(screen->fence.bo, 0, NULL);
screen->fence.map = screen->fence.bo->map;
+ screen->base.fence.screen = &screen->base;
+ screen->base.fence.flush = nouveau_screen_fence_kick;
screen->base.fence.emit = nv50_screen_fence_emit;
screen->base.fence.update = nv50_screen_fence_update;
@@ -850,7 +858,7 @@ nv50_screen_create(struct nouveau_device *dev)
nv50_screen_init_hwctx(screen);
- nouveau_fence_new(&screen->base, &screen->base.fence.current, FALSE);
+ nouveau_fence_new(&screen->base.fence, &screen->base.fence.current, FALSE);
return pscreen;
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c
index 7c2b7ff..3fa2f05 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c
@@ -737,7 +737,7 @@ nv50_draw_vbo_kick_notify(struct nouveau_pushbuf *chan)
{
struct nv50_screen *screen = chan->user_priv;
- nouveau_fence_update(&screen->base, TRUE);
+ nouveau_fence_update(&screen->base.fence, TRUE);
nv50_bufctx_fence(screen->cur_ctx->bufctx_3d, TRUE);
}
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_context.c b/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
index e5040c4..52f8a57 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
@@ -147,8 +147,8 @@ nvc0_default_kick_notify(struct nouveau_pushbuf *push)
struct nvc0_screen *screen = push->user_priv;
if (screen) {
- nouveau_fence_next(&screen->base);
- nouveau_fence_update(&screen->base, TRUE);
+ nouveau_fence_next(&screen->base.fence);
+ nouveau_fence_update(&screen->base.fence, TRUE);
if (screen->cur_ctx)
screen->cur_ctx->state.flushed = TRUE;
}
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index 3e6b011..2a317af 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -490,10 +490,13 @@ nvc0_magic_3d_init(struct nouveau_pushbuf *push, uint16_t obj_class)
}
static void
-nvc0_screen_fence_emit(struct pipe_screen *pscreen, u32 *sequence)
+nvc0_screen_fence_emit(struct nouveau_fence_mgr *mgr, u32 *sequence)
{
- struct nvc0_screen *screen = nvc0_screen(pscreen);
- struct nouveau_pushbuf *push = screen->base.pushbuf;
+ struct nvc0_screen *screen = NULL;
+ struct nouveau_pushbuf *push;
+
+ screen = container_of(mgr, screen, base.fence);
+ push = screen->base.pushbuf;
/* we need to do it after possible flush in MARK_RING */
*sequence = ++screen->base.fence.sequence;
@@ -507,9 +510,11 @@ nvc0_screen_fence_emit(struct pipe_screen *pscreen, u32 *sequence)
}
static u32
-nvc0_screen_fence_update(struct pipe_screen *pscreen)
+nvc0_screen_fence_update(struct nouveau_fence_mgr *mgr)
{
- struct nvc0_screen *screen = nvc0_screen(pscreen);
+ struct nvc0_screen *screen = NULL;
+
+ screen = container_of(mgr, screen, base.fence);
return screen->fence.map[0];
}
@@ -639,6 +644,8 @@ nvc0_screen_create(struct nouveau_device *dev)
goto fail;
nouveau_bo_map(screen->fence.bo, 0, NULL);
screen->fence.map = screen->fence.bo->map;
+ screen->base.fence.screen = &screen->base;
+ screen->base.fence.flush = nouveau_screen_fence_kick;
screen->base.fence.emit = nvc0_screen_fence_emit;
screen->base.fence.update = nvc0_screen_fence_update;
@@ -997,7 +1004,7 @@ nvc0_screen_create(struct nouveau_device *dev)
if (!nvc0_blitter_create(screen))
goto fail;
- nouveau_fence_new(&screen->base, &screen->base.fence.current, FALSE);
+ nouveau_fence_new(&screen->base.fence, &screen->base.fence.current, FALSE);
return pscreen;
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
index 83d406d..6406cf5 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
@@ -559,7 +559,7 @@ nvc0_draw_vbo_kick_notify(struct nouveau_pushbuf *push)
{
struct nvc0_screen *screen = push->user_priv;
- nouveau_fence_update(&screen->base, TRUE);
+ nouveau_fence_update(&screen->base.fence, TRUE);
NOUVEAU_DRV_STAT(&screen->base, pushbuf_count, 1);
}
--
2.0.0
next reply other threads:[~2014-06-17 6:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-17 6:33 Maarten Lankhorst [this message]
[not found] ` <539FE12C.90900-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
2014-06-17 6:34 ` [PATCH try 2 2/2] gallium/nouveau: move pushbuf and fences to context Maarten Lankhorst
2014-06-21 12:12 ` Ilia Mirkin
2014-06-23 7:17 ` Maarten Lankhorst
2014-06-23 7:24 ` Ben Skeggs
2014-06-23 7:39 ` Maarten Lankhorst
2014-06-23 7:57 ` Ben Skeggs
[not found] ` <53A7D482.70108-Z7WLFzj8eWMS+FvcfC7Uqw@public.gmane.org>
2014-06-23 14:54 ` [Mesa-dev] " Ilia Mirkin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=539FE12C.90900@canonical.com \
--to=maarten.lankhorst-z7wlfzj8ewms+fvcfc7uqw@public.gmane.org \
--cc=mesa-dev-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.