From ac7d0e0f0437aff538a45ab40659ac463c9dbfd1 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 15 Nov 2022 01:46:46 -0500 Subject: [PATCH] import mesa-22.1.5-2.el9 --- .gitignore | 2 +- .mesa.metadata | 2 +- ...mplement-inter-context-busy-tracking.patch | 58 ----- ...rendering-before-flushing-frontbuffe.patch | 39 +++ ...st_fence-a-screen-rast-object-not-a-.patch | 229 ++++++++++++++++++ ...ntext-list-and-use-to-track-resource.patch | 145 +++++++++++ SPECS/mesa.spec | 41 ++-- 7 files changed, 439 insertions(+), 77 deletions(-) delete mode 100644 SOURCES/0001-iris-implement-inter-context-busy-tracking.patch create mode 100644 SOURCES/0001-llvmpipe-finish-rendering-before-flushing-frontbuffe.patch create mode 100644 SOURCES/0001-llvmpipe-make-last_fence-a-screen-rast-object-not-a-.patch create mode 100644 SOURCES/0002-llvmpipe-keep-context-list-and-use-to-track-resource.patch diff --git a/.gitignore b/.gitignore index 7150d62..4baef01 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/mesa-21.3.4.tar.xz +SOURCES/mesa-22.1.5.tar.xz diff --git a/.mesa.metadata b/.mesa.metadata index 7db4db6..1e7aae7 100644 --- a/.mesa.metadata +++ b/.mesa.metadata @@ -1 +1 @@ -80187e8dd7701a931676058ce456de008fdcaf8c SOURCES/mesa-21.3.4.tar.xz +d2e6d071e560c0f92a519a7c4b38d4c43f6dae19 SOURCES/mesa-22.1.5.tar.xz diff --git a/SOURCES/0001-iris-implement-inter-context-busy-tracking.patch b/SOURCES/0001-iris-implement-inter-context-busy-tracking.patch deleted file mode 100644 index cc50a4b..0000000 --- a/SOURCES/0001-iris-implement-inter-context-busy-tracking.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 07dc3d4238e57901ccf98e0b506d9aad2c86b9d9 Mon Sep 17 00:00:00 2001 -From: Paulo Zanoni -Date: Mon, 10 Jan 2022 17:18:05 -0800 -Subject: [PATCH] iris: implement inter-context busy-tracking - -Previously, no buffers were ever marked as EXEC_OBJECT_ASYNC so the -Kernel would ensure dependency tracking for us. After we implemented -explicit busy tracking in commit 89a34cb8450a, only the external -objects kept relying on the Kernel's implicit tracking and Iris did -inter-batch busy tracking, meaning we lost inter-screen and -inter-context synchronization. This seemed fine to me since, as far as -I understood, it is the duty of the application to synchronize itself -against multiple screens and contexts. - -The problem here is that applications were actually relying on the old -behavior where the Kernel guarantees synchronization, so 89a34cb8450a -can be seen as a regression. This commit addresses the inter-context -synchronization case. - -Cc: mesa-stable -Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5731 -Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/5812 -Fixes: 89a34cb8450a ("iris: switch to explicit busy tracking") -Tested-by: Konstantin Kharlamov -Signed-off-by: Paulo Zanoni ---- - src/gallium/drivers/iris/iris_batch.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/gallium/drivers/iris/iris_batch.c b/src/gallium/drivers/iris/iris_batch.c -index b7bde60aae7..1b0c5896d4f 100644 ---- a/src/gallium/drivers/iris/iris_batch.c -+++ b/src/gallium/drivers/iris/iris_batch.c -@@ -835,6 +835,12 @@ update_bo_syncobjs(struct iris_batch *batch, struct iris_bo *bo, bool write) - move_syncobj_to_batch(batch, &deps->write_syncobjs[other_batch_idx], - I915_EXEC_FENCE_WAIT); - -+ /* If it's being written by our screen, wait on it too. This is relevant -+ * when there are multiple contexts on the same screen. */ -+ if (deps->write_syncobjs[batch_idx]) -+ move_syncobj_to_batch(batch, &deps->write_syncobjs[batch_idx], -+ I915_EXEC_FENCE_WAIT); -+ - struct iris_syncobj *batch_syncobj = iris_batch_get_signal_syncobj(batch); - - if (write) { -@@ -847,6 +853,8 @@ update_bo_syncobjs(struct iris_batch *batch, struct iris_bo *bo, bool write) - - move_syncobj_to_batch(batch, &deps->read_syncobjs[other_batch_idx], - I915_EXEC_FENCE_WAIT); -+ move_syncobj_to_batch(batch, &deps->read_syncobjs[batch_idx], -+ I915_EXEC_FENCE_WAIT); - - } else { - /* If we're reading, replace the other read from our batch index. */ --- -GitLab - diff --git a/SOURCES/0001-llvmpipe-finish-rendering-before-flushing-frontbuffe.patch b/SOURCES/0001-llvmpipe-finish-rendering-before-flushing-frontbuffe.patch new file mode 100644 index 0000000..ed8508e --- /dev/null +++ b/SOURCES/0001-llvmpipe-finish-rendering-before-flushing-frontbuffe.patch @@ -0,0 +1,39 @@ +From 0db29ee48d4f4fd0858bcf7def39926e2ee19d63 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Thu, 1 Sep 2022 11:37:27 +1000 +Subject: [PATCH] llvmpipe: finish rendering before flushing frontbuffer + resources. + +Fixes misrendering on front with mesa demos +--- + src/gallium/drivers/llvmpipe/lp_screen.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c +index 333d7695ee7..0fcbcccedd2 100644 +--- a/src/gallium/drivers/llvmpipe/lp_screen.c ++++ b/src/gallium/drivers/llvmpipe/lp_screen.c +@@ -51,6 +51,7 @@ + #include "lp_limits.h" + #include "lp_rast.h" + #include "lp_cs_tpool.h" ++#include "lp_flush.h" + + #include "frontend/sw_winsys.h" + +@@ -835,8 +836,11 @@ llvmpipe_flush_frontbuffer(struct pipe_screen *_screen, + struct llvmpipe_resource *texture = llvmpipe_resource(resource); + + assert(texture->dt); +- if (texture->dt) ++ ++ if (texture->dt) { ++ llvmpipe_flush_resource(_pipe, resource, 0, true, true, false, "frontbuffer"); + winsys->displaytarget_display(winsys, texture->dt, context_private, sub_box); ++ } + } + + static void +-- +2.31.1 + diff --git a/SOURCES/0001-llvmpipe-make-last_fence-a-screen-rast-object-not-a-.patch b/SOURCES/0001-llvmpipe-make-last_fence-a-screen-rast-object-not-a-.patch new file mode 100644 index 0000000..948d460 --- /dev/null +++ b/SOURCES/0001-llvmpipe-make-last_fence-a-screen-rast-object-not-a-.patch @@ -0,0 +1,229 @@ +From 64e7c42f1b68250d2280320e01da2f5a0c4b07eb Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Fri, 22 Jul 2022 11:12:58 +1000 +Subject: [PATCH 1/2] llvmpipe: make last_fence a screen/rast object not a + context one. + +When a flush happens the per-context setup is used to hold the fence +for the last scene sent to the rasterizer. However when multiple +contexts are in use, this fence won't get returned to be blocked on. + +Instead move the last fence to the rasterizer object, and return +that instead as it should be valid across contexts. + +Fixes gtk4 bugs on llvmpipe since overlapping vertex/fragment. + +Fixes: 6bbbe15a783a ("Reinstate: llvmpipe: allow vertex processing and fragment processing in parallel") +Acked-by: Mike Blumenkrantz +Part-of: +--- + src/gallium/drivers/llvmpipe/lp_flush.c | 12 ++++++--- + src/gallium/drivers/llvmpipe/lp_rast.c | 14 +++++++++- + src/gallium/drivers/llvmpipe/lp_rast.h | 3 ++- + src/gallium/drivers/llvmpipe/lp_rast_priv.h | 2 ++ + src/gallium/drivers/llvmpipe/lp_setup.c | 26 +++++-------------- + src/gallium/drivers/llvmpipe/lp_setup.h | 1 - + .../drivers/llvmpipe/lp_setup_context.h | 1 - + 7 files changed, 33 insertions(+), 26 deletions(-) + +diff --git a/src/gallium/drivers/llvmpipe/lp_flush.c b/src/gallium/drivers/llvmpipe/lp_flush.c +index c231f334eaf..c72944232e7 100644 +--- a/src/gallium/drivers/llvmpipe/lp_flush.c ++++ b/src/gallium/drivers/llvmpipe/lp_flush.c +@@ -38,7 +38,9 @@ + #include "lp_flush.h" + #include "lp_context.h" + #include "lp_setup.h" +- ++#include "lp_fence.h" ++#include "lp_screen.h" ++#include "lp_rast.h" + + /** + * \param fence if non-null, returns pointer to a fence which can be waited on +@@ -49,11 +51,15 @@ llvmpipe_flush( struct pipe_context *pipe, + const char *reason) + { + struct llvmpipe_context *llvmpipe = llvmpipe_context(pipe); +- ++ struct llvmpipe_screen *screen = llvmpipe_screen(pipe->screen); + draw_flush(llvmpipe->draw); + + /* ask the setup module to flush */ +- lp_setup_flush(llvmpipe->setup, fence, reason); ++ lp_setup_flush(llvmpipe->setup, reason); ++ ++ lp_rast_fence(screen->rast, (struct lp_fence **)fence); ++ if (fence && (!*fence)) ++ *fence = (struct pipe_fence_handle *)lp_fence_create(0); + + /* Enable to dump BMPs of the color/depth buffers each frame */ + if (0) { +diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c +index e27d78a3432..6cdaa51b62d 100644 +--- a/src/gallium/drivers/llvmpipe/lp_rast.c ++++ b/src/gallium/drivers/llvmpipe/lp_rast.c +@@ -47,6 +47,7 @@ + #include "gallivm/lp_bld_format.h" + #include "gallivm/lp_bld_debug.h" + #include "lp_scene.h" ++#include "lp_screen.h" + #include "lp_tex_sample.h" + + +@@ -1128,6 +1129,10 @@ lp_rast_queue_scene( struct lp_rasterizer *rast, + { + LP_DBG(DEBUG_SETUP, "%s\n", __FUNCTION__); + ++ lp_fence_reference(&rast->last_fence, scene->fence); ++ if (rast->last_fence) ++ rast->last_fence->issued = TRUE; ++ + if (rast->num_threads == 0) { + /* no threading */ + unsigned fpstate = util_fpstate_get(); +@@ -1384,6 +1389,8 @@ void lp_rast_destroy( struct lp_rasterizer *rast ) + align_free(rast->tasks[i].thread_data.cache); + } + ++ lp_fence_reference(&rast->last_fence, NULL); ++ + /* for synchronizing rasterization threads */ + if (rast->num_threads > 0) { + util_barrier_destroy( &rast->barrier ); +@@ -1394,4 +1401,9 @@ void lp_rast_destroy( struct lp_rasterizer *rast ) + FREE(rast); + } + +- ++void lp_rast_fence(struct lp_rasterizer *rast, ++ struct lp_fence **fence) ++{ ++ if (fence) ++ lp_fence_reference((struct lp_fence **)fence, rast->last_fence); ++} +diff --git a/src/gallium/drivers/llvmpipe/lp_rast.h b/src/gallium/drivers/llvmpipe/lp_rast.h +index 14a2710f7f5..1756345737f 100644 +--- a/src/gallium/drivers/llvmpipe/lp_rast.h ++++ b/src/gallium/drivers/llvmpipe/lp_rast.h +@@ -388,5 +388,6 @@ lp_debug_draw_bins_by_cmd_length( struct lp_scene *scene ); + void + lp_debug_draw_bins_by_coverage( struct lp_scene *scene ); + +- ++void lp_rast_fence(struct lp_rasterizer *rast, ++ struct lp_fence **fence); + #endif +diff --git a/src/gallium/drivers/llvmpipe/lp_rast_priv.h b/src/gallium/drivers/llvmpipe/lp_rast_priv.h +index c4da9cca2ff..8b28893aa22 100644 +--- a/src/gallium/drivers/llvmpipe/lp_rast_priv.h ++++ b/src/gallium/drivers/llvmpipe/lp_rast_priv.h +@@ -129,6 +129,8 @@ struct lp_rasterizer + + /** For synchronizing the rasterization threads */ + util_barrier barrier; ++ ++ struct lp_fence *last_fence; + }; + + void +diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c b/src/gallium/drivers/llvmpipe/lp_setup.c +index ce681792683..ad92e2557c2 100644 +--- a/src/gallium/drivers/llvmpipe/lp_setup.c ++++ b/src/gallium/drivers/llvmpipe/lp_setup.c +@@ -207,11 +207,6 @@ lp_setup_rasterize_scene( struct lp_setup_context *setup ) + + lp_scene_end_binning(scene); + +- lp_fence_reference(&setup->last_fence, scene->fence); +- +- if (setup->last_fence) +- setup->last_fence->issued = TRUE; +- + mtx_lock(&screen->rast_mutex); + lp_rast_queue_scene(screen->rast, scene); + mtx_unlock(&screen->rast_mutex); +@@ -387,17 +382,10 @@ fail: + + + void +-lp_setup_flush( struct lp_setup_context *setup, +- struct pipe_fence_handle **fence, +- const char *reason) ++lp_setup_flush(struct lp_setup_context *setup, ++ const char *reason) + { +- set_scene_state( setup, SETUP_FLUSHED, reason ); +- +- if (fence) { +- lp_fence_reference((struct lp_fence **)fence, setup->last_fence); +- if (!*fence) +- *fence = (struct pipe_fence_handle *)lp_fence_create(0); +- } ++ set_scene_state(setup, SETUP_FLUSHED, reason); + } + + +@@ -571,7 +559,7 @@ lp_setup_clear( struct lp_setup_context *setup, + if (flags & PIPE_CLEAR_DEPTHSTENCIL) { + unsigned flagszs = flags & PIPE_CLEAR_DEPTHSTENCIL; + if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) { +- lp_setup_flush(setup, NULL, __FUNCTION__); ++ set_scene_state( setup, SETUP_FLUSHED, __FUNCTION__ ); + + if (!lp_setup_try_clear_zs(setup, depth, stencil, flagszs)) + assert(0); +@@ -583,7 +571,7 @@ lp_setup_clear( struct lp_setup_context *setup, + for (i = 0; i < setup->fb.nr_cbufs; i++) { + if ((flags & (1 << (2 + i))) && setup->fb.cbufs[i]) { + if (!lp_setup_try_clear_color_buffer(setup, color, i)) { +- lp_setup_flush(setup, NULL, __FUNCTION__); ++ set_scene_state( setup, SETUP_FLUSHED, __FUNCTION__ ); + + if (!lp_setup_try_clear_color_buffer(setup, color, i)) + assert(0); +@@ -1589,7 +1577,6 @@ lp_setup_destroy( struct lp_setup_context *setup ) + + LP_DBG(DEBUG_SETUP, "number of scenes used: %d\n", setup->num_active_scenes); + slab_destroy(&setup->scene_slab); +- lp_fence_reference(&setup->last_fence, NULL); + + FREE( setup ); + } +@@ -1758,7 +1745,8 @@ lp_setup_end_query(struct lp_setup_context *setup, struct llvmpipe_query *pq) + } + } + else { +- lp_fence_reference(&pq->fence, setup->last_fence); ++ struct llvmpipe_screen *screen = llvmpipe_screen(setup->pipe->screen); ++ lp_rast_fence(screen->rast, &pq->fence); + } + + fail: +diff --git a/src/gallium/drivers/llvmpipe/lp_setup.h b/src/gallium/drivers/llvmpipe/lp_setup.h +index 5ecef123417..fe360be63ca 100644 +--- a/src/gallium/drivers/llvmpipe/lp_setup.h ++++ b/src/gallium/drivers/llvmpipe/lp_setup.h +@@ -64,7 +64,6 @@ lp_setup_clear(struct lp_setup_context *setup, + + void + lp_setup_flush( struct lp_setup_context *setup, +- struct pipe_fence_handle **fence, + const char *reason); + + +diff --git a/src/gallium/drivers/llvmpipe/lp_setup_context.h b/src/gallium/drivers/llvmpipe/lp_setup_context.h +index 420b78e2f52..fac84fb56ec 100644 +--- a/src/gallium/drivers/llvmpipe/lp_setup_context.h ++++ b/src/gallium/drivers/llvmpipe/lp_setup_context.h +@@ -96,7 +96,6 @@ struct lp_setup_context + struct lp_scene *scenes[MAX_SCENES]; /**< all the scenes */ + struct lp_scene *scene; /**< current scene being built */ + +- struct lp_fence *last_fence; + struct llvmpipe_query *active_queries[LP_MAX_ACTIVE_BINNED_QUERIES]; + unsigned active_binned_queries; + +-- +2.37.1 + diff --git a/SOURCES/0002-llvmpipe-keep-context-list-and-use-to-track-resource.patch b/SOURCES/0002-llvmpipe-keep-context-list-and-use-to-track-resource.patch new file mode 100644 index 0000000..316a906 --- /dev/null +++ b/SOURCES/0002-llvmpipe-keep-context-list-and-use-to-track-resource.patch @@ -0,0 +1,145 @@ +From af0e5160c4d81beed879b4669b7f3bb875056d1e Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Mon, 25 Jul 2022 13:28:08 +1000 +Subject: [PATCH 2/2] llvmpipe: keep context list and use to track resource + usage. + +Just check across all contexts if a resource is referenced. + +Fixes: 6bbbe15a783a ("Reinstate: llvmpipe: allow vertex processing and fragment processing in parallel") +Acked-by: Mike Blumenkrantz +Part-of: +--- + src/gallium/drivers/llvmpipe/lp_context.c | 12 ++++++++++-- + src/gallium/drivers/llvmpipe/lp_context.h | 2 ++ + src/gallium/drivers/llvmpipe/lp_flush.c | 10 ++++++---- + src/gallium/drivers/llvmpipe/lp_screen.c | 2 ++ + src/gallium/drivers/llvmpipe/lp_screen.h | 4 ++++ + 5 files changed, 24 insertions(+), 6 deletions(-) + +diff --git a/src/gallium/drivers/llvmpipe/lp_context.c b/src/gallium/drivers/llvmpipe/lp_context.c +index 8038e219015..3cce460f213 100644 +--- a/src/gallium/drivers/llvmpipe/lp_context.c ++++ b/src/gallium/drivers/llvmpipe/lp_context.c +@@ -57,8 +57,12 @@ + static void llvmpipe_destroy( struct pipe_context *pipe ) + { + struct llvmpipe_context *llvmpipe = llvmpipe_context( pipe ); ++ struct llvmpipe_screen *lp_screen = llvmpipe_screen(pipe->screen); + uint i; + ++ mtx_lock(&lp_screen->ctx_mutex); ++ list_del(&llvmpipe->list); ++ mtx_unlock(&lp_screen->ctx_mutex); + lp_print_counters(); + + if (llvmpipe->csctx) { +@@ -189,8 +193,9 @@ llvmpipe_create_context(struct pipe_screen *screen, void *priv, + unsigned flags) + { + struct llvmpipe_context *llvmpipe; ++ struct llvmpipe_screen *lp_screen = llvmpipe_screen(screen); + +- if (!llvmpipe_screen_late_init(llvmpipe_screen(screen))) ++ if (!llvmpipe_screen_late_init(lp_screen)) + return NULL; + + llvmpipe = align_malloc(sizeof(struct llvmpipe_context), 16); +@@ -254,7 +259,7 @@ llvmpipe_create_context(struct pipe_screen *screen, void *priv, + goto fail; + + draw_set_disk_cache_callbacks(llvmpipe->draw, +- llvmpipe_screen(screen), ++ lp_screen, + lp_draw_disk_cache_find_shader, + lp_draw_disk_cache_insert_shader); + +@@ -307,6 +312,9 @@ llvmpipe_create_context(struct pipe_screen *screen, void *priv, + */ + llvmpipe->dirty |= LP_NEW_SCISSOR; + ++ mtx_lock(&lp_screen->ctx_mutex); ++ list_addtail(&llvmpipe->list, &lp_screen->ctx_list); ++ mtx_unlock(&lp_screen->ctx_mutex); + return &llvmpipe->pipe; + + fail: +diff --git a/src/gallium/drivers/llvmpipe/lp_context.h b/src/gallium/drivers/llvmpipe/lp_context.h +index 1cabf98177f..f6b7719c6de 100644 +--- a/src/gallium/drivers/llvmpipe/lp_context.h ++++ b/src/gallium/drivers/llvmpipe/lp_context.h +@@ -35,6 +35,7 @@ + + #include "draw/draw_vertex.h" + #include "util/u_blitter.h" ++#include "util/list.h" + + #include "lp_tex_sample.h" + #include "lp_jit.h" +@@ -58,6 +59,7 @@ struct lp_velems_state; + struct llvmpipe_context { + struct pipe_context pipe; /**< base class */ + ++ struct list_head list; + /** Constant state objects */ + const struct pipe_blend_state *blend; + struct pipe_sampler_state *samplers[PIPE_SHADER_TYPES][PIPE_MAX_SAMPLERS]; +diff --git a/src/gallium/drivers/llvmpipe/lp_flush.c b/src/gallium/drivers/llvmpipe/lp_flush.c +index c72944232e7..c49836432a9 100644 +--- a/src/gallium/drivers/llvmpipe/lp_flush.c ++++ b/src/gallium/drivers/llvmpipe/lp_flush.c +@@ -111,10 +111,12 @@ llvmpipe_flush_resource(struct pipe_context *pipe, + boolean do_not_block, + const char *reason) + { +- unsigned referenced; +- +- referenced = llvmpipe_is_resource_referenced(pipe, resource, level); +- ++ unsigned referenced = 0; ++ struct llvmpipe_screen *lp_screen = llvmpipe_screen(pipe->screen); ++ mtx_lock(&lp_screen->ctx_mutex); ++ list_for_each_entry(struct llvmpipe_context, ctx, &lp_screen->ctx_list, list) ++ referenced |= llvmpipe_is_resource_referenced((struct pipe_context *)ctx, resource, level); ++ mtx_unlock(&lp_screen->ctx_mutex); + if ((referenced & LP_REFERENCED_FOR_WRITE) || + ((referenced & LP_REFERENCED_FOR_READ) && !read_only)) { + +diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c +index 359c200279f..9c67d874c5f 100644 +--- a/src/gallium/drivers/llvmpipe/lp_screen.c ++++ b/src/gallium/drivers/llvmpipe/lp_screen.c +@@ -1085,6 +1085,8 @@ llvmpipe_create_screen(struct sw_winsys *winsys) + + snprintf(screen->renderer_string, sizeof(screen->renderer_string), "llvmpipe (LLVM " MESA_LLVM_VERSION_STRING ", %u bits)", lp_native_vector_width ); + ++ list_inithead(&screen->ctx_list); ++ (void) mtx_init(&screen->ctx_mutex, mtx_plain); + (void) mtx_init(&screen->cs_mutex, mtx_plain); + (void) mtx_init(&screen->rast_mutex, mtx_plain); + +diff --git a/src/gallium/drivers/llvmpipe/lp_screen.h b/src/gallium/drivers/llvmpipe/lp_screen.h +index c72bf838acb..18635c687bc 100644 +--- a/src/gallium/drivers/llvmpipe/lp_screen.h ++++ b/src/gallium/drivers/llvmpipe/lp_screen.h +@@ -37,6 +37,7 @@ + #include "pipe/p_screen.h" + #include "pipe/p_defines.h" + #include "os/os_thread.h" ++#include "util/list.h" + #include "gallivm/lp_bld.h" + #include "gallivm/lp_bld_misc.h" + +@@ -67,6 +68,9 @@ struct llvmpipe_screen + mtx_t late_mutex; + bool late_init_done; + ++ mtx_t ctx_mutex; ++ struct list_head ctx_list; ++ + char renderer_string[100]; + + struct disk_cache *disk_shader_cache; +-- +2.37.1 + diff --git a/SPECS/mesa.spec b/SPECS/mesa.spec index 84aa469..f080171 100644 --- a/SPECS/mesa.spec +++ b/SPECS/mesa.spec @@ -8,15 +8,14 @@ %global with_omx 1 %global with_opencl 1 %endif -%global base_dri nouveau,r100,r200 %global base_vulkan ,amd %endif %ifarch %{ix86} x86_64 %global with_iris 1 +%global with_crocus 1 %global with_vmware 1 %global with_xa 1 -%global platform_dri ,i915,i965 %global platform_vulkan ,intel %endif @@ -49,14 +48,11 @@ %bcond_with valgrind %endif -%if !0%{?rhel} -%global dri_drivers %{?base_dri}%{?platform_dri} -%endif %global vulkan_drivers swrast%{?base_vulkan}%{?platform_vulkan} Name: mesa Summary: Mesa graphics libraries -%global ver 21.3.4 +%global ver 22.1.5 Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)} Release: 2%{?dist} License: MIT @@ -68,11 +64,11 @@ Source0: https://mesa.freedesktop.org/archive/%{name}-%{ver}.tar.xz # Fedora opts to ignore the optional part of clause 2 and treat that code as 2 clause BSD. Source1: Mesa-MLAA-License-Clarification-Email.txt -# Patches to fix Intel blinking, see: -# https://gitlab.freedesktop.org/pzanoni/mesa/-/commit/07dc3d4238e57901ccf98e0b506d9aad2c86b9d9 -# https://bugzilla.redhat.com/show_bug.cgi?id=2036600 -# https://bugzilla.redhat.com/show_bug.cgi?id=2040771 -Patch0001: 0001-iris-implement-inter-context-busy-tracking.patch +# two llvmpipe multi-context fixes +Patch10: 0001-llvmpipe-make-last_fence-a-screen-rast-object-not-a-.patch +Patch11: 0002-llvmpipe-keep-context-list-and-use-to-track-resource.patch +# a frontbuffer misrendering fix +Patch12: 0001-llvmpipe-finish-rendering-before-flushing-frontbuffe.patch BuildRequires: meson >= 0.45 BuildRequires: gcc @@ -326,10 +322,9 @@ cp %{SOURCE1} docs/ %meson \ -Dplatforms=x11,wayland \ -Ddri3=enabled \ - -Ddri-drivers=%{?dri_drivers} \ -Dosmesa=true \ %if 0%{?with_hardware} - -Dgallium-drivers=swrast,virgl,nouveau%{?with_r300:,r300}%{?with_iris:,iris}%{?with_vmware:,svga}%{?with_radeonsi:,radeonsi}%{?with_r600:,r600}%{?with_freedreno:,freedreno}%{?with_etnaviv:,etnaviv}%{?with_tegra:,tegra}%{?with_vc4:,vc4}%{?with_v3d:,v3d}%{?with_kmsro:,kmsro}%{?with_lima:,lima}%{?with_panfrost:,panfrost}%{?with_vulkan_hw:,zink} \ + -Dgallium-drivers=swrast,virgl,nouveau%{?with_r300:,r300}%{?with_crocus:,crocus}%{?with_iris:,iris}%{?with_vmware:,svga}%{?with_radeonsi:,radeonsi}%{?with_r600:,r600}%{?with_freedreno:,freedreno}%{?with_etnaviv:,etnaviv}%{?with_tegra:,tegra}%{?with_vc4:,vc4}%{?with_v3d:,v3d}%{?with_kmsro:,kmsro}%{?with_lima:,lima}%{?with_panfrost:,panfrost}%{?with_vulkan_hw:,zink} \ %else -Dgallium-drivers=swrast,virgl \ %endif @@ -491,10 +486,7 @@ popd %{_libdir}/dri/radeonsi_dri.so %endif %ifarch %{ix86} x86_64 -%if !0%{?rhel} -%{_libdir}/dri/i915_dri.so -%{_libdir}/dri/i965_dri.so -%endif +%{_libdir}/dri/crocus_dri.so %{_libdir}/dri/iris_dri.so %endif %ifarch %{arm} aarch64 @@ -550,11 +542,13 @@ popd %{_libdir}/dri/ili9341_dri.so %{_libdir}/dri/imx-dcss_dri.so %{_libdir}/dri/kirin_dri.so +%{_libdir}/dri/komeda_dri.so %{_libdir}/dri/mali-dp_dri.so %{_libdir}/dri/mediatek_dri.so %{_libdir}/dri/meson_dri.so %{_libdir}/dri/mi0283qt_dri.so %{_libdir}/dri/pl111_dri.so +%{_libdir}/dri/rcar-du_dri.so %{_libdir}/dri/repaper_dri.so %{_libdir}/dri/rockchip_dri.so %{_libdir}/dri/st7586_dri.so @@ -589,6 +583,7 @@ popd %{_libdir}/libVkLayer_MESA_device_select.so %{_datadir}/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json %if 0%{?with_vulkan_hw} +%{_datadir}/drirc.d/00-radv-defaults.conf %{_libdir}/libvulkan_radeon.so %{_datadir}/vulkan/icd.d/radeon_icd.*.json %ifarch %{ix86} x86_64 @@ -604,6 +599,18 @@ popd %endif %changelog +* Thu Sep 01 2022 Dave Airlie - 22.1.5-2 +- fix frontbuffer misrendering + +* Wed Aug 10 2022 Dave Airlie - 22.1.5-1 +- rebase to 22.1.5 + llvmpipe fixes + +* Fri Aug 05 2022 Dave Airlie - 22.1.1-2 +- fixup bug with missing crocus + +* Mon Jun 13 2022 Dave Airlie - 22.1.1-1 +- rebase to 22.1.1 + * Tue Jan 25 2022 Dave Airlie - 21.3.4-2 - Add iris regression fix.