From e8b6e0a5ba888d2b5d188cf06d962b6d8bc35332 Mon Sep 17 00:00:00 2001 From: Rafael Antognolli Date: Wed, 21 Nov 2018 11:24:59 -0800 Subject: [PATCH] anv/allocator: Add getter for anv_block_pool. We will need the anv_block_pool_map to find the map relative to some BO that is not at the start of the block pool. v2: just return a pointer instead of a struct (Jason) v4: Update comment (Jason) Reviewed-by: Jason Ekstrand --- src/intel/vulkan/anv_allocator.c | 14 +++++++++++++- src/intel/vulkan/anv_batch_chain.c | 4 ++-- src/intel/vulkan/anv_private.h | 1 + src/intel/vulkan/genX_blorp_exec.c | 4 ++-- 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/intel/vulkan/anv_allocator.c b/src/intel/vulkan/anv_allocator.c index 04ef05f..e4b8dd5 100644 --- a/src/intel/vulkan/anv_allocator.c +++ b/src/intel/vulkan/anv_allocator.c @@ -652,6 +652,18 @@ anv_block_pool_expand_range(struct anv_block_pool *pool, return VK_SUCCESS; } +/** Returns current memory map of the block pool. + * + * The returned pointer points to the map for the memory at the specified + * offset. The offset parameter is relative to the "center" of the block pool + * rather than the start of the block pool BO map. + */ +void* +anv_block_pool_map(struct anv_block_pool *pool, int32_t offset) +{ + return pool->map + offset; +} + /** Grows and re-centers the block pool. * * We grow the block pool in one or both directions in such a way that the @@ -1021,7 +1033,7 @@ anv_state_pool_alloc_no_vg(struct anv_state_pool *pool, pool->block_size); done: - state.map = pool->block_pool.map + state.offset; + state.map = anv_block_pool_map(&pool->block_pool, state.offset); return state; } diff --git a/src/intel/vulkan/anv_batch_chain.c b/src/intel/vulkan/anv_batch_chain.c index a41305b..c5f05e5 100644 --- a/src/intel/vulkan/anv_batch_chain.c +++ b/src/intel/vulkan/anv_batch_chain.c @@ -678,8 +678,8 @@ anv_cmd_buffer_alloc_binding_table(struct anv_cmd_buffer *cmd_buffer, return (struct anv_state) { 0 }; state.offset = cmd_buffer->bt_next; - state.map = anv_binding_table_pool(device)->block_pool.map + - bt_block->offset + state.offset; + state.map = anv_block_pool_map(&anv_binding_table_pool(device)->block_pool, + bt_block->offset + state.offset); cmd_buffer->bt_next += state.alloc_size; diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index d88cb54..129dd14 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -771,6 +771,7 @@ int32_t anv_block_pool_alloc(struct anv_block_pool *pool, uint32_t block_size); int32_t anv_block_pool_alloc_back(struct anv_block_pool *pool, uint32_t block_size); +void* anv_block_pool_map(struct anv_block_pool *pool, int32_t offset); VkResult anv_state_pool_init(struct anv_state_pool *pool, struct anv_device *device, diff --git a/src/intel/vulkan/genX_blorp_exec.c b/src/intel/vulkan/genX_blorp_exec.c index f5e9e42..1782125 100644 --- a/src/intel/vulkan/genX_blorp_exec.c +++ b/src/intel/vulkan/genX_blorp_exec.c @@ -63,8 +63,8 @@ blorp_surface_reloc(struct blorp_batch *batch, uint32_t ss_offset, if (result != VK_SUCCESS) anv_batch_set_error(&cmd_buffer->batch, result); - void *dest = cmd_buffer->device->surface_state_pool.block_pool.map + - ss_offset; + void *dest = anv_block_pool_map( + &cmd_buffer->device->surface_state_pool.block_pool, ss_offset); uint64_t val = ((struct anv_bo*)address.buffer)->offset + address.offset + delta; write_reloc(cmd_buffer->device, dest, val, false); -- 2.7.4