[intel] Assert against conflicting relocation emits in bufmgr_fake.c
authorEric Anholt <eric@anholt.net>
Tue, 11 Dec 2007 21:21:14 +0000 (13:21 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 12 Dec 2007 23:03:15 +0000 (15:03 -0800)
src/mesa/drivers/dri/common/dri_bufmgr_fake.c

index b9c6bba22aaef37de5596af1c38d6325e4f5b459..5cd96f0821d01da0eab967964f394c233c2b3230 100644 (file)
@@ -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;
 }