mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-25 02:10:11 +01:00
zink: create a VkPipelineCache object on the screen and use it
this enables reuse of shaders across pipelines Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9094>
This commit is contained in:
parent
de6ed18584
commit
eb3cb170fc
3 changed files with 13 additions and 2 deletions
|
|
@ -181,7 +181,7 @@ zink_create_gfx_pipeline(struct zink_screen *screen,
|
|||
pci.stageCount = num_stages;
|
||||
|
||||
VkPipeline pipeline;
|
||||
if (vkCreateGraphicsPipelines(screen->dev, VK_NULL_HANDLE, 1, &pci,
|
||||
if (vkCreateGraphicsPipelines(screen->dev, screen->pipeline_cache, 1, &pci,
|
||||
NULL, &pipeline) != VK_SUCCESS) {
|
||||
debug_printf("vkCreateGraphicsPipelines failed\n");
|
||||
return VK_NULL_HANDLE;
|
||||
|
|
@ -207,7 +207,7 @@ zink_create_compute_pipeline(struct zink_screen *screen, struct zink_compute_pro
|
|||
pci.stage = stage;
|
||||
|
||||
VkPipeline pipeline;
|
||||
if (vkCreateComputePipelines(screen->dev, VK_NULL_HANDLE, 1, &pci,
|
||||
if (vkCreateComputePipelines(screen->dev, screen->pipeline_cache, 1, &pci,
|
||||
NULL, &pipeline) != VK_SUCCESS) {
|
||||
debug_printf("vkCreateComputePipelines failed\n");
|
||||
return VK_NULL_HANDLE;
|
||||
|
|
|
|||
|
|
@ -772,6 +772,7 @@ zink_destroy_screen(struct pipe_screen *pscreen)
|
|||
}
|
||||
|
||||
u_transfer_helper_destroy(pscreen->transfer_helper);
|
||||
vkDestroyPipelineCache(screen->dev, screen->pipeline_cache, NULL);
|
||||
|
||||
vkDestroyDevice(screen->dev, NULL);
|
||||
vkDestroyInstance(screen->instance, NULL);
|
||||
|
|
@ -1230,6 +1231,15 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
|
|||
|
||||
zink_screen_init_compiler(screen);
|
||||
|
||||
VkPipelineCacheCreateInfo pcci;
|
||||
pcci.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
|
||||
pcci.pNext = NULL;
|
||||
/* we're single-threaded now, so we don't need synchronization */
|
||||
pcci.flags = screen->info.have_EXT_pipeline_creation_cache_control ? VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT : 0;
|
||||
pcci.initialDataSize = 0;
|
||||
pcci.pInitialData = NULL;
|
||||
vkCreatePipelineCache(screen->dev, &pcci, NULL, &screen->pipeline_cache);
|
||||
|
||||
slab_create_parent(&screen->transfer_pool, sizeof(struct zink_transfer), 16);
|
||||
|
||||
return screen;
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ struct zink_screen {
|
|||
struct sw_winsys *winsys;
|
||||
|
||||
struct slab_parent_pool transfer_pool;
|
||||
VkPipelineCache pipeline_cache;
|
||||
|
||||
unsigned shader_id;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue