summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Packard <[email protected]>2013-11-22 05:39:15 -0800
committerKenneth Graunke <[email protected]>2013-12-20 16:18:37 -0800
commitc426fb08cfd973b255d6e97d99350efc38b740ed (patch)
treeba0dcf50a38412780e06a5a7efdfe89eafe42103
parentca2012a912dcd3d671071ad7472c8a7c570745f2 (diff)
i965: Correct check for re-bound buffer in intel_update_image_buffer
The buffer-object is the persistent thing passed through the loader, so when updating an image buffer, check to see if it is already bound to the provided bo. The region, on the other hand, is allocated separately for the miptree, and so will never be the same as that passed back from the loader. Signed-off-by: Keith Packard <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 688091fa49e..78c06fcd680 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -1303,10 +1303,21 @@ intel_update_image_buffer(struct brw_context *intel,
unsigned num_samples = rb->Base.Base.NumSamples;
- if (rb->mt &&
- rb->mt->region &&
- rb->mt->region == region)
- return;
+ /* Check and see if we're already bound to the right
+ * buffer object
+ */
+ if (num_samples == 0) {
+ if (rb->mt &&
+ rb->mt->region &&
+ rb->mt->region->bo == region->bo)
+ return;
+ } else {
+ if (rb->mt &&
+ rb->mt->singlesample_mt &&
+ rb->mt->singlesample_mt->region &&
+ rb->mt->singlesample_mt->region->bo == region->bo)
+ return;
+ }
intel_miptree_release(&rb->mt);
rb->mt = intel_miptree_create_for_image_buffer(intel,