diff options
author | Marek Olšák <[email protected]> | 2018-02-22 17:13:51 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2018-03-07 13:55:47 -0500 |
commit | 53db2790c06faa9dd58465b79065f97bc8e0cb62 (patch) | |
tree | a1cb9311782d62dc0fa519a1296e18a62a7d4124 | |
parent | 16856a1ee86f364212674dddf154caa374310a6b (diff) |
radeonsi: add/update assertions for 32-bit address space
-rw-r--r-- | src/gallium/drivers/radeon/r600_buffer_common.c | 15 | ||||
-rw-r--r-- | src/gallium/drivers/radeonsi/si_descriptors.c | 6 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c index 2d64eed1c10..2106b9b3a5e 100644 --- a/src/gallium/drivers/radeon/r600_buffer_common.c +++ b/src/gallium/drivers/radeon/r600_buffer_common.c @@ -218,10 +218,21 @@ bool si_alloc_resource(struct si_screen *sscreen, old_buf = res->buf; res->buf = new_buf; /* should be atomic */ - if (sscreen->info.has_virtual_memory) + if (sscreen->info.has_virtual_memory) { res->gpu_address = sscreen->ws->buffer_get_virtual_address(res->buf); - else + + if (res->flags & RADEON_FLAG_32BIT) { + uint64_t start = res->gpu_address; + uint64_t last = start + res->bo_size - 1; + (void)start; + (void)last; + + assert((start >> 32) == sscreen->info.address32_hi); + assert((last >> 32) == sscreen->info.address32_hi); + } + } else { res->gpu_address = 0; + } pb_reference(&old_buf, NULL); diff --git a/src/gallium/drivers/radeonsi/si_descriptors.c b/src/gallium/drivers/radeonsi/si_descriptors.c index b71815fac5c..07d1420d8ee 100644 --- a/src/gallium/drivers/radeonsi/si_descriptors.c +++ b/src/gallium/drivers/radeonsi/si_descriptors.c @@ -188,6 +188,10 @@ static bool si_upload_descriptors(struct si_context *sctx, buffer_offset -= first_slot_offset; desc->gpu_address = desc->buffer->gpu_address + buffer_offset; + assert(desc->buffer->flags & RADEON_FLAG_32BIT); + assert((desc->buffer->gpu_address >> 32) == sctx->screen->info.address32_hi); + assert((desc->gpu_address >> 32) == sctx->screen->info.address32_hi); + si_mark_atom_dirty(sctx, &sctx->shader_pointers.atom); return true; } @@ -2016,7 +2020,7 @@ static void si_emit_shader_pointer_body(struct si_screen *sscreen, radeon_emit(cs, va); if (HAVE_32BIT_POINTERS) - assert((va >> 32) == sscreen->info.address32_hi); + assert(va == 0 || (va >> 32) == sscreen->info.address32_hi); else radeon_emit(cs, va >> 32); } |