summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/common/dri_bufmgr_fake.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/common/dri_bufmgr_fake.c b/src/mesa/drivers/dri/common/dri_bufmgr_fake.c
index b9c6bba22a..5cd96f0821 100644
--- a/src/mesa/drivers/dri/common/dri_bufmgr_fake.c
+++ b/src/mesa/drivers/dri/common/dri_bufmgr_fake.c
@@ -962,6 +962,7 @@ dri_fake_emit_reloc(dri_bo *reloc_buf, uint64_t flags, GLuint delta,
struct fake_buffer_reloc *r = &bufmgr_fake->reloc[bufmgr_fake->nr_relocs++];
dri_bo_fake *target_fake = (dri_bo_fake *)target_buf;
dri_bo_fake *reloc_fake = (dri_bo_fake *)reloc_buf;
+ int i;
assert(bufmgr_fake->nr_relocs <= MAX_RELOCS);
@@ -987,6 +988,17 @@ dri_fake_emit_reloc(dri_bo *reloc_buf, uint64_t flags, GLuint delta,
r->delta = delta;
r->validate_flags = flags;
+ /* Check that a conflicting relocation hasn't already been emitted. */
+ for (i = 0; i < bufmgr_fake->nr_relocs - 1; i++) {
+ struct fake_buffer_reloc *r2 = &bufmgr_fake->reloc[i];
+
+ assert(r->reloc_buf != r2->reloc_buf ||
+ r->offset != r2->offset ||
+ (r->target_buf == r2->target_buf &&
+ r->delta == r2->delta &&
+ r->validate_flags == r2->validate_flags));
+ }
+
return;
}