OSDN Git Service

nvc0: keep track of cb bindings per buffer, use for upload settings
authorIlia Mirkin <imirkin@alum.mit.edu>
Wed, 9 Sep 2015 07:17:38 +0000 (03:17 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 9 Sep 2015 20:29:21 +0000 (16:29 -0400)
commite50c01d5af305e07110cb4a38d5a655437058f04
tree3c4869b94b4024f59bd788a72170a8f482e1c488
parentb828f7a27b2b8d6b90e646c08dfa25e1d737a9bb
nvc0: keep track of cb bindings per buffer, use for upload settings

CB updates to bound buffers need to go through the CB_DATA endpoints,
otherwise the shader may not notice that the updates happened.
Furthermore, these updates have to go in to the same address as the
bound buffer, otherwise, again, the shader may not notice updates.

So we keep track of all the places where a constbuf is bound, and
iterate over all of them when updating data. If a binding is found that
encompasses the region to be updated, then we use the settings of that
binding for the upload. Otherwise we upload as a regular data update.

This fixes piglit 'arb_uniform_buffer_object-rendering offset' as well
as blurriness in Witcher2.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91890
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Cc: "11.0" <mesa-stable@lists.freedesktop.org>
src/gallium/drivers/nouveau/nouveau_buffer.c
src/gallium/drivers/nouveau/nouveau_buffer.h
src/gallium/drivers/nouveau/nouveau_context.h
src/gallium/drivers/nouveau/nvc0/nvc0_context.h
src/gallium/drivers/nouveau/nvc0/nvc0_state.c
src/gallium/drivers/nouveau/nvc0/nvc0_state_validate.c
src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c