diff --git a/src/gallium/drivers/zink/zink_program_state.hpp b/src/gallium/drivers/zink/zink_program_state.hpp index bdf3a872a89..f9111fa7abb 100644 --- a/src/gallium/drivers/zink/zink_program_state.hpp +++ b/src/gallium/drivers/zink/zink_program_state.hpp @@ -216,21 +216,25 @@ zink_get_gfx_pipeline(struct zink_context *ctx, pc_entry->gpl.okey = okey; /* create the non-optimized pipeline first using fast-linking to avoid stuttering */ pipeline = zink_create_gfx_pipeline_combined(screen, prog, ikey->pipeline, &gkey->pipeline, 1, okey->pipeline, false); + pc_entry->pipeline = pipeline; + if (!prog->is_separable) + /* trigger async optimized pipeline compile if this was the fast-linked unoptimized pipeline */ + zink_gfx_program_compile_queue(ctx, pc_entry); } else { /* optimize by default only when expecting precompiles in order to reduce stuttering */ if (DYNAMIC_STATE != ZINK_DYNAMIC_VERTEX_INPUT2 && DYNAMIC_STATE != ZINK_DYNAMIC_VERTEX_INPUT) pipeline = zink_create_gfx_pipeline(screen, prog, prog->objs, state, state->element_state->binding_map, vkmode, !HAVE_LIB, NULL); else pipeline = zink_create_gfx_pipeline(screen, prog, prog->objs, state, NULL, vkmode, !HAVE_LIB, NULL); + pc_entry->pipeline = pipeline; + if (HAVE_LIB && !prog->is_separable) + /* trigger async optimized pipeline compile if this was an unoptimized pipeline */ + zink_gfx_program_compile_queue(ctx, pc_entry); } if (pipeline == VK_NULL_HANDLE) return VK_NULL_HANDLE; zink_screen_update_pipeline_cache(screen, &prog->base, false); - pc_entry->pipeline = pipeline; - if (HAVE_LIB && !prog->is_separable) - /* trigger async optimized pipeline compile if this was the fast-linked unoptimized pipeline */ - zink_gfx_program_compile_queue(ctx, pc_entry); } struct zink_gfx_pipeline_cache_entry *cache_entry = (struct zink_gfx_pipeline_cache_entry *)entry->data;