mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 11:28:05 +02:00
r600g/compute: Add a function for defragmenting the pool
This new function will move items forward in the pool, so that there's no gap between them, effectively defragmenting the pool. For now this function is a bit dumb as it just moves items forward without trying to see if other items in the pool could fit in the gaps. Reviewed-by: Tom Stellard <thomas.stellard@amd.com>
This commit is contained in:
parent
1f705b2bee
commit
d8b6f0dacb
2 changed files with 28 additions and 0 deletions
|
|
@ -302,6 +302,30 @@ int compute_memory_finalize_pending(struct compute_memory_pool* pool,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Defragments the pool, so that there's no gap between items.
|
||||
* \param pool The pool to be defragmented
|
||||
*/
|
||||
void compute_memory_defrag(struct compute_memory_pool *pool,
|
||||
struct pipe_context *pipe)
|
||||
{
|
||||
struct compute_memory_item *item;
|
||||
int64_t last_pos;
|
||||
|
||||
COMPUTE_DBG(pool->screen, "* compute_memory_defrag()\n");
|
||||
|
||||
last_pos = 0;
|
||||
LIST_FOR_EACH_ENTRY(item, pool->item_list, link) {
|
||||
if (item->start_in_dw != last_pos) {
|
||||
assert(last_pos < item->start_in_dw);
|
||||
|
||||
compute_memory_move_item(pool, item, last_pos, pipe);
|
||||
}
|
||||
|
||||
last_pos += align(item->size_in_dw, ITEM_ALIGNMENT);
|
||||
}
|
||||
}
|
||||
|
||||
int compute_memory_promote_item(struct compute_memory_pool *pool,
|
||||
struct compute_memory_item *item, struct pipe_context *pipe,
|
||||
int64_t allocated)
|
||||
|
|
@ -417,6 +441,7 @@ void compute_memory_demote_item(struct compute_memory_pool *pool,
|
|||
*
|
||||
* \param item The item that will be moved
|
||||
* \param new_start_in_dw The new position of the item in \a item_list
|
||||
* \see compute_memory_defrag
|
||||
*/
|
||||
void compute_memory_move_item(struct compute_memory_pool *pool,
|
||||
struct compute_memory_item *item, uint64_t new_start_in_dw,
|
||||
|
|
|
|||
|
|
@ -86,6 +86,9 @@ void compute_memory_shadow(struct compute_memory_pool* pool,
|
|||
int compute_memory_finalize_pending(struct compute_memory_pool* pool,
|
||||
struct pipe_context * pipe);
|
||||
|
||||
void compute_memory_defrag(struct compute_memory_pool *pool,
|
||||
struct pipe_context *pipe);
|
||||
|
||||
int compute_memory_promote_item(struct compute_memory_pool *pool,
|
||||
struct compute_memory_item *item, struct pipe_context *pipe,
|
||||
int64_t allocated);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue