summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/nv50/nv50_vbo.c
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2010-03-03 14:59:28 +1000
committerBen Skeggs <bskeggs@redhat.com>2010-03-10 16:29:59 +1000
commit3f804b0f199680e981c70376f55ecc5fe8d16aec (patch)
tree950b89c271f24e1bd37e4a9ccd3ab28b9ce12db6 /src/gallium/drivers/nv50/nv50_vbo.c
parentc926ed0e76bdbf842170f9396856e9cedb6e718f (diff)
nv50: remove horrific abuse of nouveau_channel.flush_notify
Really though, using this at all is just not a good idea in the 3D driver. I'm almost certain the hardware will not like a reloc appearing between begin()/end().. Anyways, this is still better than before, more fixes to come..
Diffstat (limited to 'src/gallium/drivers/nv50/nv50_vbo.c')
-rw-r--r--src/gallium/drivers/nv50/nv50_vbo.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/drivers/nv50/nv50_vbo.c b/src/gallium/drivers/nv50/nv50_vbo.c
index ce2e479cfd..215dfb74fc 100644
--- a/src/gallium/drivers/nv50/nv50_vbo.c
+++ b/src/gallium/drivers/nv50/nv50_vbo.c
@@ -427,6 +427,7 @@ nv50_draw_arrays_instanced(struct pipe_context *pipe,
if (!nv50_state_validate(nv50, 0))
return;
+ chan->flush_notify = nv50_state_flush_notify;
nz_divisors = init_per_instance_arrays(nv50, startInstance, pos, step);
@@ -464,6 +465,8 @@ nv50_draw_arrays_instanced(struct pipe_context *pipe,
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
OUT_RING (chan, 0);
}
+
+ chan->flush_notify = NULL;
nv50_unmap_vbufs(nv50);
so_ref(NULL, &nv50->state.instbuf);
@@ -480,6 +483,7 @@ nv50_draw_arrays(struct pipe_context *pipe, unsigned mode, unsigned start,
if (!nv50_state_validate(nv50, 11))
return;
+ chan->flush_notify = nv50_state_flush_notify;
BEGIN_RING(chan, tesla, 0x142c, 1);
OUT_RING (chan, 0);
@@ -500,6 +504,7 @@ nv50_draw_arrays(struct pipe_context *pipe, unsigned mode, unsigned start,
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
OUT_RING (chan, 0);
+ chan->flush_notify = NULL;
nv50_unmap_vbufs(nv50);
/* XXX: not sure what to do if ret != TRUE: flush and retry?
@@ -637,6 +642,7 @@ nv50_draw_elements_instanced(struct pipe_context *pipe,
if (!nv50_state_validate(nv50, 0))
return;
+ chan->flush_notify = nv50_state_flush_notify;
nz_divisors = init_per_instance_arrays(nv50, startInstance, pos, step);
@@ -664,6 +670,8 @@ nv50_draw_elements_instanced(struct pipe_context *pipe,
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
OUT_RING (chan, 0);
}
+
+ chan->flush_notify = NULL;
nv50_unmap_vbufs(nv50);
so_ref(NULL, &nv50->state.instbuf);
@@ -682,6 +690,7 @@ nv50_draw_elements(struct pipe_context *pipe,
if (!nv50_state_validate(nv50, 14))
return;
+ chan->flush_notify = nv50_state_flush_notify;
BEGIN_RING(chan, tesla, 0x142c, 1);
OUT_RING (chan, 0);
@@ -720,6 +729,7 @@ nv50_draw_elements(struct pipe_context *pipe,
BEGIN_RING(chan, tesla, NV50TCL_VERTEX_END, 1);
OUT_RING (chan, 0);
+ chan->flush_notify = NULL;
}
static INLINE boolean