From e33fda373253fa28afec8387d20b243ed8c2dbbb Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 6 Apr 2023 19:08:06 -0400 Subject: [PATCH] lavapipe: copy fragment shader when merging GPL pipelines this otherwise loses access data and causes flakiness with atomic ops Fixes: 6e5fe71599b ("lavapipe: split out shader struct members into their own struct") Reviewed-by: Brian Paul Part-of: --- src/gallium/frontends/lavapipe/lvp_pipeline.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gallium/frontends/lavapipe/lvp_pipeline.c b/src/gallium/frontends/lavapipe/lvp_pipeline.c index 5468abafe80..8fb207dad19 100644 --- a/src/gallium/frontends/lavapipe/lvp_pipeline.c +++ b/src/gallium/frontends/lavapipe/lvp_pipeline.c @@ -830,8 +830,12 @@ lvp_graphics_pipeline_init(struct lvp_pipeline *pipeline, pipeline->shaders[i].tess_ccw = NULL; //this gets handled later } } - if (p->stages & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) + if (p->stages & VK_GRAPHICS_PIPELINE_LIBRARY_FRAGMENT_SHADER_BIT_EXT) { pipeline->force_min_sample = p->force_min_sample; + memcpy(&pipeline->shaders[MESA_SHADER_FRAGMENT], &p->shaders[MESA_SHADER_FRAGMENT], sizeof(struct lvp_shader)); + pipeline->shaders[MESA_SHADER_FRAGMENT].pipeline_nir = NULL; //this gets handled later + pipeline->shaders[MESA_SHADER_FRAGMENT].tess_ccw = NULL; //this gets handled later + } if (p->stages & layout_stages) { if (!layout || (layout->vk.create_flags & VK_PIPELINE_LAYOUT_CREATE_INDEPENDENT_SETS_BIT_EXT)) merge_layouts(&device->vk, pipeline, p->layout);