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:

committed by
Marge Bot

parent
cdd1ce140d
commit
738fbddca8
@@ -760,7 +760,7 @@ out:
|
|||||||
struct pipe_resource *pres = &cpi->res->base.b;
|
struct pipe_resource *pres = &cpi->res->base.b;
|
||||||
pipe_resource_reference(&pres, NULL);
|
pipe_resource_reference(&pres, NULL);
|
||||||
}
|
}
|
||||||
free(cpi);
|
slab_free_st(&screen->present_mempool, cpi);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -775,7 +775,7 @@ zink_kopper_present_queue(struct zink_screen *screen, struct zink_resource *res)
|
|||||||
if (cdt->swapchain->last_present != UINT32_MAX)
|
if (cdt->swapchain->last_present != UINT32_MAX)
|
||||||
prune_old_swapchains(screen, cdt, false);
|
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) {
|
if (!cpi) {
|
||||||
mesa_loge("ZINK: failed to allocate cpi!");
|
mesa_loge("ZINK: failed to allocate cpi!");
|
||||||
return;
|
return;
|
||||||
|
@@ -1619,6 +1619,7 @@ zink_destroy_screen(struct pipe_screen *pscreen)
|
|||||||
close(screen->drm_fd);
|
close(screen->drm_fd);
|
||||||
|
|
||||||
slab_destroy_parent(&screen->transfer_pool);
|
slab_destroy_parent(&screen->transfer_pool);
|
||||||
|
slab_destroy(&screen->present_mempool);
|
||||||
ralloc_free(screen);
|
ralloc_free(screen);
|
||||||
glsl_type_singleton_decref();
|
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);
|
populate_format_props(screen);
|
||||||
|
|
||||||
slab_create_parent(&screen->transfer_pool, sizeof(struct zink_transfer), 16);
|
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);
|
screen->driconf.inline_uniforms = debug_get_bool_option("ZINK_INLINE_UNIFORMS", screen->is_cpu) && !(zink_debug & ZINK_DEBUG_DGC);
|
||||||
|
|
||||||
|
@@ -1434,6 +1434,7 @@ struct zink_screen {
|
|||||||
bool device_lost;
|
bool device_lost;
|
||||||
int drm_fd;
|
int drm_fd;
|
||||||
|
|
||||||
|
struct slab_mempool present_mempool;
|
||||||
struct slab_parent_pool transfer_pool;
|
struct slab_parent_pool transfer_pool;
|
||||||
struct disk_cache *disk_cache;
|
struct disk_cache *disk_cache;
|
||||||
struct util_queue cache_put_thread;
|
struct util_queue cache_put_thread;
|
||||||
|
Reference in New Issue
Block a user