zink: use a slab allocator for zink_kopper_present_info

this improves perf slightly at extremely high fps

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27867>
This commit is contained in:
Mike Blumenkrantz
2024-02-13 14:13:22 -05:00
committed by Marge Bot
parent cdd1ce140d
commit 738fbddca8
3 changed files with 5 additions and 2 deletions

View File

@@ -760,7 +760,7 @@ out:
struct pipe_resource *pres = &cpi->res->base.b;
pipe_resource_reference(&pres, NULL);
}
free(cpi);
slab_free_st(&screen->present_mempool, cpi);
}
void
@@ -775,7 +775,7 @@ zink_kopper_present_queue(struct zink_screen *screen, struct zink_resource *res)
if (cdt->swapchain->last_present != UINT32_MAX)
prune_old_swapchains(screen, cdt, false);
struct zink_kopper_present_info *cpi = malloc(sizeof(struct zink_kopper_present_info));
struct zink_kopper_present_info *cpi = slab_alloc_st(&screen->present_mempool);
if (!cpi) {
mesa_loge("ZINK: failed to allocate cpi!");
return;

View File

@@ -1619,6 +1619,7 @@ zink_destroy_screen(struct pipe_screen *pscreen)
close(screen->drm_fd);
slab_destroy_parent(&screen->transfer_pool);
slab_destroy(&screen->present_mempool);
ralloc_free(screen);
glsl_type_singleton_decref();
}
@@ -3488,6 +3489,7 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
populate_format_props(screen);
slab_create_parent(&screen->transfer_pool, sizeof(struct zink_transfer), 16);
slab_create(&screen->present_mempool, sizeof(struct zink_kopper_present_info), 16);
screen->driconf.inline_uniforms = debug_get_bool_option("ZINK_INLINE_UNIFORMS", screen->is_cpu) && !(zink_debug & ZINK_DEBUG_DGC);

View File

@@ -1434,6 +1434,7 @@ struct zink_screen {
bool device_lost;
int drm_fd;
struct slab_mempool present_mempool;
struct slab_parent_pool transfer_pool;
struct disk_cache *disk_cache;
struct util_queue cache_put_thread;