From 5d43b8c46ed23498ecb6397d354bafab587c84a3 Mon Sep 17 00:00:00 2001 From: Konstantin Seurer Date: Thu, 7 Mar 2024 19:44:19 +0100 Subject: [PATCH] lavapipe: Add lvp_spirv_to_nir Reviewed-By: Mike Blumenkrantz Part-of: --- src/gallium/frontends/lavapipe/lvp_pipeline.c | 17 +++++++++++++---- src/gallium/frontends/lavapipe/lvp_private.h | 4 ++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c index 85afabf28e3..ed830f275f3 100644 --- a/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -499,6 +499,17 @@ lvp_shader_lower(struct lvp_device *pdevice, struct lvp_pipeline *pipeline, nir_ nir->info.stage); } +VkResult +lvp_spirv_to_nir(struct lvp_pipeline *pipeline, const VkPipelineShaderStageCreateInfo *sinfo, + nir_shader **out_nir) +{ + VkResult result = compile_spirv(pipeline->device, sinfo, out_nir); + if (result == VK_SUCCESS) + lvp_shader_lower(pipeline->device, pipeline, *out_nir, pipeline->layout); + + return result; +} + static void lvp_shader_init(struct lvp_shader *shader, nir_shader *nir) { @@ -514,14 +525,12 @@ static VkResult lvp_shader_compile_to_ir(struct lvp_pipeline *pipeline, const VkPipelineShaderStageCreateInfo *sinfo) { - struct lvp_device *pdevice = pipeline->device; gl_shader_stage stage = vk_to_mesa_shader_stage(sinfo->stage); assert(stage <= LVP_SHADER_STAGES && stage != MESA_SHADER_NONE); - struct lvp_shader *shader = &pipeline->shaders[stage]; nir_shader *nir; - VkResult result = compile_spirv(pdevice, sinfo, &nir); + VkResult result = lvp_spirv_to_nir(pipeline, sinfo, &nir); if (result == VK_SUCCESS) { - lvp_shader_lower(pdevice, pipeline, nir, pipeline->layout); + struct lvp_shader *shader = &pipeline->shaders[stage]; lvp_shader_init(shader, nir); } return result; diff --git a/src/gallium/frontends/lavapipe/lvp_private.h b/src/gallium/frontends/lavapipe/lvp_private.h index 6cd977a97d0..bf18e3a7b98 100644 --- a/src/gallium/frontends/lavapipe/lvp_private.h +++ b/src/gallium/frontends/lavapipe/lvp_private.h @@ -741,6 +741,10 @@ lvp_pipeline_destroy(struct lvp_device *device, struct lvp_pipeline *pipeline, b void queue_thread_noop(void *data, void *gdata, int thread_index); +VkResult +lvp_spirv_to_nir(struct lvp_pipeline *pipeline, const VkPipelineShaderStageCreateInfo *sinfo, + nir_shader **out_nir); + void lvp_shader_optimize(nir_shader *nir); bool