import mesa-22.1.5-1.el9
This commit is contained in:
parent
ced5c1fbfd
commit
8857ebbadd
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/mesa-21.3.4.tar.xz
|
SOURCES/mesa-22.1.5.tar.xz
|
||||||
|
@ -1 +1 @@
|
|||||||
80187e8dd7701a931676058ce456de008fdcaf8c SOURCES/mesa-21.3.4.tar.xz
|
d2e6d071e560c0f92a519a7c4b38d4c43f6dae19 SOURCES/mesa-22.1.5.tar.xz
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
From 07dc3d4238e57901ccf98e0b506d9aad2c86b9d9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
|
||||||
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 <hi-angel@yandex.ru>
|
|
||||||
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -0,0 +1,229 @@
|
|||||||
|
From 64e7c42f1b68250d2280320e01da2f5a0c4b07eb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dave Airlie <airlied@redhat.com>
|
||||||
|
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 <michael.blumenkrantz@gmail.com>
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17702>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
@ -0,0 +1,145 @@
|
|||||||
|
From af0e5160c4d81beed879b4669b7f3bb875056d1e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dave Airlie <airlied@redhat.com>
|
||||||
|
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 <michael.blumenkrantz@gmail.com>
|
||||||
|
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17702>
|
||||||
|
---
|
||||||
|
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
|
||||||
|
|
@ -8,15 +8,14 @@
|
|||||||
%global with_omx 1
|
%global with_omx 1
|
||||||
%global with_opencl 1
|
%global with_opencl 1
|
||||||
%endif
|
%endif
|
||||||
%global base_dri nouveau,r100,r200
|
|
||||||
%global base_vulkan ,amd
|
%global base_vulkan ,amd
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
%global with_iris 1
|
%global with_iris 1
|
||||||
|
%global with_crocus 1
|
||||||
%global with_vmware 1
|
%global with_vmware 1
|
||||||
%global with_xa 1
|
%global with_xa 1
|
||||||
%global platform_dri ,i915,i965
|
|
||||||
%global platform_vulkan ,intel
|
%global platform_vulkan ,intel
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
@ -49,16 +48,13 @@
|
|||||||
%bcond_with valgrind
|
%bcond_with valgrind
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%if !0%{?rhel}
|
|
||||||
%global dri_drivers %{?base_dri}%{?platform_dri}
|
|
||||||
%endif
|
|
||||||
%global vulkan_drivers swrast%{?base_vulkan}%{?platform_vulkan}
|
%global vulkan_drivers swrast%{?base_vulkan}%{?platform_vulkan}
|
||||||
|
|
||||||
Name: mesa
|
Name: mesa
|
||||||
Summary: Mesa graphics libraries
|
Summary: Mesa graphics libraries
|
||||||
%global ver 21.3.4
|
%global ver 22.1.5
|
||||||
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
|
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
|
||||||
Release: 2%{?dist}
|
Release: 1%{?dist}
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://www.mesa3d.org
|
URL: http://www.mesa3d.org
|
||||||
|
|
||||||
@ -68,11 +64,9 @@ 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.
|
# 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
|
Source1: Mesa-MLAA-License-Clarification-Email.txt
|
||||||
|
|
||||||
# Patches to fix Intel blinking, see:
|
# two llvmpipe multi-context fixes
|
||||||
# https://gitlab.freedesktop.org/pzanoni/mesa/-/commit/07dc3d4238e57901ccf98e0b506d9aad2c86b9d9
|
Patch10: 0001-llvmpipe-make-last_fence-a-screen-rast-object-not-a-.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2036600
|
Patch11: 0002-llvmpipe-keep-context-list-and-use-to-track-resource.patch
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=2040771
|
|
||||||
Patch0001: 0001-iris-implement-inter-context-busy-tracking.patch
|
|
||||||
|
|
||||||
BuildRequires: meson >= 0.45
|
BuildRequires: meson >= 0.45
|
||||||
BuildRequires: gcc
|
BuildRequires: gcc
|
||||||
@ -326,10 +320,9 @@ cp %{SOURCE1} docs/
|
|||||||
%meson \
|
%meson \
|
||||||
-Dplatforms=x11,wayland \
|
-Dplatforms=x11,wayland \
|
||||||
-Ddri3=enabled \
|
-Ddri3=enabled \
|
||||||
-Ddri-drivers=%{?dri_drivers} \
|
|
||||||
-Dosmesa=true \
|
-Dosmesa=true \
|
||||||
%if 0%{?with_hardware}
|
%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
|
%else
|
||||||
-Dgallium-drivers=swrast,virgl \
|
-Dgallium-drivers=swrast,virgl \
|
||||||
%endif
|
%endif
|
||||||
@ -491,10 +484,7 @@ popd
|
|||||||
%{_libdir}/dri/radeonsi_dri.so
|
%{_libdir}/dri/radeonsi_dri.so
|
||||||
%endif
|
%endif
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
%if !0%{?rhel}
|
%{_libdir}/dri/crocus_dri.so
|
||||||
%{_libdir}/dri/i915_dri.so
|
|
||||||
%{_libdir}/dri/i965_dri.so
|
|
||||||
%endif
|
|
||||||
%{_libdir}/dri/iris_dri.so
|
%{_libdir}/dri/iris_dri.so
|
||||||
%endif
|
%endif
|
||||||
%ifarch %{arm} aarch64
|
%ifarch %{arm} aarch64
|
||||||
@ -550,11 +540,13 @@ popd
|
|||||||
%{_libdir}/dri/ili9341_dri.so
|
%{_libdir}/dri/ili9341_dri.so
|
||||||
%{_libdir}/dri/imx-dcss_dri.so
|
%{_libdir}/dri/imx-dcss_dri.so
|
||||||
%{_libdir}/dri/kirin_dri.so
|
%{_libdir}/dri/kirin_dri.so
|
||||||
|
%{_libdir}/dri/komeda_dri.so
|
||||||
%{_libdir}/dri/mali-dp_dri.so
|
%{_libdir}/dri/mali-dp_dri.so
|
||||||
%{_libdir}/dri/mediatek_dri.so
|
%{_libdir}/dri/mediatek_dri.so
|
||||||
%{_libdir}/dri/meson_dri.so
|
%{_libdir}/dri/meson_dri.so
|
||||||
%{_libdir}/dri/mi0283qt_dri.so
|
%{_libdir}/dri/mi0283qt_dri.so
|
||||||
%{_libdir}/dri/pl111_dri.so
|
%{_libdir}/dri/pl111_dri.so
|
||||||
|
%{_libdir}/dri/rcar-du_dri.so
|
||||||
%{_libdir}/dri/repaper_dri.so
|
%{_libdir}/dri/repaper_dri.so
|
||||||
%{_libdir}/dri/rockchip_dri.so
|
%{_libdir}/dri/rockchip_dri.so
|
||||||
%{_libdir}/dri/st7586_dri.so
|
%{_libdir}/dri/st7586_dri.so
|
||||||
@ -589,6 +581,7 @@ popd
|
|||||||
%{_libdir}/libVkLayer_MESA_device_select.so
|
%{_libdir}/libVkLayer_MESA_device_select.so
|
||||||
%{_datadir}/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
|
%{_datadir}/vulkan/implicit_layer.d/VkLayer_MESA_device_select.json
|
||||||
%if 0%{?with_vulkan_hw}
|
%if 0%{?with_vulkan_hw}
|
||||||
|
%{_datadir}/drirc.d/00-radv-defaults.conf
|
||||||
%{_libdir}/libvulkan_radeon.so
|
%{_libdir}/libvulkan_radeon.so
|
||||||
%{_datadir}/vulkan/icd.d/radeon_icd.*.json
|
%{_datadir}/vulkan/icd.d/radeon_icd.*.json
|
||||||
%ifarch %{ix86} x86_64
|
%ifarch %{ix86} x86_64
|
||||||
@ -604,6 +597,15 @@ popd
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Aug 10 2022 Dave Airlie <airlied@redhat.com> - 22.1.5-1
|
||||||
|
- rebase to 22.1.5 + llvmpipe fixes
|
||||||
|
|
||||||
|
* Fri Aug 05 2022 Dave Airlie <airlied@redhat.com> - 22.1.1-2
|
||||||
|
- fixup bug with missing crocus
|
||||||
|
|
||||||
|
* Mon Jun 13 2022 Dave Airlie <airlied@redhat.com> - 22.1.1-1
|
||||||
|
- rebase to 22.1.1
|
||||||
|
|
||||||
* Tue Jan 25 2022 Dave Airlie <airlied@redhat.com> - 21.3.4-2
|
* Tue Jan 25 2022 Dave Airlie <airlied@redhat.com> - 21.3.4-2
|
||||||
- Add iris regression fix.
|
- Add iris regression fix.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user