diff options
author | Ilia Mirkin <[email protected]> | 2015-06-21 15:00:16 -0400 |
---|---|---|
committer | Ilia Mirkin <[email protected]> | 2015-06-23 12:08:34 -0400 |
commit | 9fcbf515b431a92e0289f234ab77a796cf2a5612 (patch) | |
tree | 7bac462ea696ddd0656c815929dbae53fd0d5378 | |
parent | fccf012adc0d3aad877de095244324aa1d2d046a (diff) |
nvc0: always put all tfb bufs into bufctx
Since we clear the TFB bufctx binding point above, we need to put all of
the active tfb's back in, even if they haven't changed since last time.
Otherwise the tfb may get moved into sysmem and the underlying mapping
will generate write errors.
Signed-off-by: Ilia Mirkin <[email protected]>
Cc: "10.5 10.6" <[email protected]>
-rw-r--r-- | src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c index c9b5a5cbfc1..e0842784a88 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c @@ -262,11 +262,13 @@ nvc0_tfb_validate(struct nvc0_context *nvc0) if (tfb) targ->stride = tfb->stride[b]; + buf = nv04_resource(targ->pipe.buffer); + + BCTX_REFN(nvc0->bufctx_3d, TFB, buf, WR); + if (!(nvc0->tfbbuf_dirty & (1 << b))) continue; - buf = nv04_resource(targ->pipe.buffer); - if (!targ->clean) nvc0_query_fifo_wait(push, targ->pq); BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5); @@ -280,7 +282,6 @@ nvc0_tfb_validate(struct nvc0_context *nvc0) PUSH_DATA(push, 0); /* TFB_BUFFER_OFFSET */ targ->clean = FALSE; } - BCTX_REFN(nvc0->bufctx_3d, TFB, buf, WR); } for (; b < 4; ++b) IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0); |