From 3f804b0f199680e981c70376f55ecc5fe8d16aec Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Wed, 3 Mar 2010 14:59:28 +1000 Subject: [PATCH] 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.. --- src/gallium/drivers/nv50/nv50_context.c | 1 - src/gallium/drivers/nv50/nv50_vbo.c | 10 ++++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/nv50/nv50_context.c b/src/gallium/drivers/nv50/nv50_context.c index eff012c14d3..0eb42f323ff 100644 --- a/src/gallium/drivers/nv50/nv50_context.c +++ b/src/gallium/drivers/nv50/nv50_context.c @@ -93,7 +93,6 @@ nv50_create(struct pipe_screen *pscreen, void *priv) nv50->pipe.is_buffer_referenced = nouveau_is_buffer_referenced; screen->base.channel->user_private = nv50; - screen->base.channel->flush_notify = nv50_state_flush_notify; nv50_init_surface_functions(nv50); nv50_init_state_functions(nv50); diff --git a/src/gallium/drivers/nv50/nv50_vbo.c b/src/gallium/drivers/nv50/nv50_vbo.c index ce2e479cfda..215dfb74fc2 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 -- 2.30.2