SHA256
1
0
forked from pool/Mesa

Accepting request 1159850 from X11:XOrg

- Add patch to fix boo#1221664:
  * mesa-fix-llvm18.patch

- 0010-glx-silence-more-implicit-load-zink-errors.patch 
  * glx: silence more implicit-load zink errors [gitlab mesa issue #10802]

- 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch,
  0002-glx-fix-some-indentation.patch,
  0003-glx-add-an-implicit-param-to-createScreen.patch,
  0004-glx-pass-implicit-load-param-through-allocation.patch,
  0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch,
  0006-gbm-plumb-an-implicit-param-through-device-creation.patch,
  0007-frontends-dri-plumb-an-implicit-param-through-screen.patch,
  0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch,
  0009-zink-don-t-print-error-messages-when-failing-an-impl.patch
  * get rid of error message:
    'MESA: error: ZINK: vkEnumeratePhysicalDevices failed
    (VK_ERROR_INITIALIZATION_FAILED)' 
    [gitlab mesa issue #10802]

- adjusted and re-enabled python36-buildfix1.patch 

- Update to new feature release 24.0.3
  * Some interesting highlights include:
    + New PowerVR Vulkan driver for Imagination's GPU
    + NVIDIA Vulkan driver NVK has seen many improvements
    + AMD Vulkan driver RADV ray-tracing performance improvements
    + Microsoft OpenGL driver D3D12 has reached OpenGL 4.6 support
  * New extensions & features (in no particular order):
    + VK_EXT_image_compression_control on RADV
    + VK_EXT_device_fault on RADV
    + OpenGL 3.3 on Asahi
    + Geometry shaders on Asahi
    + GL_ARB_texture_cube_map_array on Asahi
    + GL_ARB_clip_control on Asahi
    + GL_ARB_timer_query on Asahi
    + GL_EXT_disjoint_timer_query on Asahi
    + GL_ARB_base_instance on Asahi
    + OpenGL 4.6 (up from 4.2) on d3d12
    + VK_EXT_depth_clamp_zero_one on RADV
    + GL_ARB_shader_texture_image_samples on Asahi
    + GL_ARB_indirect_parameters on Asahi
    + GL_ARB_viewport_array on Asahi
    + GL_ARB_fragment_layer_viewport on Asahi
    + GL_ARB_cull_distance on Asahi
    + GL_ARB_transform_feedback_overflow_query on Asahi
    + VK_KHR_calibrated_timestamps on RADV
    + VK_KHR_vertex_attribute_divisor on RADV
    + VK_KHR_maintenance6 on RADV
    + VK_KHR_ray_tracing_position_fetch on RADV
    + EGL_EXT_query_reset_notification_strategy
- supersedes U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch
- adjusted n_add-Mesa-headers-again.patch, u_dep_xcb.patch
- disabled python36-buildfix1.patch
- removed disabled patch u_fix-build-on-ppc64le.patch

- get rid of u_zink-dont-print-error-messages-when-failing-an-implicit.patch
  completely

OBS-URL: https://build.opensuse.org/request/show/1159850
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/Mesa?expand=0&rev=498
This commit is contained in:
Ana Guerrero 2024-03-22 14:17:17 +00:00 committed by Git OBS Bridge
commit 3938559252
22 changed files with 1561 additions and 176 deletions

View File

@ -0,0 +1,61 @@
From 1b1ebd90a5b0edd70e2c548b64aeded9cac3e570 Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 09:15:11 -0400
Subject: [PATCH 1/9] loader: delete unused param from
pipe_loader_sw_probe_dri()
---
src/gallium/auxiliary/pipe-loader/pipe_loader.h | 3 +--
src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 4 ++--
src/gallium/frontends/dri/kopper.c | 2 +-
3 files changed, 4 insertions(+), 5 deletions(-)
Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader.h
+++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h
@@ -155,8 +155,7 @@ pipe_loader_sw_probe_dri(struct pipe_loa
* \sa pipe_loader_probe
*/
bool
-pipe_loader_vk_probe_dri(struct pipe_loader_device **devs,
- const struct drisw_loader_funcs *drisw_lf);
+pipe_loader_vk_probe_dri(struct pipe_loader_device **devs);
#ifdef HAVE_DRISW_KMS
/**
Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
+++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c
@@ -233,7 +233,7 @@ fail:
}
#ifdef HAVE_ZINK
bool
-pipe_loader_vk_probe_dri(struct pipe_loader_device **devs, const struct drisw_loader_funcs *drisw_lf)
+pipe_loader_vk_probe_dri(struct pipe_loader_device **devs)
{
struct pipe_loader_sw_device *sdev = CALLOC_STRUCT(pipe_loader_sw_device);
int i;
@@ -246,7 +246,7 @@ pipe_loader_vk_probe_dri(struct pipe_loa
for (i = 0; sdev->dd->winsys[i].name; i++) {
if (strcmp(sdev->dd->winsys[i].name, "dri") == 0) {
- sdev->ws = sdev->dd->winsys[i].create_winsys_dri(drisw_lf);
+ sdev->ws = sdev->dd->winsys[i].create_winsys_dri(NULL);
break;
}
}
Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c
+++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c
@@ -128,7 +128,7 @@ kopper_init_screen(struct dri_screen *sc
if (screen->fd != -1)
success = pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false);
else
- success = pipe_loader_vk_probe_dri(&screen->dev, NULL);
+ success = pipe_loader_vk_probe_dri(&screen->dev);
if (success)
pscreen = pipe_loader_create_screen(screen->dev);

View File

@ -0,0 +1,34 @@
From 647f6a7e123726d306440d54a22880e67ab31aa8 Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 09:20:25 -0400
Subject: [PATCH 2/9] glx: fix some indentation
ifdefs are hard
---
src/glx/glxext.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
Index: mesa-24.0.3/src/glx/glxext.c
===================================================================
--- mesa-24.0.3.orig/src/glx/glxext.c
+++ mesa-24.0.3/src/glx/glxext.c
@@ -786,16 +786,16 @@ AllocAndFetchScreenConfigs(Display * dpy
psc = priv->dri3Display->createScreen(i, priv);
#endif /* HAVE_DRI3 */
if (psc == NULL && priv->dri2Display)
- psc = priv->dri2Display->createScreen(i, priv);
+ psc = priv->dri2Display->createScreen(i, priv);
#endif /* GLX_USE_DRM */
#ifdef GLX_USE_WINDOWSGL
if (psc == NULL && priv->windowsdriDisplay)
- psc = priv->windowsdriDisplay->createScreen(i, priv);
+ psc = priv->windowsdriDisplay->createScreen(i, priv);
#endif
if (psc == NULL && priv->driswDisplay)
- psc = priv->driswDisplay->createScreen(i, priv);
+ psc = priv->driswDisplay->createScreen(i, priv);
#endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */
bool indirect = false;

View File

@ -0,0 +1,107 @@
From 2dedd2e26dce587e1efe8250f8f2da60db906071 Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 09:36:57 -0400
Subject: [PATCH 3/9] glx: add an 'implicit' param to createScreen
---
src/glx/dri2_glx.c | 2 +-
src/glx/dri3_glx.c | 2 +-
src/glx/drisw_glx.c | 2 +-
src/glx/driwindows_glx.c | 2 +-
src/glx/glxclient.h | 2 +-
src/glx/glxext.c | 8 ++++----
6 files changed, 9 insertions(+), 9 deletions(-)
Index: mesa-24.0.3/src/glx/dri2_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/dri2_glx.c
+++ mesa-24.0.3/src/glx/dri2_glx.c
@@ -1001,7 +1001,7 @@ static const struct glx_screen_vtable dr
};
static struct glx_screen *
-dri2CreateScreen(int screen, struct glx_display * priv)
+dri2CreateScreen(int screen, struct glx_display * priv, bool implicit)
{
const __DRIconfig **driver_configs;
const __DRIextension **extensions;
Index: mesa-24.0.3/src/glx/dri3_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/dri3_glx.c
+++ mesa-24.0.3/src/glx/dri3_glx.c
@@ -789,7 +789,7 @@ static const struct glx_screen_vtable dr
*/
static struct glx_screen *
-dri3_create_screen(int screen, struct glx_display * priv)
+dri3_create_screen(int screen, struct glx_display * priv, bool implicit)
{
xcb_connection_t *c = XGetXCBConnection(priv->dpy);
const __DRIconfig **driver_configs;
Index: mesa-24.0.3/src/glx/drisw_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/drisw_glx.c
+++ mesa-24.0.3/src/glx/drisw_glx.c
@@ -1055,7 +1055,7 @@ driswCreateScreenDriver(int screen, stru
}
static struct glx_screen *
-driswCreateScreen(int screen, struct glx_display *priv)
+driswCreateScreen(int screen, struct glx_display *priv, bool implicit)
{
const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay;
if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) {
Index: mesa-24.0.3/src/glx/driwindows_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/driwindows_glx.c
+++ mesa-24.0.3/src/glx/driwindows_glx.c
@@ -461,7 +461,7 @@ driwindowsMapConfigs(struct glx_display
}
static struct glx_screen *
-driwindowsCreateScreen(int screen, struct glx_display *priv)
+driwindowsCreateScreen(int screen, struct glx_display *priv, bool implicit)
{
__GLXDRIscreen *psp;
struct driwindows_screen *psc;
Index: mesa-24.0.3/src/glx/glxclient.h
===================================================================
--- mesa-24.0.3.orig/src/glx/glxclient.h
+++ mesa-24.0.3/src/glx/glxclient.h
@@ -85,7 +85,7 @@ struct __GLXDRIdisplayRec
*/
void (*destroyDisplay) (__GLXDRIdisplay * display);
- struct glx_screen *(*createScreen)(int screen, struct glx_display * priv);
+ struct glx_screen *(*createScreen)(int screen, struct glx_display * priv, bool implicit);
};
struct __GLXDRIscreenRec {
Index: mesa-24.0.3/src/glx/glxext.c
===================================================================
--- mesa-24.0.3.orig/src/glx/glxext.c
+++ mesa-24.0.3/src/glx/glxext.c
@@ -783,19 +783,19 @@ AllocAndFetchScreenConfigs(Display * dpy
#if defined(GLX_USE_DRM)
#if defined(HAVE_DRI3)
if (priv->dri3Display)
- psc = priv->dri3Display->createScreen(i, priv);
+ psc = priv->dri3Display->createScreen(i, priv, false);
#endif /* HAVE_DRI3 */
if (psc == NULL && priv->dri2Display)
- psc = priv->dri2Display->createScreen(i, priv);
+ psc = priv->dri2Display->createScreen(i, priv, false);
#endif /* GLX_USE_DRM */
#ifdef GLX_USE_WINDOWSGL
if (psc == NULL && priv->windowsdriDisplay)
- psc = priv->windowsdriDisplay->createScreen(i, priv);
+ psc = priv->windowsdriDisplay->createScreen(i, priv, false);
#endif
if (psc == NULL && priv->driswDisplay)
- psc = priv->driswDisplay->createScreen(i, priv);
+ psc = priv->driswDisplay->createScreen(i, priv, false);
#endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */
bool indirect = false;

View File

@ -0,0 +1,76 @@
From e7c5f94a79ff0e545dfdc95703a541a0d43d739f Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 09:42:06 -0400
Subject: [PATCH 4/9] glx: pass implicit load param through allocation
---
src/glx/glxext.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
Index: mesa-24.0.3/src/glx/glxext.c
===================================================================
--- mesa-24.0.3.orig/src/glx/glxext.c
+++ mesa-24.0.3/src/glx/glxext.c
@@ -763,7 +763,7 @@ glx_screen_cleanup(struct glx_screen *ps
** If that works then fetch the per screen configs data.
*/
static Bool
-AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink)
+AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv, Bool zink, Bool implicit)
{
struct glx_screen *psc;
GLint i, screens;
@@ -783,19 +783,19 @@ AllocAndFetchScreenConfigs(Display * dpy
#if defined(GLX_USE_DRM)
#if defined(HAVE_DRI3)
if (priv->dri3Display)
- psc = priv->dri3Display->createScreen(i, priv, false);
+ psc = priv->dri3Display->createScreen(i, priv, implicit);
#endif /* HAVE_DRI3 */
if (psc == NULL && priv->dri2Display)
- psc = priv->dri2Display->createScreen(i, priv, false);
+ psc = priv->dri2Display->createScreen(i, priv, implicit);
#endif /* GLX_USE_DRM */
#ifdef GLX_USE_WINDOWSGL
if (psc == NULL && priv->windowsdriDisplay)
- psc = priv->windowsdriDisplay->createScreen(i, priv, false);
+ psc = priv->windowsdriDisplay->createScreen(i, priv, implicit);
#endif
if (psc == NULL && priv->driswDisplay)
- psc = priv->driswDisplay->createScreen(i, priv, false);
+ psc = priv->driswDisplay->createScreen(i, priv, psc == GLX_LOADER_USE_ZINK ? false : implicit);
#endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */
bool indirect = false;
@@ -929,14 +929,14 @@ __glXInitialize(Display * dpy)
}
#endif
- if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink)) {
+ if (!AllocAndFetchScreenConfigs(dpy, dpyPriv, zink | try_zink, zink || try_zink ? try_zink : !env)) {
Bool fail = True;
#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
if (try_zink) {
free(dpyPriv->screens);
dpyPriv->driswDisplay->destroyDisplay(dpyPriv->driswDisplay);
dpyPriv->driswDisplay = driswCreateDisplay(dpy, false);
- fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False);
+ fail = !AllocAndFetchScreenConfigs(dpy, dpyPriv, False, true);
}
#endif
if (fail) {
Index: mesa-24.0.3/src/glx/glxclient.h
===================================================================
--- mesa-24.0.3.orig/src/glx/glxclient.h
+++ mesa-24.0.3/src/glx/glxclient.h
@@ -78,6 +78,8 @@ typedef struct __GLXDRIdisplayRec __GLXD
typedef struct __GLXDRIscreenRec __GLXDRIscreen;
typedef struct __GLXDRIdrawableRec __GLXDRIdrawable;
+#define GLX_LOADER_USE_ZINK ((struct glx_screen *)(uintptr_t)-1)
+
struct __GLXDRIdisplayRec
{
/**

View File

@ -0,0 +1,575 @@
From 6b3f6a6e0b1e2cba749f8c38b087a59eee3f4efa Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 10:00:54 -0400
Subject: [PATCH 5/9] dri: plumb a 'implicit' param through createNewScreen
interfaces
---
include/GL/internal/dri_interface.h | 33 ++++++++++++++++--
include/GL/internal/mesa_interface.h | 5 ++-
src/egl/drivers/dri2/egl_dri2.c | 20 +++++------
src/gallium/frontends/dri/dri2.c | 6 ++--
src/gallium/frontends/dri/dri_util.c | 52 ++++++++++++++++++++--------
src/gallium/frontends/dri/dri_util.h | 5 +++
src/gallium/frontends/dri/drisw.c | 3 +-
src/gallium/frontends/dri/kopper.c | 3 +-
src/gbm/backends/dri/gbm_dri.c | 16 ++++-----
src/glx/dri2_glx.c | 8 ++---
src/glx/dri3_glx.c | 12 +++----
src/glx/drisw_glx.c | 14 ++++----
12 files changed, 120 insertions(+), 57 deletions(-)
Index: mesa-24.0.3/include/GL/internal/dri_interface.h
===================================================================
--- mesa-24.0.3.orig/include/GL/internal/dri_interface.h
+++ mesa-24.0.3/include/GL/internal/dri_interface.h
@@ -913,7 +913,7 @@ struct __DRIframebufferRec {
* extension. Version 1 is required by the X server, and version 3 is used.
*/
#define __DRI_SWRAST "DRI_SWRast"
-#define __DRI_SWRAST_VERSION 4
+#define __DRI_SWRAST_VERSION 5
struct __DRIswrastExtensionRec {
__DRIextension base;
@@ -961,6 +961,18 @@ struct __DRIswrastExtensionRec {
const __DRIconfig ***driver_configs,
void *loaderPrivate);
+ /**
+ * createNewScreen() with the driver extensions passed in and implicit load flag.
+ *
+ * \since version 6
+ */
+ __DRIscreen *(*createNewScreen3)(int screen,
+ const __DRIextension **loader_extensions,
+ const __DRIextension **driver_extensions,
+ const __DRIconfig ***driver_configs,
+ bool implicit,
+ void *loaderPrivate);
+
};
/** Common DRI function definitions, shared among DRI2 and Image extensions
@@ -972,6 +984,13 @@ typedef __DRIscreen *
const __DRIextension **driver_extensions,
const __DRIconfig ***driver_configs,
void *loaderPrivate);
+typedef __DRIscreen *
+(*__DRIcreateNewScreen3Func)(int screen, int fd,
+ const __DRIextension **extensions,
+ const __DRIextension **driver_extensions,
+ const __DRIconfig ***driver_configs,
+ bool implicit,
+ void *loaderPrivate);
typedef __DRIdrawable *
(*__DRIcreateNewDrawableFunc)(__DRIscreen *screen,
@@ -1107,7 +1126,7 @@ struct __DRIdri2LoaderExtensionRec {
* constructors for DRI2. The X server uses up to version 4.
*/
#define __DRI_DRI2 "DRI_DRI2"
-#define __DRI_DRI2_VERSION 4
+#define __DRI_DRI2_VERSION 5
#define __DRI_API_OPENGL 0 /**< OpenGL compatibility profile */
#define __DRI_API_GLES 1 /**< OpenGL ES 1.x */
@@ -1226,6 +1245,13 @@ struct __DRIdri2ExtensionRec {
* \since version 4
*/
__DRIcreateNewScreen2Func createNewScreen2;
+
+ /**
+ * createNewScreen with the driver's extension list passed in and implicit load flag.
+ *
+ * \since version 5
+ */
+ __DRIcreateNewScreen3Func createNewScreen3;
};
@@ -2083,7 +2109,7 @@ struct __DRIimageLoaderExtensionRec {
*/
#define __DRI_IMAGE_DRIVER "DRI_IMAGE_DRIVER"
-#define __DRI_IMAGE_DRIVER_VERSION 1
+#define __DRI_IMAGE_DRIVER_VERSION 2
struct __DRIimageDriverExtensionRec {
__DRIextension base;
@@ -2093,6 +2119,7 @@ struct __DRIimageDriverExtensionRec {
__DRIcreateNewDrawableFunc createNewDrawable;
__DRIcreateContextAttribsFunc createContextAttribs;
__DRIgetAPIMaskFunc getAPIMask;
+ __DRIcreateNewScreen3Func createNewScreen3;
};
/**
Index: mesa-24.0.3/include/GL/internal/mesa_interface.h
===================================================================
--- mesa-24.0.3.orig/include/GL/internal/mesa_interface.h
+++ mesa-24.0.3/include/GL/internal/mesa_interface.h
@@ -33,7 +33,7 @@
typedef struct __DRImesaCoreExtensionRec __DRImesaCoreExtension;
#define __DRI_MESA "DRI_Mesa"
-#define __DRI_MESA_VERSION 1
+#define __DRI_MESA_VERSION 2
struct dri_screen;
@@ -63,6 +63,9 @@ struct __DRImesaCoreExtensionRec {
const __DRIconfig **(*initScreen)(struct dri_screen *screen);
int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd);
+
+ /* version 2 */
+ __DRIcreateNewScreen3Func createNewScreen3;
};
#endif /* MESA_INTERFACE_H */
Index: mesa-24.0.3/src/egl/drivers/dri2/egl_dri2.c
===================================================================
--- mesa-24.0.3.orig/src/egl/drivers/dri2/egl_dri2.c
+++ mesa-24.0.3/src/egl/drivers/dri2/egl_dri2.c
@@ -701,8 +701,8 @@ const __DRIimageLookupExtension image_lo
static const struct dri_extension_match dri3_driver_extensions[] = {
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
- {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false},
- {__DRI_IMAGE_DRIVER, 1, offsetof(struct dri2_egl_display, image_driver),
+ {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false},
+ {__DRI_IMAGE_DRIVER, 2, offsetof(struct dri2_egl_display, image_driver),
false},
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
true},
@@ -710,8 +710,8 @@ static const struct dri_extension_match
static const struct dri_extension_match dri2_driver_extensions[] = {
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
- {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false},
- {__DRI_DRI2, 4, offsetof(struct dri2_egl_display, dri2), false},
+ {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false},
+ {__DRI_DRI2, 5, offsetof(struct dri2_egl_display, dri2), false},
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
true},
};
@@ -724,8 +724,8 @@ static const struct dri_extension_match
static const struct dri_extension_match swrast_driver_extensions[] = {
{__DRI_CORE, 1, offsetof(struct dri2_egl_display, core), false},
- {__DRI_MESA, 1, offsetof(struct dri2_egl_display, mesa), false},
- {__DRI_SWRAST, 4, offsetof(struct dri2_egl_display, swrast), false},
+ {__DRI_MESA, 2, offsetof(struct dri2_egl_display, mesa), false},
+ {__DRI_SWRAST, 5, offsetof(struct dri2_egl_display, swrast), false},
{__DRI_CONFIG_OPTIONS, 2, offsetof(struct dri2_egl_display, configOptions),
true},
};
@@ -1013,18 +1013,18 @@ dri2_create_screen(_EGLDisplay *disp)
* will not crash.
*/
if (strcmp(dri2_dpy->driver_name, driver_name_display_gpu) == 0) {
- dri2_dpy->dri_screen_display_gpu = dri2_dpy->mesa->createNewScreen(
+ dri2_dpy->dri_screen_display_gpu = dri2_dpy->mesa->createNewScreen3(
0, dri2_dpy->fd_display_gpu, dri2_dpy->loader_extensions,
- dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, disp);
+ dri2_dpy->driver_extensions, &dri2_dpy->driver_configs, false, disp);
}
free(driver_name_display_gpu);
}
}
int screen_fd = dri2_dpy->swrast ? -1 : dri2_dpy->fd_render_gpu;
- dri2_dpy->dri_screen_render_gpu = dri2_dpy->mesa->createNewScreen(
+ dri2_dpy->dri_screen_render_gpu = dri2_dpy->mesa->createNewScreen3(
0, screen_fd, dri2_dpy->loader_extensions, dri2_dpy->driver_extensions,
- &dri2_dpy->driver_configs, disp);
+ &dri2_dpy->driver_configs, false, disp);
if (dri2_dpy->dri_screen_render_gpu == NULL) {
_eglLog(_EGL_WARNING, "egl: failed to create dri2 screen");
Index: mesa-24.0.3/src/gallium/frontends/dri/dri2.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri2.c
+++ mesa-24.0.3/src/gallium/frontends/dri/dri2.c
@@ -2484,12 +2484,13 @@ dri_query_compatible_render_only_device_
}
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
- .base = { __DRI_MESA, 1 },
+ .base = { __DRI_MESA, 2 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = dri2_init_screen,
.queryCompatibleRenderOnlyDeviceFd = dri_query_compatible_render_only_device_fd,
+ .createNewScreen3 = driCreateNewScreen3,
};
/* This is the table of extensions that the loader will dlsym() for. */
@@ -2503,11 +2504,12 @@ const __DRIextension *galliumdrm_driver_
};
static const struct __DRImesaCoreExtensionRec swkmsMesaCoreExtension = {
- .base = { __DRI_MESA, 1 },
+ .base = { __DRI_MESA, 2 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = dri_swrast_kms_init_screen,
+ .createNewScreen3 = driCreateNewScreen3,
};
const __DRIextension *dri_swrast_kms_driver_extensions[] = {
Index: mesa-24.0.3/src/gallium/frontends/dri/dri_util.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri_util.c
+++ mesa-24.0.3/src/gallium/frontends/dri/dri_util.c
@@ -96,10 +96,10 @@ setupLoaderExtensions(struct dri_screen
* Display.
*/
__DRIscreen *
-driCreateNewScreen2(int scrn, int fd,
+driCreateNewScreen3(int scrn, int fd,
const __DRIextension **loader_extensions,
const __DRIextension **driver_extensions,
- const __DRIconfig ***driver_configs, void *data)
+ const __DRIconfig ***driver_configs, bool implicit, void *data)
{
static const __DRIextension *emptyExtensionList[] = { NULL };
struct dri_screen *screen;
@@ -172,14 +172,25 @@ driCreateNewScreen2(int scrn, int fd,
return opaque_dri_screen(screen);
}
+__DRIscreen *
+driCreateNewScreen2(int scrn, int fd,
+ const __DRIextension **loader_extensions,
+ const __DRIextension **driver_extensions,
+ const __DRIconfig ***driver_configs, void *data)
+{
+ return driCreateNewScreen3(scrn, fd, loader_extensions,
+ driver_extensions,
+ driver_configs, false, data);
+}
+
static __DRIscreen *
dri2CreateNewScreen(int scrn, int fd,
const __DRIextension **extensions,
const __DRIconfig ***driver_configs, void *data)
{
- return driCreateNewScreen2(scrn, fd, extensions,
+ return driCreateNewScreen3(scrn, fd, extensions,
galliumdrm_driver_extensions,
- driver_configs, data);
+ driver_configs, false, data);
}
static __DRIscreen *
@@ -187,9 +198,9 @@ swkmsCreateNewScreen(int scrn, int fd,
const __DRIextension **extensions,
const __DRIconfig ***driver_configs, void *data)
{
- return driCreateNewScreen2(scrn, fd, extensions,
+ return driCreateNewScreen3(scrn, fd, extensions,
dri_swrast_kms_driver_extensions,
- driver_configs, data);
+ driver_configs, false, data);
}
/** swrast driver createNewScreen entrypoint. */
@@ -197,9 +208,9 @@ static __DRIscreen *
driSWRastCreateNewScreen(int scrn, const __DRIextension **extensions,
const __DRIconfig ***driver_configs, void *data)
{
- return driCreateNewScreen2(scrn, -1, extensions,
+ return driCreateNewScreen3(scrn, -1, extensions,
galliumsw_driver_extensions,
- driver_configs, data);
+ driver_configs, false, data);
}
static __DRIscreen *
@@ -207,8 +218,17 @@ driSWRastCreateNewScreen2(int scrn, cons
const __DRIextension **driver_extensions,
const __DRIconfig ***driver_configs, void *data)
{
- return driCreateNewScreen2(scrn, -1, extensions, driver_extensions,
- driver_configs, data);
+ return driCreateNewScreen3(scrn, -1, extensions, driver_extensions,
+ driver_configs, false, data);
+}
+
+static __DRIscreen *
+driSWRastCreateNewScreen3(int scrn, const __DRIextension **extensions,
+ const __DRIextension **driver_extensions,
+ const __DRIconfig ***driver_configs, bool implicit, void *data)
+{
+ return driCreateNewScreen3(scrn, -1, extensions, driver_extensions,
+ driver_configs, implicit, data);
}
/**
@@ -878,7 +898,7 @@ const __DRIcoreExtension driCoreExtensio
/** DRI2 interface */
const __DRIdri2Extension driDRI2Extension = {
- .base = { __DRI_DRI2, 4 },
+ .base = { __DRI_DRI2, 5 },
.createNewScreen = dri2CreateNewScreen,
.createNewDrawable = driCreateNewDrawable,
@@ -889,10 +909,11 @@ const __DRIdri2Extension driDRI2Extensio
.releaseBuffer = dri2ReleaseBuffer,
.createContextAttribs = driCreateContextAttribs,
.createNewScreen2 = driCreateNewScreen2,
+ .createNewScreen3 = driCreateNewScreen3,
};
const __DRIdri2Extension swkmsDRI2Extension = {
- .base = { __DRI_DRI2, 4 },
+ .base = { __DRI_DRI2, 5 },
.createNewScreen = swkmsCreateNewScreen,
.createNewDrawable = driCreateNewDrawable,
@@ -903,18 +924,20 @@ const __DRIdri2Extension swkmsDRI2Extens
.releaseBuffer = dri2ReleaseBuffer,
.createContextAttribs = driCreateContextAttribs,
.createNewScreen2 = driCreateNewScreen2,
+ .createNewScreen3 = driCreateNewScreen3,
};
#endif
const __DRIswrastExtension driSWRastExtension = {
- .base = { __DRI_SWRAST, 4 },
+ .base = { __DRI_SWRAST, 5 },
.createNewScreen = driSWRastCreateNewScreen,
.createNewDrawable = driCreateNewDrawable,
.createNewContextForAPI = driCreateNewContextForAPI,
.createContextAttribs = driCreateContextAttribs,
.createNewScreen2 = driSWRastCreateNewScreen2,
+ .createNewScreen3 = driSWRastCreateNewScreen3,
};
const __DRI2configQueryExtension dri2ConfigQueryExtension = {
@@ -1117,10 +1140,11 @@ driImageFormatToGLFormat(uint32_t image_
/** Image driver interface */
const __DRIimageDriverExtension driImageDriverExtension = {
- .base = { __DRI_IMAGE_DRIVER, 1 },
+ .base = { __DRI_IMAGE_DRIVER, 2 },
.createNewScreen2 = driCreateNewScreen2,
.createNewDrawable = driCreateNewDrawable,
.getAPIMask = driGetAPIMask,
.createContextAttribs = driCreateContextAttribs,
+ .createNewScreen3 = driCreateNewScreen3,
};
Index: mesa-24.0.3/src/gallium/frontends/dri/dri_util.h
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri_util.h
+++ mesa-24.0.3/src/gallium/frontends/dri/dri_util.h
@@ -104,6 +104,11 @@ struct __DriverContextConfig {
#define __DRIVER_CONTEXT_ATTRIB_PROTECTED (1 << 4)
__DRIscreen *
+driCreateNewScreen3(int scrn, int fd,
+ const __DRIextension **loader_extensions,
+ const __DRIextension **driver_extensions,
+ const __DRIconfig ***driver_configs, bool implicit, void *data);
+__DRIscreen *
driCreateNewScreen2(int scrn, int fd,
const __DRIextension **loader_extensions,
const __DRIextension **driver_extensions,
Index: mesa-24.0.3/src/gallium/frontends/dri/drisw.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/drisw.c
+++ mesa-24.0.3/src/gallium/frontends/dri/drisw.c
@@ -616,11 +616,12 @@ const __DRIcopySubBufferExtension driSWC
};
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
- .base = { __DRI_MESA, 1 },
+ .base = { __DRI_MESA, 2 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = drisw_init_screen,
+ .createNewScreen3 = driCreateNewScreen3,
};
/* This is the table of extensions that the loader will dlsym() for. */
Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c
+++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c
@@ -963,11 +963,12 @@ const __DRIkopperExtension driKopperExte
};
static const struct __DRImesaCoreExtensionRec mesaCoreExtension = {
- .base = { __DRI_MESA, 1 },
+ .base = { __DRI_MESA, 2 },
.version_string = MESA_INTERFACE_VERSION_STRING,
.createNewScreen = driCreateNewScreen2,
.createContext = driCreateContextAttribs,
.initScreen = kopper_init_screen,
+ .createNewScreen3 = driCreateNewScreen3,
};
const __DRIextension *galliumvk_driver_extensions[] = {
Index: mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c
===================================================================
--- mesa-24.0.3.orig/src/gbm/backends/dri/gbm_dri.c
+++ mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c
@@ -250,14 +250,14 @@ static struct dri_extension_match dri_co
static struct dri_extension_match gbm_dri_device_extensions[] = {
{ __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false },
- { __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false },
- { __DRI_IMAGE_DRIVER, 1, offsetof(struct gbm_dri_device, image_driver), false },
+ { __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false },
+ { __DRI_IMAGE_DRIVER, 2, offsetof(struct gbm_dri_device, image_driver), false },
};
static struct dri_extension_match gbm_swrast_device_extensions[] = {
{ __DRI_CORE, 1, offsetof(struct gbm_dri_device, core), false },
- { __DRI_MESA, 1, offsetof(struct gbm_dri_device, mesa), false },
- { __DRI_SWRAST, 4, offsetof(struct gbm_dri_device, swrast), false },
+ { __DRI_MESA, 2, offsetof(struct gbm_dri_device, mesa), false },
+ { __DRI_SWRAST, 5, offsetof(struct gbm_dri_device, swrast), false },
{ __DRI_KOPPER, 1, offsetof(struct gbm_dri_device, kopper), true },
};
@@ -315,10 +315,10 @@ dri_screen_create_for_driver(struct gbm_
dri->driver_extensions = extensions;
dri->loader_extensions = gbm_dri_screen_extensions;
- dri->screen = dri->mesa->createNewScreen(0, swrast ? -1 : dri->base.v0.fd,
- dri->loader_extensions,
- dri->driver_extensions,
- &dri->driver_configs, dri);
+ dri->screen = dri->mesa->createNewScreen3(0, swrast ? -1 : dri->base.v0.fd,
+ dri->loader_extensions,
+ dri->driver_extensions,
+ &dri->driver_configs, false, dri);
if (dri->screen == NULL)
goto close_driver;
Index: mesa-24.0.3/src/glx/dri2_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/dri2_glx.c
+++ mesa-24.0.3/src/glx/dri2_glx.c
@@ -1064,17 +1064,17 @@ dri2CreateScreen(int screen, struct glx_
static const struct dri_extension_match exts[] = {
{ __DRI_CORE, 1, offsetof(struct dri2_screen, core), false },
- { __DRI_DRI2, 4, offsetof(struct dri2_screen, dri2), false },
- { __DRI_MESA, 1, offsetof(struct dri2_screen, mesa), false },
+ { __DRI_DRI2, 5, offsetof(struct dri2_screen, dri2), false },
+ { __DRI_MESA, 2, offsetof(struct dri2_screen, mesa), false },
};
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
goto handle_error;
psc->driScreen =
- psc->dri2->createNewScreen2(screen, psc->fd,
+ psc->dri2->createNewScreen3(screen, psc->fd,
(const __DRIextension **)&pdp->loader_extensions[0],
extensions,
- &driver_configs, psc);
+ &driver_configs, implicit, psc);
if (psc->driScreen == NULL) {
ErrorMessageF("glx: failed to create dri2 screen\n");
Index: mesa-24.0.3/src/glx/dri3_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/dri3_glx.c
+++ mesa-24.0.3/src/glx/dri3_glx.c
@@ -841,8 +841,8 @@ dri3_create_screen(int screen, struct gl
static const struct dri_extension_match exts[] = {
{ __DRI_CORE, 1, offsetof(struct dri3_screen, core), false },
- { __DRI_IMAGE_DRIVER, 1, offsetof(struct dri3_screen, image_driver), false },
- { __DRI_MESA, 1, offsetof(struct dri3_screen, mesa), false },
+ { __DRI_IMAGE_DRIVER, 2, offsetof(struct dri3_screen, image_driver), false },
+ { __DRI_MESA, 2, offsetof(struct dri3_screen, mesa), false },
};
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
goto handle_error;
@@ -858,10 +858,10 @@ dri3_create_screen(int screen, struct gl
*/
if (strcmp(driverName, driverNameDisplayGPU) == 0) {
psc->driScreenDisplayGPU =
- psc->image_driver->createNewScreen2(screen, psc->fd_display_gpu,
+ psc->image_driver->createNewScreen3(screen, psc->fd_display_gpu,
pdp->loader_extensions,
extensions,
- &driver_configs, psc);
+ &driver_configs, implicit, psc);
}
free(driverNameDisplayGPU);
@@ -869,10 +869,10 @@ dri3_create_screen(int screen, struct gl
}
psc->driScreenRenderGPU =
- psc->image_driver->createNewScreen2(screen, psc->fd_render_gpu,
+ psc->image_driver->createNewScreen3(screen, psc->fd_render_gpu,
pdp->loader_extensions,
extensions,
- &driver_configs, psc);
+ &driver_configs, implicit, psc);
if (psc->driScreenRenderGPU == NULL) {
ErrorMessageF("glx: failed to create dri3 screen\n");
Index: mesa-24.0.3/src/glx/drisw_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/drisw_glx.c
+++ mesa-24.0.3/src/glx/drisw_glx.c
@@ -934,7 +934,7 @@ kopperGetSwapInterval(__GLXDRIdrawable *
static struct glx_screen *
driswCreateScreenDriver(int screen, struct glx_display *priv,
- const char *driver)
+ const char *driver, bool implicit)
{
__GLXDRIscreen *psp;
const __DRIconfig **driver_configs;
@@ -967,18 +967,18 @@ driswCreateScreenDriver(int screen, stru
static const struct dri_extension_match exts[] = {
{ __DRI_CORE, 1, offsetof(struct drisw_screen, core), false },
- { __DRI_SWRAST, 4, offsetof(struct drisw_screen, swrast), false },
+ { __DRI_SWRAST, 5, offsetof(struct drisw_screen, swrast), false },
{ __DRI_KOPPER, 1, offsetof(struct drisw_screen, kopper), true },
{ __DRI_COPY_SUB_BUFFER, 1, offsetof(struct drisw_screen, copySubBuffer), true },
- { __DRI_MESA, 1, offsetof(struct drisw_screen, mesa), false },
+ { __DRI_MESA, 2, offsetof(struct drisw_screen, mesa), false },
};
if (!loader_bind_extensions(psc, exts, ARRAY_SIZE(exts), extensions))
goto handle_error;
psc->driScreen =
- psc->swrast->createNewScreen2(screen, loader_extensions_local,
+ psc->swrast->createNewScreen3(screen, loader_extensions_local,
extensions,
- &driver_configs, psc);
+ &driver_configs, implicit, psc);
if (psc->driScreen == NULL) {
ErrorMessageF("glx: failed to create drisw screen\n");
goto handle_error;
@@ -1059,10 +1059,10 @@ driswCreateScreen(int screen, struct glx
{
const struct drisw_display *pdpyp = (struct drisw_display *)priv->driswDisplay;
if (pdpyp->zink && !debug_get_bool_option("LIBGL_KOPPER_DISABLE", false)) {
- return driswCreateScreenDriver(screen, priv, "zink");
+ return driswCreateScreenDriver(screen, priv, "zink", implicit);
}
- return driswCreateScreenDriver(screen, priv, "swrast");
+ return driswCreateScreenDriver(screen, priv, "swrast", implicit);
}
/* Called from __glXFreeDisplayPrivate.

View File

@ -0,0 +1,82 @@
From 664e73e7120fbf5ad62da643a7e4aff525d38d94 Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 10:01:29 -0400
Subject: [PATCH 6/9] gbm: plumb an 'implicit' param through device creation
this is always true except in the software fallback
---
src/gbm/backends/dri/gbm_dri.c | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
Index: mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c
===================================================================
--- mesa-24.0.3.orig/src/gbm/backends/dri/gbm_dri.c
+++ mesa-24.0.3/src/gbm/backends/dri/gbm_dri.c
@@ -287,7 +287,7 @@ dri_open_driver(struct gbm_dri_device *d
}
static int
-dri_screen_create_for_driver(struct gbm_dri_device *dri, char *driver_name)
+dri_screen_create_for_driver(struct gbm_dri_device *dri, char *driver_name, bool implicit)
{
bool swrast = driver_name == NULL; /* If it's pure swrast, not just swkms. */
@@ -318,7 +318,7 @@ dri_screen_create_for_driver(struct gbm_
dri->screen = dri->mesa->createNewScreen3(0, swrast ? -1 : dri->base.v0.fd,
dri->loader_extensions,
dri->driver_extensions,
- &dri->driver_configs, false, dri);
+ &dri->driver_configs, implicit, dri);
if (dri->screen == NULL)
goto close_driver;
@@ -348,7 +348,7 @@ fail:
}
static int
-dri_screen_create(struct gbm_dri_device *dri)
+dri_screen_create(struct gbm_dri_device *dri, bool implicit)
{
char *driver_name;
@@ -356,11 +356,11 @@ dri_screen_create(struct gbm_dri_device
if (!driver_name)
return -1;
- return dri_screen_create_for_driver(dri, driver_name);
+ return dri_screen_create_for_driver(dri, driver_name, implicit);
}
static int
-dri_screen_create_sw(struct gbm_dri_device *dri)
+dri_screen_create_sw(struct gbm_dri_device *dri, bool implicit)
{
char *driver_name;
int ret;
@@ -369,9 +369,9 @@ dri_screen_create_sw(struct gbm_dri_devi
if (!driver_name)
return -errno;
- ret = dri_screen_create_for_driver(dri, driver_name);
+ ret = dri_screen_create_for_driver(dri, driver_name, implicit);
if (ret != 0)
- ret = dri_screen_create_for_driver(dri, NULL);
+ ret = dri_screen_create_for_driver(dri, NULL, implicit);
if (ret != 0)
return ret;
@@ -1289,11 +1289,11 @@ dri_device_create(int fd, uint32_t gbm_b
force_sw = debug_get_bool_option("GBM_ALWAYS_SOFTWARE", false);
if (!force_sw) {
- ret = dri_screen_create(dri);
+ ret = dri_screen_create(dri, false);
if (ret)
- ret = dri_screen_create_sw(dri);
+ ret = dri_screen_create_sw(dri, true);
} else {
- ret = dri_screen_create_sw(dri);
+ ret = dri_screen_create_sw(dri, false);
}
if (ret)

View File

@ -0,0 +1,88 @@
From 55236ac5349f1208356e713336276c052384e444 Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 10:05:49 -0400
Subject: [PATCH 7/9] frontends/dri: plumb an 'implicit' param through screen
init
---
include/GL/internal/mesa_interface.h | 2 +-
src/gallium/frontends/dri/dri2.c | 4 ++--
src/gallium/frontends/dri/dri_util.c | 2 +-
src/gallium/frontends/dri/drisw.c | 2 +-
src/gallium/frontends/dri/kopper.c | 2 +-
5 files changed, 6 insertions(+), 6 deletions(-)
Index: mesa-24.0.3/include/GL/internal/mesa_interface.h
===================================================================
--- mesa-24.0.3.orig/include/GL/internal/mesa_interface.h
+++ mesa-24.0.3/include/GL/internal/mesa_interface.h
@@ -60,7 +60,7 @@ struct __DRImesaCoreExtensionRec {
__DRIcreateContextAttribsFunc createContext;
/* driver function for finishing initialization inside createNewScreen(). */
- const __DRIconfig **(*initScreen)(struct dri_screen *screen);
+ const __DRIconfig **(*initScreen)(struct dri_screen *screen, bool implicit);
int (*queryCompatibleRenderOnlyDeviceFd)(int kms_only_fd);
Index: mesa-24.0.3/src/gallium/frontends/dri/dri2.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri2.c
+++ mesa-24.0.3/src/gallium/frontends/dri/dri2.c
@@ -2374,7 +2374,7 @@ dri2_create_drawable(struct dri_screen *
* Returns the struct gl_config supported by this driver.
*/
static const __DRIconfig **
-dri2_init_screen(struct dri_screen *screen)
+dri2_init_screen(struct dri_screen *screen, bool implicit)
{
const __DRIconfig **configs;
struct pipe_screen *pscreen = NULL;
@@ -2430,7 +2430,7 @@ fail:
* Returns the struct gl_config supported by this driver.
*/
static const __DRIconfig **
-dri_swrast_kms_init_screen(struct dri_screen *screen)
+dri_swrast_kms_init_screen(struct dri_screen *screen, bool implicit)
{
#if defined(GALLIUM_SOFTPIPE)
const __DRIconfig **configs;
Index: mesa-24.0.3/src/gallium/frontends/dri/dri_util.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri_util.c
+++ mesa-24.0.3/src/gallium/frontends/dri/dri_util.c
@@ -136,7 +136,7 @@ driCreateNewScreen3(int scrn, int fd,
driParseConfigFiles(&screen->optionCache, &screen->optionInfo, screen->myNum,
"dri2", NULL, NULL, NULL, 0, NULL, 0);
- *driver_configs = mesa->initScreen(screen);
+ *driver_configs = mesa->initScreen(screen, implicit);
if (*driver_configs == NULL) {
dri_destroy_screen(screen);
return NULL;
Index: mesa-24.0.3/src/gallium/frontends/dri/drisw.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/drisw.c
+++ mesa-24.0.3/src/gallium/frontends/dri/drisw.c
@@ -539,7 +539,7 @@ drisw_create_drawable(struct dri_screen
}
static const __DRIconfig **
-drisw_init_screen(struct dri_screen *screen)
+drisw_init_screen(struct dri_screen *screen, bool implicit)
{
const __DRIswrastLoaderExtension *loader = screen->swrast_loader;
const __DRIconfig **configs;
Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c
+++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c
@@ -110,7 +110,7 @@ static const __DRIextension *drivk_sw_sc
};
static const __DRIconfig **
-kopper_init_screen(struct dri_screen *screen)
+kopper_init_screen(struct dri_screen *screen, bool implicit)
{
const __DRIconfig **configs;
struct pipe_screen *pscreen = NULL;

View File

@ -0,0 +1,281 @@
From 4df36439ecff5a2b65e93ab36d1ebea780269b63 Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 10:13:40 -0400
Subject: [PATCH 8/9] pipe-loader: plumb a flag for implicit driver load
through screen creation
---
src/gallium/auxiliary/pipe-loader/pipe_loader.c | 7 ++++---
src/gallium/auxiliary/pipe-loader/pipe_loader.h | 6 ++++--
src/gallium/auxiliary/vl/vl_winsys_dri.c | 2 +-
src/gallium/auxiliary/vl/vl_winsys_dri3.c | 2 +-
src/gallium/auxiliary/vl/vl_winsys_drm.c | 2 +-
src/gallium/frontends/clover/core/device.cpp | 2 +-
src/gallium/frontends/dri/dri2.c | 4 ++--
src/gallium/frontends/dri/drisw.c | 2 +-
src/gallium/frontends/dri/kopper.c | 2 +-
src/gallium/frontends/lavapipe/lvp_device.c | 2 +-
src/gallium/frontends/rusticl/mesa/pipe/device.rs | 2 +-
src/gallium/frontends/teflon/tfl_device.c | 2 +-
src/gallium/frontends/xa/xa_tracker.c | 2 +-
src/gallium/include/pipe/p_screen.h | 1 +
src/gallium/targets/d3dadapter9/drm.c | 4 ++--
src/gallium/tests/trivial/quad-tex.c | 2 +-
src/gallium/tests/trivial/tri.c | 2 +-
17 files changed, 25 insertions(+), 21 deletions(-)
Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader.c
+++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.c
@@ -169,11 +169,12 @@ pipe_loader_get_driinfo_xml(const char *
}
struct pipe_screen *
-pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk)
+pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk, bool implicit)
{
struct pipe_screen_config config;
pipe_loader_load_options(dev);
+ config.implicit_driver_load = implicit;
config.options_info = &dev->option_info;
config.options = &dev->option_cache;
@@ -181,9 +182,9 @@ pipe_loader_create_screen_vk(struct pipe
}
struct pipe_screen *
-pipe_loader_create_screen(struct pipe_loader_device *dev)
+pipe_loader_create_screen(struct pipe_loader_device *dev, bool implicit)
{
- return pipe_loader_create_screen_vk(dev, false);
+ return pipe_loader_create_screen_vk(dev, false, implicit);
}
struct util_dl_library *
Index: mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/pipe-loader/pipe_loader.h
+++ mesa-24.0.3/src/gallium/auxiliary/pipe-loader/pipe_loader.h
@@ -88,17 +88,19 @@ pipe_loader_probe(struct pipe_loader_dev
*
* \param dev Device the screen will be created for.
* \param sw_vk Device is for software vulkan
+ * \param implicit Whether the driver is being loaded implicitly.
*/
struct pipe_screen *
-pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk);
+pipe_loader_create_screen_vk(struct pipe_loader_device *dev, bool sw_vk, bool implicit);
/**
* Create a pipe_screen for the specified device.
*
* \param dev Device the screen will be created for.
+ * \param implicit Whether the driver is being loaded implicitly.
*/
struct pipe_screen *
-pipe_loader_create_screen(struct pipe_loader_device *dev);
+pipe_loader_create_screen(struct pipe_loader_device *dev, bool implicit);
/**
* Ensures that the driconf option cache has been parsed for the driver.
Index: mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/vl/vl_winsys_dri.c
+++ mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri.c
@@ -459,7 +459,7 @@ vl_dri2_screen_create(Display *display,
goto free_authenticate;
if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd, false))
- scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev);
+ scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, false);
if (!scrn->base.pscreen)
goto release_pipe;
Index: mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri3.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/vl/vl_winsys_dri3.c
+++ mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_dri3.c
@@ -843,7 +843,7 @@ vl_dri3_screen_create(Display *display,
free(geom_reply);
if (pipe_loader_drm_probe_fd(&scrn->base.dev, fd, false))
- scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev);
+ scrn->base.pscreen = pipe_loader_create_screen(scrn->base.dev, false);
if (!scrn->base.pscreen)
goto release_pipe;
Index: mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_drm.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/auxiliary/vl/vl_winsys_drm.c
+++ mesa-24.0.3/src/gallium/auxiliary/vl/vl_winsys_drm.c
@@ -47,7 +47,7 @@ vl_drm_screen_create(int fd)
return NULL;
if (pipe_loader_drm_probe_fd(&vscreen->dev, fd, false))
- vscreen->pscreen = pipe_loader_create_screen(vscreen->dev);
+ vscreen->pscreen = pipe_loader_create_screen(vscreen->dev, false);
if (!vscreen->pscreen)
goto release_pipe;
Index: mesa-24.0.3/src/gallium/frontends/clover/core/device.cpp
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/clover/core/device.cpp
+++ mesa-24.0.3/src/gallium/frontends/clover/core/device.cpp
@@ -163,7 +163,7 @@ namespace {
device::device(clover::platform &platform, pipe_loader_device *ldev) :
platform(platform), clc_cache(NULL), ldev(ldev) {
- pipe = pipe_loader_create_screen(ldev);
+ pipe = pipe_loader_create_screen(ldev, false);
if (pipe && pipe->get_param(pipe, PIPE_CAP_COMPUTE)) {
const bool has_supported_ir = supports_ir(PIPE_SHADER_IR_NATIVE) ||
supports_ir(PIPE_SHADER_IR_NIR_SERIALIZED);
Index: mesa-24.0.3/src/gallium/frontends/dri/dri2.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/dri2.c
+++ mesa-24.0.3/src/gallium/frontends/dri/dri2.c
@@ -2382,7 +2382,7 @@ dri2_init_screen(struct dri_screen *scre
(void) mtx_init(&screen->opencl_func_mutex, mtx_plain);
if (pipe_loader_drm_probe_fd(&screen->dev, screen->fd, false))
- pscreen = pipe_loader_create_screen(screen->dev);
+ pscreen = pipe_loader_create_screen(screen->dev, implicit);
if (!pscreen)
goto fail;
@@ -2438,7 +2438,7 @@ dri_swrast_kms_init_screen(struct dri_sc
#ifdef HAVE_DRISW_KMS
if (pipe_loader_sw_probe_kms(&screen->dev, screen->fd))
- pscreen = pipe_loader_create_screen(screen->dev);
+ pscreen = pipe_loader_create_screen(screen->dev, implicit);
#endif
if (!pscreen)
Index: mesa-24.0.3/src/gallium/frontends/dri/drisw.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/drisw.c
+++ mesa-24.0.3/src/gallium/frontends/dri/drisw.c
@@ -562,7 +562,7 @@ drisw_init_screen(struct dri_screen *scr
success = pipe_loader_sw_probe_dri(&screen->dev, lf);
if (success)
- pscreen = pipe_loader_create_screen(screen->dev);
+ pscreen = pipe_loader_create_screen(screen->dev, implicit);
if (!pscreen)
goto fail;
Index: mesa-24.0.3/src/gallium/frontends/dri/kopper.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/dri/kopper.c
+++ mesa-24.0.3/src/gallium/frontends/dri/kopper.c
@@ -131,7 +131,7 @@ kopper_init_screen(struct dri_screen *sc
success = pipe_loader_vk_probe_dri(&screen->dev);
if (success)
- pscreen = pipe_loader_create_screen(screen->dev);
+ pscreen = pipe_loader_create_screen(screen->dev, implicit);
if (!pscreen)
goto fail;
Index: mesa-24.0.3/src/gallium/frontends/lavapipe/lvp_device.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/lavapipe/lvp_device.c
+++ mesa-24.0.3/src/gallium/frontends/lavapipe/lvp_device.c
@@ -1101,7 +1101,7 @@ lvp_physical_device_init(struct lvp_phys
}
device->pld = pld;
- device->pscreen = pipe_loader_create_screen_vk(device->pld, true);
+ device->pscreen = pipe_loader_create_screen_vk(device->pld, true, false);
if (!device->pscreen)
return vk_error(instance, VK_ERROR_OUT_OF_HOST_MEMORY);
for (unsigned i = 0; i < ARRAY_SIZE(device->drv_options); i++)
Index: mesa-24.0.3/src/gallium/frontends/xa/xa_tracker.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/xa/xa_tracker.c
+++ mesa-24.0.3/src/gallium/frontends/xa/xa_tracker.c
@@ -172,7 +172,7 @@ xa_tracker_create(int drm_fd)
return NULL;
if (pipe_loader_drm_probe_fd(&xa->dev, drm_fd, false))
- xa->screen = pipe_loader_create_screen(xa->dev);
+ xa->screen = pipe_loader_create_screen(xa->dev, false);
if (!xa->screen)
goto out_no_screen;
Index: mesa-24.0.3/src/gallium/include/pipe/p_screen.h
===================================================================
--- mesa-24.0.3.orig/src/gallium/include/pipe/p_screen.h
+++ mesa-24.0.3/src/gallium/include/pipe/p_screen.h
@@ -806,6 +806,7 @@ struct pipe_screen {
* Global configuration options for screen creation.
*/
struct pipe_screen_config {
+ bool implicit_driver_load;
struct driOptionCache *options;
const struct driOptionCache *options_info;
};
Index: mesa-24.0.3/src/gallium/targets/d3dadapter9/drm.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/targets/d3dadapter9/drm.c
+++ mesa-24.0.3/src/gallium/targets/d3dadapter9/drm.c
@@ -242,7 +242,7 @@ drm_create_adapter( int fd,
return D3DERR_DRIVERINTERNALERROR;
}
- ctx->base.hal = pipe_loader_create_screen(ctx->dev);
+ ctx->base.hal = pipe_loader_create_screen(ctx->dev, false);
if (!ctx->base.hal) {
ERR("Unable to load requested driver.\n");
drm_destroy(&ctx->base);
@@ -302,7 +302,7 @@ drm_create_adapter( int fd,
sw_rendering |= debug_get_bool_option("D3D_ALWAYS_SOFTWARE", false);
/* wrap it to create a software screen that can share resources */
if (sw_rendering && pipe_loader_sw_probe_wrapped(&ctx->swdev, ctx->base.hal))
- ctx->base.ref = pipe_loader_create_screen(ctx->swdev);
+ ctx->base.ref = pipe_loader_create_screen(ctx->swdev, false);
else {
/* Use the hardware for sw rendering */
ctx->swdev = ctx->dev;
Index: mesa-24.0.3/src/gallium/tests/trivial/quad-tex.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/tests/trivial/quad-tex.c
+++ mesa-24.0.3/src/gallium/tests/trivial/quad-tex.c
@@ -97,7 +97,7 @@ static void init_prog(struct program *p)
assert(ret);
/* init a pipe screen */
- p->screen = pipe_loader_create_screen(p->dev);
+ p->screen = pipe_loader_create_screen(p->dev, false);
assert(p->screen);
/* create the pipe driver context and cso context */
Index: mesa-24.0.3/src/gallium/tests/trivial/tri.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/tests/trivial/tri.c
+++ mesa-24.0.3/src/gallium/tests/trivial/tri.c
@@ -91,7 +91,7 @@ static void init_prog(struct program *p)
assert(ret);
/* init a pipe screen */
- p->screen = pipe_loader_create_screen(p->dev);
+ p->screen = pipe_loader_create_screen(p->dev, false);
assert(p->screen);
/* create the pipe driver context and cso context */
Index: mesa-24.0.3/src/gallium/frontends/rusticl/mesa/pipe/device.rs
===================================================================
--- mesa-24.0.3.orig/src/gallium/frontends/rusticl/mesa/pipe/device.rs
+++ mesa-24.0.3/src/gallium/frontends/rusticl/mesa/pipe/device.rs
@@ -20,7 +20,7 @@ impl PipeLoaderDevice {
}
fn load_screen(self) -> Option<PipeScreen> {
- let s = unsafe { pipe_loader_create_screen(self.ldev) };
+ let s = unsafe { pipe_loader_create_screen(self.ldev, false) };
PipeScreen::new(self, s)
}

View File

@ -1,4 +1,4 @@
From 481a319ad2df61fed7e2728d70eb9b945894303e Mon Sep 17 00:00:00 2001
From 940d9bce8ec9a1acc5065bce9d3e4c369546319b Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 12 Mar 2024 10:22:24 -0400
Subject: [PATCH 9/9] zink: don't print error messages when failing an implicit
@ -11,11 +11,11 @@ Subject: [PATCH 9/9] zink: don't print error messages when failing an implicit
src/gallium/drivers/zink/zink_types.h | 1 +
4 files changed, 66 insertions(+), 32 deletions(-)
diff --git a/src/gallium/drivers/zink/zink_device_info.py b/src/gallium/drivers/zink/zink_device_info.py
index 17222001180d5..b0bc38218922c 100644
--- a/src/gallium/drivers/zink/zink_device_info.py
+++ b/src/gallium/drivers/zink/zink_device_info.py
@@ -470,14 +470,16 @@ zink_get_physical_device_info(struct zink_screen *screen)
Index: mesa-24.0.3/src/gallium/drivers/zink/zink_device_info.py
===================================================================
--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_device_info.py
+++ mesa-24.0.3/src/gallium/drivers/zink/zink_device_info.py
@@ -463,14 +463,16 @@ zink_get_physical_device_info(struct zin
// enumerate device supported extensions
VkResult result = screen->vk.EnumerateDeviceExtensionProperties(screen->pdev, NULL, &num_extensions, NULL);
if (result != VK_SUCCESS) {
@ -34,11 +34,11 @@ index 17222001180d5..b0bc38218922c 100644
}
for (uint32_t i = 0; i < num_extensions; ++i) {
diff --git a/src/gallium/drivers/zink/zink_instance.py b/src/gallium/drivers/zink/zink_instance.py
index 0fbd14e5a5826..fec0844593b78 100644
--- a/src/gallium/drivers/zink/zink_instance.py
+++ b/src/gallium/drivers/zink/zink_instance.py
@@ -156,12 +156,14 @@ zink_create_instance(struct zink_screen *screen, bool display_dev)
Index: mesa-24.0.3/src/gallium/drivers/zink/zink_instance.py
===================================================================
--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_instance.py
+++ mesa-24.0.3/src/gallium/drivers/zink/zink_instance.py
@@ -156,12 +156,14 @@ zink_create_instance(struct zink_screen
// Build up the extensions from the reported ones but only for the unnamed layer
uint32_t extension_count = 0;
if (vk_EnumerateInstanceExtensionProperties(NULL, &extension_count, NULL) != VK_SUCCESS) {
@ -55,7 +55,7 @@ index 0fbd14e5a5826..fec0844593b78 100644
} else {
for (uint32_t i = 0; i < extension_count; i++) {
%for ext in extensions:
@@ -179,12 +181,14 @@ zink_create_instance(struct zink_screen *screen, bool display_dev)
@@ -179,12 +181,14 @@ zink_create_instance(struct zink_screen
uint32_t layer_count = 0;
if (vk_EnumerateInstanceLayerProperties(&layer_count, NULL) != VK_SUCCESS) {
@ -72,7 +72,7 @@ index 0fbd14e5a5826..fec0844593b78 100644
} else {
for (uint32_t i = 0; i < layer_count; i++) {
%for layer in layers:
@@ -256,7 +260,8 @@ zink_create_instance(struct zink_screen *screen, bool display_dev)
@@ -256,7 +260,8 @@ zink_create_instance(struct zink_screen
VkResult err = vk_CreateInstance(&ici, NULL, &screen->instance);
if (err != VK_SUCCESS) {
@ -82,11 +82,11 @@ index 0fbd14e5a5826..fec0844593b78 100644
return false;
}
diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 9d4952eb4ef1b..39194c7a89bf2 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -1695,7 +1695,8 @@ choose_pdev(struct zink_screen *screen, int64_t dev_major, int64_t dev_minor)
Index: mesa-24.0.3/src/gallium/drivers/zink/zink_screen.c
===================================================================
--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_screen.c
+++ mesa-24.0.3/src/gallium/drivers/zink/zink_screen.c
@@ -1606,7 +1606,8 @@ choose_pdev(struct zink_screen *screen,
VkPhysicalDevice *pdevs;
VkResult result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, NULL);
if (result != VK_SUCCESS) {
@ -96,7 +96,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
return;
}
@@ -1703,7 +1704,8 @@ choose_pdev(struct zink_screen *screen, int64_t dev_major, int64_t dev_minor)
@@ -1614,7 +1615,8 @@ choose_pdev(struct zink_screen *screen,
pdevs = malloc(sizeof(*pdevs) * pdev_count);
if (!pdevs) {
@ -106,7 +106,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
return;
}
result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, pdevs);
@@ -1730,7 +1732,8 @@ choose_pdev(struct zink_screen *screen, int64_t dev_major, int64_t dev_minor)
@@ -1641,7 +1643,8 @@ choose_pdev(struct zink_screen *screen,
unsigned pdev_count = 1;
VkResult result = VKSCR(EnumeratePhysicalDevices)(screen->instance, &pdev_count, &pdev);
if (result != VK_SUCCESS && result != VK_INCOMPLETE) {
@ -116,7 +116,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
return;
}
screen->pdev = pdev;
@@ -3238,10 +3241,12 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3147,10 +3150,12 @@ zink_internal_create_screen(const struct
struct zink_screen *screen = rzalloc(NULL, struct zink_screen);
if (!screen) {
@ -130,7 +130,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
screen->drm_fd = -1;
glsl_type_singleton_init_or_ref();
@@ -3261,7 +3266,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3170,7 +3175,8 @@ zink_internal_create_screen(const struct
screen->loader_lib = util_dl_open(VK_LIBNAME);
if (!screen->loader_lib) {
@ -140,7 +140,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
@@ -3269,7 +3275,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3178,7 +3184,8 @@ zink_internal_create_screen(const struct
screen->vk_GetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)util_dl_get_proc_address(screen->loader_lib, "vkGetDeviceProcAddr");
if (!screen->vk_GetInstanceProcAddr ||
!screen->vk_GetDeviceProcAddr) {
@ -150,7 +150,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
@@ -3289,7 +3296,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3199,7 +3206,8 @@ zink_internal_create_screen(const struct
if (zink_debug & ZINK_DEBUG_VALIDATION) {
if (!screen->instance_info.have_layer_KHRONOS_validation &&
!screen->instance_info.have_layer_LUNARG_standard_validation) {
@ -160,7 +160,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
}
@@ -3304,12 +3312,15 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3214,12 +3222,15 @@ zink_internal_create_screen(const struct
zink_verify_instance_extensions(screen);
if (screen->instance_info.have_EXT_debug_utils &&
@ -179,7 +179,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
screen->is_cpu = screen->info.props.deviceType == VK_PHYSICAL_DEVICE_TYPE_CPU;
@@ -3324,7 +3335,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3234,7 +3245,8 @@ zink_internal_create_screen(const struct
VK_FORMAT_D32_SFLOAT_S8_UINT);
if (!zink_get_physical_device_info(screen)) {
@ -189,7 +189,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
@@ -3367,18 +3379,21 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3277,18 +3289,21 @@ zink_internal_create_screen(const struct
setup_renderdoc(screen);
if (screen->threaded_submit && !util_queue_init(&screen->flush_queue, "zfq", 8, 1, UTIL_QUEUE_INIT_RESIZE_IF_FULL, screen)) {
@ -214,7 +214,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
}
@@ -3497,14 +3512,16 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3404,14 +3419,16 @@ zink_internal_create_screen(const struct
if (!zink_screen_resource_init(&screen->base))
goto fail;
if (!zink_bo_init(screen)) {
@ -233,7 +233,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
if (!util_queue_init(&screen->cache_get_thread, "zcfq", 8, 4,
@@ -3520,12 +3537,14 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3426,12 +3443,14 @@ zink_internal_create_screen(const struct
screen->total_video_mem = get_video_mem(screen);
screen->clamp_video_mem = screen->total_video_mem * 0.8;
if (!os_get_total_physical_memory(&screen->total_mem)) {
@ -250,7 +250,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
@@ -3533,35 +3552,40 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3439,35 +3458,40 @@ zink_internal_create_screen(const struct
{
if (!screen->info.have_EXT_descriptor_buffer) {
if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_DB) {
@ -296,7 +296,7 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
mesa_logw("zink: bug detected: inputAttachmentDescriptorSize(%u) > %u", (unsigned)screen->info.db_props.inputAttachmentDescriptorSize, ZINK_FBFETCH_DESCRIPTOR_SIZE);
@@ -3620,12 +3644,14 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev
@@ -3526,12 +3550,14 @@ zink_internal_create_screen(const struct
zink_init_screen_pipeline_libs(screen);
if (!init_layouts(screen)) {
@ -313,11 +313,11 @@ index 9d4952eb4ef1b..39194c7a89bf2 100644
goto fail;
}
diff --git a/src/gallium/drivers/zink/zink_types.h b/src/gallium/drivers/zink/zink_types.h
index 739838d0dce14..512c5c571ba84 100644
--- a/src/gallium/drivers/zink/zink_types.h
+++ b/src/gallium/drivers/zink/zink_types.h
@@ -1413,6 +1413,7 @@ struct zink_screen {
Index: mesa-24.0.3/src/gallium/drivers/zink/zink_types.h
===================================================================
--- mesa-24.0.3.orig/src/gallium/drivers/zink/zink_types.h
+++ mesa-24.0.3/src/gallium/drivers/zink/zink_types.h
@@ -1408,6 +1408,7 @@ struct zink_screen {
bool is_cpu;
bool abort_on_hang;
bool frame_marker_emitted;
@ -325,6 +325,3 @@ index 739838d0dce14..512c5c571ba84 100644
uint64_t curr_batch; //the current batch id
uint32_t last_finished;
VkSemaphore sem;
--
GitLab

View File

@ -0,0 +1,50 @@
From 5e99f24ee7d4aa9ff5178f63a79a8a313c32e44d Mon Sep 17 00:00:00 2001
From: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Date: Tue, 19 Mar 2024 08:37:47 -0400
Subject: [PATCH] glx: silence more implicit-load zink errors
---
src/glx/drisw_glx.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
Index: mesa-24.0.3/src/glx/drisw_glx.c
===================================================================
--- mesa-24.0.3.orig/src/glx/drisw_glx.c
+++ mesa-24.0.3/src/glx/drisw_glx.c
@@ -980,7 +980,8 @@ driswCreateScreenDriver(int screen, stru
extensions,
&driver_configs, implicit, psc);
if (psc->driScreen == NULL) {
- ErrorMessageF("glx: failed to create drisw screen\n");
+ if (!pdpyp->zink || !implicit)
+ ErrorMessageF("glx: failed to create drisw screen\n");
goto handle_error;
}
@@ -1049,7 +1050,8 @@ driswCreateScreenDriver(int screen, stru
glx_screen_cleanup(&psc->base);
free(psc);
- CriticalErrorMessageF("failed to load driver: %s\n", driver);
+ if (pdpyp->zink == TRY_ZINK_YES && !implicit)
+ CriticalErrorMessageF("failed to load driver: %s\n", driver);
return NULL;
}
Index: mesa-24.0.3/src/glx/glxclient.h
===================================================================
--- mesa-24.0.3.orig/src/glx/glxclient.h
+++ mesa-24.0.3/src/glx/glxclient.h
@@ -133,6 +133,12 @@ struct __GLXDRIdrawableRec
int refcount;
};
+enum try_zink {
+ TRY_ZINK_NO,
+ TRY_ZINK_INFER,
+ TRY_ZINK_YES,
+};
+
/*
** Function to create and DRI display data and initialize the display
** dependent methods.

View File

@ -1,3 +1,80 @@
-------------------------------------------------------------------
Wed Mar 20 07:18:13 UTC 2024 - Guillaume GARDET <guillaume.gardet@opensuse.org>
- Add patch to fix boo#1221664:
* mesa-fix-llvm18.patch
-------------------------------------------------------------------
Tue Mar 19 12:59:16 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- 0010-glx-silence-more-implicit-load-zink-errors.patch
* glx: silence more implicit-load zink errors [gitlab mesa issue #10802]
-------------------------------------------------------------------
Tue Mar 19 02:20:03 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch,
0002-glx-fix-some-indentation.patch,
0003-glx-add-an-implicit-param-to-createScreen.patch,
0004-glx-pass-implicit-load-param-through-allocation.patch,
0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch,
0006-gbm-plumb-an-implicit-param-through-device-creation.patch,
0007-frontends-dri-plumb-an-implicit-param-through-screen.patch,
0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch,
0009-zink-don-t-print-error-messages-when-failing-an-impl.patch
* get rid of error message:
'MESA: error: ZINK: vkEnumeratePhysicalDevices failed
(VK_ERROR_INITIALIZATION_FAILED)'
[gitlab mesa issue #10802]
-------------------------------------------------------------------
Tue Mar 19 02:10:26 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- adjusted and re-enabled python36-buildfix1.patch
-------------------------------------------------------------------
Mon Mar 18 23:55:51 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- Update to new feature release 24.0.3
* Some interesting highlights include:
+ New PowerVR Vulkan driver for Imagination's GPU
+ NVIDIA Vulkan driver NVK has seen many improvements
+ AMD Vulkan driver RADV ray-tracing performance improvements
+ Microsoft OpenGL driver D3D12 has reached OpenGL 4.6 support
* New extensions & features (in no particular order):
+ VK_EXT_image_compression_control on RADV
+ VK_EXT_device_fault on RADV
+ OpenGL 3.3 on Asahi
+ Geometry shaders on Asahi
+ GL_ARB_texture_cube_map_array on Asahi
+ GL_ARB_clip_control on Asahi
+ GL_ARB_timer_query on Asahi
+ GL_EXT_disjoint_timer_query on Asahi
+ GL_ARB_base_instance on Asahi
+ OpenGL 4.6 (up from 4.2) on d3d12
+ VK_EXT_depth_clamp_zero_one on RADV
+ GL_ARB_shader_texture_image_samples on Asahi
+ GL_ARB_indirect_parameters on Asahi
+ GL_ARB_viewport_array on Asahi
+ GL_ARB_fragment_layer_viewport on Asahi
+ GL_ARB_cull_distance on Asahi
+ GL_ARB_transform_feedback_overflow_query on Asahi
+ VK_KHR_calibrated_timestamps on RADV
+ VK_KHR_vertex_attribute_divisor on RADV
+ VK_KHR_maintenance6 on RADV
+ VK_KHR_ray_tracing_position_fetch on RADV
+ EGL_EXT_query_reset_notification_strategy
- supersedes U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch
- adjusted n_add-Mesa-headers-again.patch, u_dep_xcb.patch
- disabled python36-buildfix1.patch
- removed disabled patch u_fix-build-on-ppc64le.patch
-------------------------------------------------------------------
Sat Mar 16 18:44:50 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>
- get rid of u_zink-dont-print-error-messages-when-failing-an-implicit.patch
completely
-------------------------------------------------------------------
Thu Mar 14 04:48:32 UTC 2024 - Stefan Dirsch <sndirsch@suse.com>

View File

@ -1,5 +1,5 @@
#
# spec file
# spec file for package Mesa
#
# Copyright (c) 2024 SUSE LLC
#
@ -42,7 +42,7 @@
%define glamor 1
%define _name_archive mesa
%define _version 23.3.6
%define _version 24.0.3
%define with_opencl 0
%define with_rusticl 0
%define with_vulkan 0
@ -123,7 +123,7 @@
%endif
Name: Mesa%{psuffix}
Version: 23.3.6
Version: 24.0.3
Release: 0
Summary: System for rendering 3-D graphics
License: MIT
@ -142,14 +142,23 @@ Patch11: u_0001-intel-genxml-Drop-from-__future__-import-annotations.patc
Patch12: u_0002-intel-genxml-Add-a-untyped-OrderedDict-fallback-for-.patch
Patch13: python36-buildfix1.patch
Patch14: python36-buildfix2.patch
Patch15: U_fix-ac-llvm-LLVM-18-remove-useless-passes.patch
# PATCH-FIX-UPSTREAM - boo#1221664
Patch15: mesa-fix-llvm18.patch
# never to be upstreamed
Patch54: n_drirc-disable-rgb10-for-chromium-on-amd.patch
Patch58: u_dep_xcb.patch
Patch100: U_fix-mpeg1_2-decode-mesa-20.2.patch
Patch200: u_fix-build-on-ppc64le.patch
Patch400: n_stop-iris-flicker.patch
Patch500: u_zink-dont-print-error-messages-when-failing-an-implicit.patch
Patch501: 0001-loader-delete-unused-param-from-pipe_loader_sw_probe.patch
Patch502: 0002-glx-fix-some-indentation.patch
Patch503: 0003-glx-add-an-implicit-param-to-createScreen.patch
Patch504: 0004-glx-pass-implicit-load-param-through-allocation.patch
Patch505: 0005-dri-plumb-a-implicit-param-through-createNewScreen-i.patch
Patch506: 0006-gbm-plumb-an-implicit-param-through-device-creation.patch
Patch507: 0007-frontends-dri-plumb-an-implicit-param-through-screen.patch
Patch508: 0008-pipe-loader-plumb-a-flag-for-implicit-driver-load-th.patch
Patch509: 0009-zink-don-t-print-error-messages-when-failing-an-impl.patch
Patch510: 0010-glx-silence-more-implicit-load-zink-errors.patch
%ifarch %{ix86} x86_64
BuildRequires: DirectX-Headers
%endif
@ -771,9 +780,17 @@ rm -rf docs/README.{VMS,WIN32,OS2}
%endif
%patch -P 58 -p1
%patch -P 100 -p1
#%patch -P 200 -p1
%patch -P 400 -p1
#%patch -P 500 -p1
%patch -P 501 -p1
%patch -P 502 -p1
%patch -P 503 -p1
%patch -P 504 -p1
%patch -P 505 -p1
%patch -P 506 -p1
%patch -P 507 -p1
%patch -P 508 -p1
%patch -P 509 -p1
%patch -P 510 -p1
# Remove requires to vulkan libs from baselibs.conf on platforms
# where vulkan build is disabled; ugly ...

View File

@ -1,58 +0,0 @@
From bc7e363f8e1a26342e6fd7241c1f0ebb722338d6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Kai=20Wasserb=C3=A4ch?= <kai@dev.carbon-project.org>
Date: Wed, 22 Nov 2023 20:21:11 +0100
Subject: [PATCH] fix: ac/llvm: LLVM 18: remove useless passes, partially
removed upstream
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Upstream removed llvm::createLoopSinkPass() in commit
<https://github.com/llvm/llvm-project/commit/b9975cec0ea0a2f10d65b7bd1197d9e1706cbd3d>
and there is no useful alternative except moving to the new pass
manager.
On top of that, the usage of this optimisation pass and
PromoteMemoryToRegisterPass were just useless, according to the
upstream developer of the commit named above. Therefore the easiest
solution is, as him, Marek and Dave suggested, to just remove these two
passes from the pipeline for now.
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10192
Reference: https://github.com/llvm/llvm-project/pull/72811
Reference: https://github.com/llvm/llvm-project/commit/b9975cec0ea0a2f10d65b7bd1197d9e1706cbd3d
Suggested-by: Dave Airlie <airlied@redhat.com>
Suggested-by: Aiden Grossman <agrossman154@yahoo.com>
Suggested-by: Marek Olšák <maraeo@gmail.com>
Signed-off-by: Kai Wasserbäch <kai@dev.carbon-project.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26336>
---
src/amd/llvm/ac_llvm_helper.cpp | 5 -----
1 file changed, 5 deletions(-)
diff --git a/src/amd/llvm/ac_llvm_helper.cpp b/src/amd/llvm/ac_llvm_helper.cpp
index 40a4399e705..5d065279ad1 100644
--- a/src/amd/llvm/ac_llvm_helper.cpp
+++ b/src/amd/llvm/ac_llvm_helper.cpp
@@ -299,17 +299,12 @@ LLVMPassManagerRef ac_create_passmgr(LLVMTargetLibraryInfoRef target_library_inf
*/
unwrap(passmgr)->add(createBarrierNoopPass());
- /* This pass eliminates all loads and stores on alloca'd pointers. */
- unwrap(passmgr)->add(createPromoteMemoryToRegisterPass());
#if LLVM_VERSION_MAJOR >= 16
unwrap(passmgr)->add(createSROAPass(true));
#else
unwrap(passmgr)->add(createSROAPass());
#endif
/* TODO: restore IPSCCP */
- if (LLVM_VERSION_MAJOR >= 16)
- unwrap(passmgr)->add(createLoopSinkPass());
- /* TODO: restore IPSCCP */
unwrap(passmgr)->add(createLICMPass());
unwrap(passmgr)->add(createCFGSimplificationPass());
/* This is recommended by the instruction combining pass. */
--
2.44.0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:cd3d6c60121dea73abbae99d399dc2facaecde1a8c6bd647e6d85410ff4b577b
size 19455492

Binary file not shown.

3
mesa-24.0.3.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:77aec9a2a37b7d3596ea1640b3cc53d0b5d9b3b52abed89de07e3717e91bfdbe
size 20021264

BIN
mesa-24.0.3.tar.xz.sig Normal file

Binary file not shown.

47
mesa-fix-llvm18.patch Normal file
View File

@ -0,0 +1,47 @@
From 99f0449987bec1f82cd42a06f40bb4a863a37792 Mon Sep 17 00:00:00 2001
From: Nikita Popov <npopov@redhat.com>
Date: Mon, 11 Mar 2024 14:45:41 +0100
Subject: [PATCH] Pass no-verify-fixpoint option to instcombine in LLVM 18
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
When LLVM 18 is used, pass the no-verify-fixpoint option when
running the instcombine pass. Otherwise LLVM may abort with an
error.
The background here is that this option is enabled by default for
testing purposes, because instcombine is normally only explicitly
invoked like this inside tests. If it is used in an actual
production pipeline, the no-verify-fixpoint option needs to be
enabled.
This should fix the issue reported at
https://bugzilla.redhat.com/show_bug.cgi?id=2268800.
Reviewed-by: Konstantin Seurer <konstantin.seurer@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28101>
---
src/gallium/auxiliary/gallivm/lp_bld_init.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_init.c b/src/gallium/auxiliary/gallivm/lp_bld_init.c
index cd2108f3a088d..1345d85b22439 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_init.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_init.c
@@ -609,7 +609,11 @@ gallivm_compile_module(struct gallivm_state *gallivm)
LLVMRunPasses(gallivm->module, passes, LLVMGetExecutionEngineTargetMachine(gallivm->engine), opts);
if (!(gallivm_perf & GALLIVM_PERF_NO_OPT))
+#if LLVM_VERSION_MAJOR >= 18
+ strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine<no-verify-fixpoint>");
+#else
strcpy(passes, "sroa,early-cse,simplifycfg,reassociate,mem2reg,instsimplify,instcombine");
+#endif
else
strcpy(passes, "mem2reg");
--
GitLab

View File

@ -1,15 +1,20 @@
Index: mesa-23.3.0/include/meson.build
Index: mesa-24.0.3/include/meson.build
===================================================================
--- mesa-23.3.0.orig/include/meson.build
+++ mesa-23.3.0/include/meson.build
@@ -28,10 +28,8 @@ if with_android_stub
--- mesa-24.0.3.orig/include/meson.build
+++ mesa-24.0.3/include/meson.build
@@ -28,7 +28,6 @@ if with_android_stub
inc_include += [include_directories('android_stub')]
endif
-if not with_glvnd
-if not with_glvnd and host_machine.system() != 'windows'
if with_gles1 or with_gles2 or with_opengl or with_egl
install_headers('KHR/khrplatform.h', subdir : 'KHR')
- endif
endif
@@ -84,7 +83,6 @@ if not with_glvnd and host_machine.syste
subdir : 'EGL',
)
endif
-endif
if with_gles1
install_headers(
# Non-upstream headers
if with_egl

View File

@ -1,5 +1,5 @@
--- mesa-23.3.3/src/nouveau/nvidia-headers/class_parser.py.orig 2024-01-20 12:47:36.464476669 +0100
+++ mesa-23.3.3/src/nouveau/nvidia-headers/class_parser.py 2024-01-20 13:04:30.212851443 +0100
--- mesa-23.3.3/src/nouveau/headers/class_parser.py.orig 2024-01-20 12:47:36.464476669 +0100
+++ mesa-23.3.3/src/nouveau/headers/class_parser.py 2024-01-20 13:04:30.212851443 +0100
@@ -9,6 +9,16 @@
from mako.template import Template

View File

@ -1,8 +1,8 @@
Index: mesa-23.3.0/meson.build
Index: mesa-24.0.3/meson.build
===================================================================
--- mesa-23.3.0.orig/meson.build
+++ mesa-23.3.0/meson.build
@@ -2022,9 +2022,11 @@ if with_platform_x11
--- mesa-24.0.3.orig/meson.build
+++ mesa-24.0.3/meson.build
@@ -2069,9 +2069,11 @@ if with_platform_x11
endif
endif
if with_any_vk or with_egl or (with_glx == 'dri' and with_dri_platform == 'drm')
@ -14,15 +14,3 @@ Index: mesa-23.3.0/meson.build
dep_xcb_dri3 = dependency('xcb-dri3')
dep_xcb_present = dependency('xcb-present')
# until xcb-dri3 has been around long enough to make a hard-dependency:
Index: mesa-23.3.0/src/loader/meson.build
===================================================================
--- mesa-23.3.0.orig/src/loader/meson.build
+++ mesa-23.3.0/src/loader/meson.build
@@ -47,6 +47,6 @@ libloader = static_library(
c_args : loader_c_args,
gnu_symbol_visibility : 'hidden',
include_directories : [inc_include, inc_src, inc_util],
- dependencies : [dep_libdrm, dep_thread, dep_xcb_xrandr],
+ dependencies : [dep_libdrm, dep_thread, dep_xcb_xrandr, dep_xcb],
build_by_default : false,
)

View File

@ -1,42 +0,0 @@
Index: mesa-23.0.0/include/CL/cl_platform.h
===================================================================
--- mesa-23.0.0.orig/include/CL/cl_platform.h
+++ mesa-23.0.0/include/CL/cl_platform.h
@@ -385,7 +385,9 @@ typedef unsigned int cl_GLenum;
/* Define basic vector types */
#if defined( __VEC__ )
#if !defined(__clang__)
+ #ifndef __cplusplus
#include <altivec.h> /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */
+ #endif
#endif
typedef __vector unsigned char __cl_uchar16;
typedef __vector signed char __cl_char16;
Index: mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_rast_tri.c
===================================================================
--- mesa-23.0.0.orig/src/gallium/drivers/llvmpipe/lp_rast_tri.c
+++ mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_rast_tri.c
@@ -488,7 +488,9 @@ lp_rast_triangle_32_3_4(struct lp_raster
#if defined(_ARCH_PWR8) && UTIL_ARCH_LITTLE_ENDIAN
+#ifndef __cplusplus
#include <altivec.h>
+#endif
#include "util/u_pwr8.h"
static inline void
Index: mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_setup_tri.c
===================================================================
--- mesa-23.0.0.orig/src/gallium/drivers/llvmpipe/lp_setup_tri.c
+++ mesa-23.0.0/src/gallium/drivers/llvmpipe/lp_setup_tri.c
@@ -46,7 +46,9 @@
#if DETECT_ARCH_SSE
#include <emmintrin.h>
#elif defined(_ARCH_PWR8) && UTIL_ARCH_LITTLE_ENDIAN
+#ifndef __cplusplus
#include <altivec.h>
+#endif
#include "util/u_pwr8.h"
#endif