Enable vc4 and v3d for Raspberry Pi graphics in AlmaLinux (Resolves: https://github.com/AlmaLinux/raspberry-pi/issues/32)

This commit is contained in:
Koichiro Iwao 2026-02-17 09:44:03 +00:00 committed by root
commit dbd559fcc9
3 changed files with 155 additions and 2 deletions

View File

@ -0,0 +1,74 @@
From 17ab0f2ece0a45dd5df507a466ecf6f40d452e1a Mon Sep 17 00:00:00 2001
From: Lucas Fryzek <lfryzek@igalia.com>
Date: Wed, 3 Dec 2025 19:33:57 -0500
Subject: [PATCH 1/2] drisw: Modify drisw_swap_buffers_with_damage to swap
entire buffer
When swapping buffer with damage regions, to be strictly correct we
need to swap the entire back buffer to the front buffer. This needs to
be done in case the compositor does not support damage regions. This
means we need to ignore the input damage region and tell drisw to swap
the entire buffer.
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38817>
---
src/gallium/frontends/dri/drisw.c | 28 ++++++++--------------------
1 file changed, 8 insertions(+), 20 deletions(-)
diff --git a/src/gallium/frontends/dri/drisw.c b/src/gallium/frontends/dri/drisw.c
index 4359ca569e5..394b6986832 100644
--- a/src/gallium/frontends/dri/drisw.c
+++ b/src/gallium/frontends/dri/drisw.c
@@ -225,6 +225,13 @@ drisw_copy_to_front(struct pipe_context *pipe,
static void
drisw_swap_buffers_with_damage(struct dri_drawable *drawable, int nrects, const int *rects)
{
+ /* Damage regions still require us to update the whole front buffer
+ * in case the compositor doesn't obey them, so we will just ignore
+ * the passed in damage regions and swap the whole buffer
+ */
+ (void)nrects;
+ (void)rects;
+
struct dri_context *ctx = dri_get_current();
struct dri_screen *screen = drawable->screen;
struct pipe_resource *ptex;
@@ -242,25 +249,6 @@ drisw_swap_buffers_with_damage(struct dri_drawable *drawable, int nrects, const
if (ptex) {
struct pipe_fence_handle *fence = NULL;
- struct pipe_box stack_boxes[64];
- if (nrects > ARRAY_SIZE(stack_boxes))
- nrects = 0;
- if (nrects) {
- for (unsigned int i = 0; i < nrects; i++) {
- const int *rect = &rects[i * 4];
-
- int w = MIN2(rect[2], ptex->width0);
- int h = MIN2(rect[3], ptex->height0);
- int x = CLAMP(rect[0], 0, ptex->width0);
- int y = CLAMP(ptex->height0 - rect[1] - h, 0, ptex->height0);
-
- if (h > ptex->height0 - y)
- h = ptex->height0 - y;
-
- u_box_2d(x, y, w, h, &stack_boxes[i]);
- }
- }
-
if (ctx->pp)
pp_run(ctx->pp, ptex, ptex, drawable->textures[ST_ATTACHMENT_DEPTH_STENCIL]);
@@ -279,7 +267,7 @@ drisw_swap_buffers_with_damage(struct dri_drawable *drawable, int nrects, const
screen->base.screen->fence_finish(screen->base.screen, ctx->st->pipe,
fence, OS_TIMEOUT_INFINITE);
screen->base.screen->fence_reference(screen->base.screen, &fence, NULL);
- drisw_copy_to_front(ctx->st->pipe, drawable, ptex, nrects, nrects ? stack_boxes : NULL);
+ drisw_copy_to_front(ctx->st->pipe, drawable, ptex, 0, NULL);
drawable->buffer_age = 1;
/* TODO: remove this if the framebuffer state doesn't change. */
--
2.52.0

View File

@ -0,0 +1,72 @@
From 48799005d7f3b099cb2e93d09ce6dc211f619887 Mon Sep 17 00:00:00 2001
From: Lucas Fryzek <lfryzek@igalia.com>
Date: Wed, 3 Dec 2025 19:19:56 -0500
Subject: [PATCH 2/2] Revert "drisw: Copy entire buffer ignoring damage
regions"
This reverts commit 755e795e4c0d2660129c14998425f7dd3299bdf9.
Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38817>
---
src/gallium/winsys/sw/dri/dri_sw_winsys.c | 38 +++++++++++++++++------
1 file changed, 29 insertions(+), 9 deletions(-)
diff --git a/src/gallium/winsys/sw/dri/dri_sw_winsys.c b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
index 7d18b6138ea..0b2c8754ec5 100644
--- a/src/gallium/winsys/sw/dri/dri_sw_winsys.c
+++ b/src/gallium/winsys/sw/dri/dri_sw_winsys.c
@@ -352,21 +352,41 @@ dri_sw_displaytarget_display(struct sw_winsys *ws,
struct dri_sw_winsys *dri_sw_ws = dri_sw_winsys(ws);
struct dri_sw_displaytarget *dri_sw_dt = dri_sw_displaytarget(dt);
struct dri_drawable *dri_drawable = (struct dri_drawable *)context_private;
- unsigned width, height;
+ unsigned width, height, x = 0, y = 0;
unsigned blsize = util_format_get_blocksize(dri_sw_dt->format);
bool is_shm = dri_sw_dt->shmid != -1;
/* Set the width to 'stride / cpp'.
*
* PutImage correctly clips to the width of the dst drawable.
*/
- width = dri_sw_dt->stride / blsize;
- height = dri_sw_dt->height;
- if (is_shm)
- dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, 0, 0,
- 0, 0, width, height, dri_sw_dt->stride);
- else
- dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height);
- return;
+ if (!nboxes) {
+ width = dri_sw_dt->stride / blsize;
+ height = dri_sw_dt->height;
+ if (is_shm)
+ dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, 0, 0,
+ 0, 0, width, height, dri_sw_dt->stride);
+ else
+ dri_sw_ws->lf->put_image(dri_drawable, dri_sw_dt->data, width, height);
+ return;
+ }
+ for (unsigned i = 0; i < nboxes; i++) {
+ unsigned offset = dri_sw_dt->stride * box[i].y;
+ unsigned offset_x = box[i].x * blsize;
+ char *data = dri_sw_dt->data + offset;
+ x = box[i].x;
+ y = box[i].y;
+ width = box[i].width;
+ height = box[i].height;
+ if (is_shm) {
+ /* don't add x offset for shm, the put_image_shm will deal with it */
+ dri_sw_ws->lf->put_image_shm(dri_drawable, dri_sw_dt->shmid, dri_sw_dt->data, offset, offset_x,
+ x, y, width, height, dri_sw_dt->stride);
+ } else {
+ data += offset_x;
+ dri_sw_ws->lf->put_image2(dri_drawable, data,
+ x, y, width, height, dri_sw_dt->stride);
+ }
+ }
}
static void
--
2.52.0

View File

@ -73,7 +73,7 @@ Name: mesa
Summary: Mesa graphics libraries
%global ver 25.0.7
Version: %{lua:ver = string.gsub(rpm.expand("%{ver}"), "-", "~"); print(ver)}
Release: 3%{?dist}.alma.1
Release: 4%{?dist}.alma.1
License: MIT AND BSD-3-Clause AND SGI-B-2.0
URL: http://www.mesa3d.org
@ -132,6 +132,10 @@ Patch50: 0001-Revert-hasvk-elk-stop-turning-load_push_constants-in.patch
# Fix direct gl calls
Patch12: 0001-glx-don-t-call-GL-functions-directly-use-the-current.patch
# Fix performance issue with Xorg
Patch60: 0001-drisw-Modify-drisw_swap_buffers_with_damage-to-swap-.patch
Patch61: 0002-Revert-drisw-Copy-entire-buffer-ignoring-damage-regi.patch
# Build our own version but keep the dependency for the RPM macros
BuildRequires: meson
BuildRequires: gcc
@ -852,10 +856,13 @@ popd
%endif
%changelog
* Tue Nov 11 2025 Koichiro Iwao <meta@almalinux.org> - 25.0.7-3.alma.1
* Tue Feb 17 2026 Koichiro Iwao <meta@almalinux.org> - 25.0.7-4.alma.1
- Enable vc4 and v3d for Raspberry Pi graphics in AlmaLinux (Resolves:
https://github.com/AlmaLinux/raspberry-pi/issues/32)
* Tue Jan 6 2026 Jocelyn Falempe <jfalempe@redhat.com - 25.0.7-4
- Resolves: https://issues.redhat.com/browse/RHEL-138704
* Thu Sep 18 2025 Jocelyn Falempe <jfalempe@redhat.com> - 25.0.7-3
- Fix black screen on ppc64le
Resolves: https://issues.redhat.com/browse/RHEL-113831