[intel] Assert against conflicting relocation emits in bufmgr_fake.c
[mesa.git] / 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;
 }