venus: refactor query record recycle

Add a new free helper while renaming the alloc one as well. During query
record resolving, use a dropped list to store those records being reset.
This is to prepare for later further query record resolving.

This change also simplifies a query pool compare.

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28112>
This commit is contained in:
Yiwei Zhang
2024-03-09 22:49:54 -08:00
committed by Marge Bot
parent 2a7085584e
commit aabb52979a
3 changed files with 45 additions and 48 deletions
+8 -11
View File
@@ -490,11 +490,11 @@ vn_cmd_transfer_present_src_images(
}
struct vn_cmd_query_record *
vn_cmd_query_record_alloc(struct vn_command_pool *cmd_pool,
struct vn_query_pool *query_pool,
uint32_t query,
uint32_t query_count,
bool copy)
vn_cmd_pool_alloc_query_record(struct vn_command_pool *cmd_pool,
struct vn_query_pool *query_pool,
uint32_t query,
uint32_t query_count,
bool copy)
{
struct vn_cmd_query_record *record;
if (list_is_empty(&cmd_pool->free_query_records)) {
@@ -522,12 +522,10 @@ vn_cmd_merge_query_records(struct vn_command_buffer *primary_cmd,
{
list_for_each_entry_safe(struct vn_cmd_query_record, secondary_record,
&secondary_cmd->builder.query_records, head) {
struct vn_cmd_query_record *record = vn_cmd_query_record_alloc(
struct vn_cmd_query_record *record = vn_cmd_pool_alloc_query_record(
primary_cmd->pool, secondary_record->query_pool,
secondary_record->query, secondary_record->query_count,
secondary_record->copy);
if (!record) {
primary_cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;
return;
@@ -688,8 +686,7 @@ vn_cmd_reset(struct vn_command_buffer *cmd)
/* reset cmd builder */
vk_free(&cmd->pool->allocator, cmd->builder.present_src_images);
list_splicetail(&cmd->builder.query_records,
&cmd->pool->free_query_records);
vn_cmd_pool_free_query_records(cmd->pool, &cmd->builder.query_records);
memset(&cmd->builder, 0, sizeof(cmd->builder));
list_inithead(&cmd->builder.query_records);
@@ -1756,7 +1753,7 @@ vn_cmd_record_query(VkCommandBuffer cmd_handle,
return;
struct vn_command_buffer *cmd = vn_command_buffer_from_handle(cmd_handle);
struct vn_cmd_query_record *record = vn_cmd_query_record_alloc(
struct vn_cmd_query_record *record = vn_cmd_pool_alloc_query_record(
cmd->pool, query_pool, query, query_count, copy);
if (!record) {
cmd->state = VN_COMMAND_BUFFER_STATE_INVALID;