From 4365d0d7694bc356ce19aeb1a1e5724c16c08271 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 26 Aug 2024 18:10:42 -0500 Subject: [PATCH] lvp: Stash the PipelineCreateFlags2KHR in the pipeline Acked-by: Mike Blumenkrantz Part-of: --- src/gallium/frontends/lavapipe/lvp_pipeline.c | 8 ++++++-- src/gallium/frontends/lavapipe/lvp_private.h | 1 + src/gallium/frontends/lavapipe/lvp_ray_tracing_pipeline.c | 4 ++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c index 58276b14fdf..ff28da2f14a 100644 --- a/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -768,6 +768,7 @@ lvp_graphics_pipeline_init(struct lvp_pipeline *pipeline, VkPipelineCreateFlagBits2KHR flags) { pipeline->type = LVP_PIPELINE_GRAPHICS; + pipeline->flags = flags; VkResult result; @@ -1054,8 +1055,10 @@ static VkResult lvp_compute_pipeline_init(struct lvp_pipeline *pipeline, struct lvp_device *device, struct lvp_pipeline_cache *cache, - const VkComputePipelineCreateInfo *pCreateInfo) + const VkComputePipelineCreateInfo *pCreateInfo, + VkPipelineCreateFlagBits2KHR flags) { + pipeline->flags = flags; pipeline->device = device; pipeline->layout = lvp_pipeline_layout_from_handle(pCreateInfo->layout); vk_pipeline_layout_ref(&pipeline->layout->vk); @@ -1097,7 +1100,7 @@ lvp_compute_pipeline_create( vk_object_base_init(&device->vk, &pipeline->base, VK_OBJECT_TYPE_PIPELINE); uint64_t t0 = os_time_get_nano(); - result = lvp_compute_pipeline_init(pipeline, device, cache, pCreateInfo); + result = lvp_compute_pipeline_init(pipeline, device, cache, pCreateInfo, flags); if (result != VK_SUCCESS) { vk_free(&device->vk.alloc, pipeline); return result; @@ -1357,6 +1360,7 @@ lvp_exec_graph_pipeline_create(VkDevice _device, VkPipelineCache _cache, uint64_t t0 = os_time_get_nano(); pipeline->type = LVP_PIPELINE_EXEC_GRAPH; + pipeline->flags = vk_graph_pipeline_create_flags(create_info); pipeline->layout = lvp_pipeline_layout_from_handle(create_info->layout); pipeline->exec_graph.scratch_size = 0; diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h index 806611a15a0..7e479f7b80e 100644 --- a/src/gallium/frontends/lavapipe/lvp_private.h +++ b/src/gallium/frontends/lavapipe/lvp_private.h @@ -526,6 +526,7 @@ struct lvp_pipeline { struct lvp_pipeline_layout * layout; enum lvp_pipeline_type type; + VkPipelineCreateFlags2KHR flags; void *state_data; bool force_min_sample; diff --git a/src/gallium/frontends/lavapipe/lvp_ray_tracing_pipeline.c b/src/gallium/frontends/lavapipe/lvp_ray_tracing_pipeline.c index c4f563bee01..714699b17f6 100644 --- a/src/gallium/frontends/lavapipe/lvp_ray_tracing_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_ray_tracing_pipeline.c @@ -1133,6 +1133,7 @@ lvp_create_ray_tracing_pipeline(VkDevice _device, const VkAllocationCallbacks *a pipeline->device = device; pipeline->layout = layout; pipeline->type = LVP_PIPELINE_RAY_TRACING; + pipeline->flags = vk_rt_pipeline_create_flags(create_info); pipeline->rt.stage_count = create_info->stageCount; pipeline->rt.group_count = create_info->groupCount; @@ -1157,8 +1158,7 @@ lvp_create_ray_tracing_pipeline(VkDevice _device, const VkAllocationCallbacks *a lvp_init_ray_tracing_groups(pipeline, create_info); - VkPipelineCreateFlags2KHR create_flags = vk_rt_pipeline_create_flags(create_info); - if (!(create_flags & VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR)) { + if (!(pipeline->flags & VK_PIPELINE_CREATE_2_LIBRARY_BIT_KHR)) { lvp_compile_ray_tracing_pipeline(pipeline, create_info); }