diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/drivers/dri/common/dri_bufmgr_fake.c | 12 |
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; } |