anv/allocator: Add helper to push states back to the state table.
The use of anv_state_table_add() combined with anv_state_table_push(), specially when adding a bunch of states to the table, is very verbose. So we add this helper that makes things easier to digest. We also already add the anv_state_table member in this commit, so things can compile properly, even though it's not used. v2: assert that the states are always aligned to their size (Jason) v3: Add "table" member to anv_state_pool in this commit. Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
@@ -948,6 +948,39 @@ anv_state_pool_get_bucket_size(uint32_t bucket)
|
||||
return 1 << size_log2;
|
||||
}
|
||||
|
||||
/** Helper to push a chunk into the state table.
|
||||
*
|
||||
* It creates 'count' entries into the state table and update their sizes,
|
||||
* offsets and maps, also pushing them as "free" states.
|
||||
*/
|
||||
static void
|
||||
anv_state_pool_return_blocks(struct anv_state_pool *pool,
|
||||
uint32_t chunk_offset, uint32_t count,
|
||||
uint32_t block_size)
|
||||
{
|
||||
if (count == 0)
|
||||
return;
|
||||
|
||||
/* Make sure we always return chunks aligned to the block_size */
|
||||
assert(chunk_offset % block_size == 0);
|
||||
|
||||
uint32_t st_idx;
|
||||
VkResult result = anv_state_table_add(&pool->table, &st_idx, count);
|
||||
assert(result == VK_SUCCESS);
|
||||
for (int i = 0; i < count; i++) {
|
||||
/* update states that were added back to the state table */
|
||||
struct anv_state *state_i = anv_state_table_get(&pool->table,
|
||||
st_idx + i);
|
||||
state_i->alloc_size = block_size;
|
||||
state_i->offset = chunk_offset + block_size * i;
|
||||
state_i->map = anv_block_pool_map(&pool->block_pool, state_i->offset);
|
||||
}
|
||||
|
||||
uint32_t block_bucket = anv_state_pool_get_bucket(block_size);
|
||||
anv_free_list_push2(&pool->buckets[block_bucket].free_list,
|
||||
&pool->table, st_idx, count);
|
||||
}
|
||||
|
||||
static struct anv_state
|
||||
anv_state_pool_alloc_no_vg(struct anv_state_pool *pool,
|
||||
uint32_t size, uint32_t align)
|
||||
|
Reference in New Issue
Block a user