import egl-wayland-1.1.9-1.el9
This commit is contained in:
commit
a10d4b52c5
1
.egl-wayland.metadata
Normal file
1
.egl-wayland.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
69912f237f1de25f530cbdcdb57164f265bdaa4b SOURCES/egl-wayland-1.1.9.tar.gz
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
SOURCES/egl-wayland-1.1.9.tar.gz
|
6
SOURCES/10_nvidia_wayland.json
Normal file
6
SOURCES/10_nvidia_wayland.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"file_format_version" : "1.0.0",
|
||||||
|
"ICD" : {
|
||||||
|
"library_path" : "libnvidia-egl-wayland.so.1"
|
||||||
|
}
|
||||||
|
}
|
6
SOURCES/15_nvidia_gbm.json
Normal file
6
SOURCES/15_nvidia_gbm.json
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"file_format_version" : "1.0.0",
|
||||||
|
"ICD" : {
|
||||||
|
"library_path" : "libnvidia-egl-gbm.so.1"
|
||||||
|
}
|
||||||
|
}
|
180
SOURCES/582b2d345abaa0e313cf16c902e602084ea59551.patch
Normal file
180
SOURCES/582b2d345abaa0e313cf16c902e602084ea59551.patch
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
From 582b2d345abaa0e313cf16c902e602084ea59551 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Erik Kurzinger <ekurzinger@nvidia.com>
|
||||||
|
Date: Tue, 23 Nov 2021 14:15:14 -0500
|
||||||
|
Subject: [PATCH] egl-wayland: retrieve DRM device name before acquiring API
|
||||||
|
lock
|
||||||
|
|
||||||
|
wlEglBindDisplaysHook acquires the external API lock before calling
|
||||||
|
wl_eglstream_display_bind, which in turn calls wl_drm_display_bind. That
|
||||||
|
function calls back into EGL to query the DRM device associated with the
|
||||||
|
given EGLDisplay.
|
||||||
|
|
||||||
|
Normally this is not a problem since the EGLDisplay passed to
|
||||||
|
eglBindWaylandDisplayWL will be an internal EGL_PLATFORM_DEVICE handle.
|
||||||
|
However, some applications, notably anything WebKit-based, will instead
|
||||||
|
pass in an external EGL_PLATFORM_WAYLAND handle. This means that the
|
||||||
|
eglQueryDisplayAttrib call by wl_drm_display_bind will require EGL to
|
||||||
|
call back into the egl-wayland library to look up the internal handle.
|
||||||
|
This is done by wlEglGetInternalHandleExport, which will attempt to
|
||||||
|
acquire the external API lock a second time, which will fail.
|
||||||
|
|
||||||
|
To avoid this, add a new function to wayland-drm.c which will retrieve
|
||||||
|
the DRM device name for the given EGLDisplay. wlEglBindDisplaysHook will
|
||||||
|
call this *before* acquiring the external API lock, and then pass it to
|
||||||
|
wl_drm_display_bind via wl_eglstream_display_bind so it can be saved in
|
||||||
|
the wl_eglstream_display struct.
|
||||||
|
---
|
||||||
|
include/wayland-drm.h | 7 ++++++-
|
||||||
|
include/wayland-eglstream-server.h | 3 ++-
|
||||||
|
src/wayland-drm.c | 33 +++++++++++++++---------------
|
||||||
|
src/wayland-egldisplay.c | 8 +++++---
|
||||||
|
src/wayland-eglstream-server.c | 5 +++--
|
||||||
|
5 files changed, 32 insertions(+), 24 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/include/wayland-drm.h b/include/wayland-drm.h
|
||||||
|
index be363c6..84d0f11 100644
|
||||||
|
--- a/include/wayland-drm.h
|
||||||
|
+++ b/include/wayland-drm.h
|
||||||
|
@@ -23,9 +23,14 @@
|
||||||
|
#ifndef WAYLAND_DRM_H
|
||||||
|
#define WAYLAND_DRM_H
|
||||||
|
|
||||||
|
+extern const char *
|
||||||
|
+wl_drm_get_dev_name(const WlEglPlatformData *data,
|
||||||
|
+ EGLDisplay dpy);
|
||||||
|
+
|
||||||
|
extern EGLBoolean
|
||||||
|
wl_drm_display_bind(struct wl_display *display,
|
||||||
|
- struct wl_eglstream_display *wlStreamDpy);
|
||||||
|
+ struct wl_eglstream_display *wlStreamDpy,
|
||||||
|
+ const char *dev_name);
|
||||||
|
extern void
|
||||||
|
wl_drm_display_unbind(struct wl_eglstream_display *wlStreamDpy);
|
||||||
|
|
||||||
|
diff --git a/include/wayland-eglstream-server.h b/include/wayland-eglstream-server.h
|
||||||
|
index 76e772c..0f7d477 100644
|
||||||
|
--- a/include/wayland-eglstream-server.h
|
||||||
|
+++ b/include/wayland-eglstream-server.h
|
||||||
|
@@ -49,7 +49,8 @@ EGLBoolean
|
||||||
|
wl_eglstream_display_bind(WlEglPlatformData *data,
|
||||||
|
struct wl_display *wlDisplay,
|
||||||
|
EGLDisplay eglDisplay,
|
||||||
|
- const char *exts);
|
||||||
|
+ const char *exts,
|
||||||
|
+ const char *dev_name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* wl_eglstream_display_unbind()
|
||||||
|
diff --git a/src/wayland-drm.c b/src/wayland-drm.c
|
||||||
|
index aa6de23..a08d82f 100644
|
||||||
|
--- a/src/wayland-drm.c
|
||||||
|
+++ b/src/wayland-drm.c
|
||||||
|
@@ -152,37 +152,36 @@ bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
|
||||||
|
wl_resource_post_event(resource, WL_DRM_CAPABILITIES, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
-EGLBoolean
|
||||||
|
-wl_drm_display_bind(struct wl_display *display,
|
||||||
|
- struct wl_eglstream_display *wlStreamDpy)
|
||||||
|
+const char *
|
||||||
|
+wl_drm_get_dev_name(const WlEglPlatformData *data,
|
||||||
|
+ EGLDisplay dpy)
|
||||||
|
{
|
||||||
|
- EGLDisplay dpy = wlStreamDpy->eglDisplay;
|
||||||
|
EGLDeviceEXT egl_dev;
|
||||||
|
const char *dev_exts;
|
||||||
|
- const char *dev_name;
|
||||||
|
|
||||||
|
- if (!wlStreamDpy->data->egl.queryDisplayAttrib(dpy,
|
||||||
|
- EGL_DEVICE_EXT,
|
||||||
|
- (EGLAttribKHR*)&egl_dev)) {
|
||||||
|
- return EGL_FALSE;
|
||||||
|
+ if (!data->egl.queryDisplayAttrib(dpy, EGL_DEVICE_EXT,
|
||||||
|
+ (EGLAttribKHR*)&egl_dev)) {
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
-
|
||||||
|
- dev_exts = wlStreamDpy->data->egl.queryDeviceString(egl_dev,
|
||||||
|
- EGL_EXTENSIONS);
|
||||||
|
+ dev_exts = data->egl.queryDeviceString(egl_dev, EGL_EXTENSIONS);
|
||||||
|
|
||||||
|
if (!dev_exts) {
|
||||||
|
- return EGL_FALSE;
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!wlEglFindExtension("EGL_EXT_device_drm_render_node", dev_exts)) {
|
||||||
|
- return EGL_FALSE;
|
||||||
|
+ return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- dev_name =
|
||||||
|
- wlStreamDpy->data->egl.queryDeviceString(egl_dev,
|
||||||
|
- EGL_DRM_RENDER_NODE_FILE_EXT);
|
||||||
|
+ return data->egl.queryDeviceString(egl_dev, EGL_DRM_RENDER_NODE_FILE_EXT);
|
||||||
|
+}
|
||||||
|
|
||||||
|
+EGLBoolean
|
||||||
|
+wl_drm_display_bind(struct wl_display *display,
|
||||||
|
+ struct wl_eglstream_display *wlStreamDpy,
|
||||||
|
+ const char *dev_name)
|
||||||
|
+{
|
||||||
|
if (!dev_name) {
|
||||||
|
return EGL_FALSE;
|
||||||
|
}
|
||||||
|
diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c
|
||||||
|
index 8b7394a..d285bf7 100644
|
||||||
|
--- a/src/wayland-egldisplay.c
|
||||||
|
+++ b/src/wayland-egldisplay.c
|
||||||
|
@@ -30,6 +30,7 @@
|
||||||
|
#include "wayland-eglhandle.h"
|
||||||
|
#include "wayland-eglutils.h"
|
||||||
|
#include "wayland-drm-client-protocol.h"
|
||||||
|
+#include "wayland-drm.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
@@ -70,15 +71,16 @@ EGLBoolean wlEglIsValidNativeDisplayExport(void *data, void *nativeDpy)
|
||||||
|
|
||||||
|
EGLBoolean wlEglBindDisplaysHook(void *data, EGLDisplay dpy, void *nativeDpy)
|
||||||
|
{
|
||||||
|
- /* Retrieve extension string before taking external API lock */
|
||||||
|
- const char *exts = ((WlEglPlatformData *)data)->egl.queryString(dpy, EGL_EXTENSIONS);
|
||||||
|
+ /* Retrieve extension string and device name before taking external API lock */
|
||||||
|
+ const char *exts = ((WlEglPlatformData *)data)->egl.queryString(dpy, EGL_EXTENSIONS),
|
||||||
|
+ *dev_name = wl_drm_get_dev_name(data, dpy);
|
||||||
|
EGLBoolean res = EGL_FALSE;
|
||||||
|
|
||||||
|
wlExternalApiLock();
|
||||||
|
|
||||||
|
res = wl_eglstream_display_bind((WlEglPlatformData *)data,
|
||||||
|
(struct wl_display *)nativeDpy,
|
||||||
|
- dpy, exts);
|
||||||
|
+ dpy, exts, dev_name);
|
||||||
|
|
||||||
|
wlExternalApiUnlock();
|
||||||
|
|
||||||
|
diff --git a/src/wayland-eglstream-server.c b/src/wayland-eglstream-server.c
|
||||||
|
index b1baa08..1dfd7ce 100644
|
||||||
|
--- a/src/wayland-eglstream-server.c
|
||||||
|
+++ b/src/wayland-eglstream-server.c
|
||||||
|
@@ -289,7 +289,8 @@ EGLBoolean
|
||||||
|
wl_eglstream_display_bind(WlEglPlatformData *data,
|
||||||
|
struct wl_display *wlDisplay,
|
||||||
|
EGLDisplay eglDisplay,
|
||||||
|
- const char *exts)
|
||||||
|
+ const char *exts,
|
||||||
|
+ const char *dev_name)
|
||||||
|
{
|
||||||
|
struct wl_eglstream_display *wlStreamDpy = NULL;
|
||||||
|
char *env = NULL;
|
||||||
|
@@ -355,7 +356,7 @@ wl_eglstream_display_bind(WlEglPlatformData *data,
|
||||||
|
wl_eglstream_display_global_bind);
|
||||||
|
|
||||||
|
/* Failure is not fatal */
|
||||||
|
- wl_drm_display_bind(wlDisplay, wlStreamDpy);
|
||||||
|
+ wl_drm_display_bind(wlDisplay, wlStreamDpy, dev_name);
|
||||||
|
|
||||||
|
wl_list_insert(&wlStreamDpyList, &wlStreamDpy->link);
|
||||||
|
|
268
SOURCES/d4937adc5cd04ac7df98fc5616e40319fb52fdee.patch
Normal file
268
SOURCES/d4937adc5cd04ac7df98fc5616e40319fb52fdee.patch
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
From d4937adc5cd04ac7df98fc5616e40319fb52fdee Mon Sep 17 00:00:00 2001
|
||||||
|
From: Austin Shafer <ashafer@nvidia.com>
|
||||||
|
Date: Wed, 27 Oct 2021 06:37:07 -0400
|
||||||
|
Subject: [PATCH] wayland: Fail eglGetDisplay if wl_drm is not available
|
||||||
|
|
||||||
|
This patch does two things:
|
||||||
|
- checks if wl_drm is in use on the server, and uses it to get the name
|
||||||
|
of the drm device the compositor is driving.
|
||||||
|
- Find an EGLDevice that matches the path returned by wl_drm.
|
||||||
|
|
||||||
|
If wl_drm and the needed extensions are not present, or if a matching
|
||||||
|
EGLDevice is not found, then we fail. Right now we only support
|
||||||
|
running on the same GPU as the compositor, so any of these being
|
||||||
|
missing means that is not the case.
|
||||||
|
---
|
||||||
|
src/wayland-egldisplay.c | 153 +++++++++++++++++++++++++++++++++++----
|
||||||
|
1 file changed, 138 insertions(+), 15 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/wayland-egldisplay.c b/src/wayland-egldisplay.c
|
||||||
|
index a0370a5..8b7394a 100644
|
||||||
|
--- a/src/wayland-egldisplay.c
|
||||||
|
+++ b/src/wayland-egldisplay.c
|
||||||
|
@@ -29,13 +29,19 @@
|
||||||
|
#include "wayland-eglsurface.h"
|
||||||
|
#include "wayland-eglhandle.h"
|
||||||
|
#include "wayland-eglutils.h"
|
||||||
|
+#include "wayland-drm-client-protocol.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <assert.h>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+#include <fcntl.h>
|
||||||
|
|
||||||
|
typedef struct WlServerProtocolsRec {
|
||||||
|
EGLBoolean hasEglStream;
|
||||||
|
EGLBoolean hasDmaBuf;
|
||||||
|
+ EGLBoolean hasDrm;
|
||||||
|
+ struct wl_drm *wldrm;
|
||||||
|
+ char *drm_name;
|
||||||
|
} WlServerProtocols;
|
||||||
|
|
||||||
|
/* TODO: Make global display lists hang off platform data */
|
||||||
|
@@ -241,6 +247,40 @@ static const struct wl_registry_listener registry_listener = {
|
||||||
|
registry_handle_global_remove
|
||||||
|
};
|
||||||
|
|
||||||
|
+static void wl_drm_device(void *data, struct wl_drm *wl_drm, const char *name)
|
||||||
|
+{
|
||||||
|
+ WlServerProtocols *protocols = (WlServerProtocols *)data;
|
||||||
|
+ (void) wl_drm;
|
||||||
|
+
|
||||||
|
+ protocols->drm_name = strdup(name);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void wl_drm_authenticated(void *data, struct wl_drm *wl_drm)
|
||||||
|
+{
|
||||||
|
+ (void) data;
|
||||||
|
+ (void) wl_drm;
|
||||||
|
+}
|
||||||
|
+static void wl_drm_format(void *data, struct wl_drm *wl_drm, uint32_t format)
|
||||||
|
+{
|
||||||
|
+ (void) data;
|
||||||
|
+ (void) wl_drm;
|
||||||
|
+ (void) format;
|
||||||
|
+}
|
||||||
|
+static void wl_drm_capabilities(void *data, struct wl_drm *wl_drm, uint32_t value)
|
||||||
|
+{
|
||||||
|
+ (void) data;
|
||||||
|
+ (void) wl_drm;
|
||||||
|
+ (void) value;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static const struct wl_drm_listener drmListener = {
|
||||||
|
+ .device = wl_drm_device,
|
||||||
|
+ .authenticated = wl_drm_authenticated,
|
||||||
|
+ .format = wl_drm_format,
|
||||||
|
+ .capabilities = wl_drm_capabilities,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
registry_handle_global_check_protocols(
|
||||||
|
void *data,
|
||||||
|
@@ -262,6 +302,12 @@ registry_handle_global_check_protocols(
|
||||||
|
(version >= 3)) {
|
||||||
|
protocols->hasDmaBuf = EGL_TRUE;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if ((strcmp(interface, "wl_drm") == 0) && (version >= 2)) {
|
||||||
|
+ protocols->hasDrm = EGL_TRUE;
|
||||||
|
+ protocols->wldrm = wl_registry_bind(registry, name, &wl_drm_interface, 2);
|
||||||
|
+ wl_drm_add_listener(protocols->wldrm, &drmListener, protocols);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
@@ -389,8 +435,8 @@ EGLBoolean wlEglTerminateHook(EGLDisplay dpy)
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void checkServerProtocols(struct wl_display *nativeDpy,
|
||||||
|
- WlServerProtocols *protocols)
|
||||||
|
+static void getServerProtocolsInfo(struct wl_display *nativeDpy,
|
||||||
|
+ WlServerProtocols *protocols)
|
||||||
|
{
|
||||||
|
struct wl_display *wrapper = NULL;
|
||||||
|
struct wl_registry *wlRegistry = NULL;
|
||||||
|
@@ -418,6 +464,11 @@ static void checkServerProtocols(struct wl_display *nativeDpy,
|
||||||
|
protocols);
|
||||||
|
if (ret == 0) {
|
||||||
|
wl_display_roundtrip_queue(nativeDpy, queue);
|
||||||
|
+ if (protocols->hasDrm) {
|
||||||
|
+ wl_display_roundtrip_queue(nativeDpy, queue);
|
||||||
|
+ /* destroy our wl_drm object */
|
||||||
|
+ wl_drm_destroy(protocols->wldrm);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (queue) {
|
||||||
|
@@ -438,9 +489,13 @@ EGLDisplay wlEglGetPlatformDisplayExport(void *data,
|
||||||
|
WlServerProtocols protocols;
|
||||||
|
EGLint numDevices = 0;
|
||||||
|
int i = 0;
|
||||||
|
+ EGLDeviceEXT *eglDeviceList = NULL;
|
||||||
|
EGLDeviceEXT eglDevice = NULL;
|
||||||
|
+ EGLDeviceEXT tmpDev = NULL;
|
||||||
|
EGLint err = EGL_SUCCESS;
|
||||||
|
EGLBoolean useInitRefCount = EGL_FALSE;
|
||||||
|
+ const char *dev_exts;
|
||||||
|
+ const char *dev_name;
|
||||||
|
|
||||||
|
if (platform != EGL_PLATFORM_WAYLAND_EXT) {
|
||||||
|
wlEglSetError(data, EGL_BAD_PARAMETER);
|
||||||
|
@@ -480,7 +535,6 @@ EGLDisplay wlEglGetPlatformDisplayExport(void *data,
|
||||||
|
|
||||||
|
display = calloc(1, sizeof(*display));
|
||||||
|
if (!display) {
|
||||||
|
- wlExternalApiUnlock();
|
||||||
|
err = EGL_BAD_ALLOC;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
@@ -498,7 +552,6 @@ EGLDisplay wlEglGetPlatformDisplayExport(void *data,
|
||||||
|
if (!display->nativeDpy) {
|
||||||
|
display->nativeDpy = wl_display_connect(NULL);
|
||||||
|
if (!display->nativeDpy) {
|
||||||
|
- wlExternalApiUnlock();
|
||||||
|
err = EGL_BAD_ALLOC;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
@@ -508,26 +561,85 @@ EGLDisplay wlEglGetPlatformDisplayExport(void *data,
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(&protocols, 0, sizeof(protocols));
|
||||||
|
- checkServerProtocols(display->nativeDpy, &protocols);
|
||||||
|
+ /*
|
||||||
|
+ * This is where we check the supported protocols on the compositor,
|
||||||
|
+ * and bind to wl_drm to get the device name.
|
||||||
|
+ * protocols.drm_name will be allocated here if using wl_drm
|
||||||
|
+ */
|
||||||
|
+ getServerProtocolsInfo(display->nativeDpy, &protocols);
|
||||||
|
|
||||||
|
- if (!protocols.hasEglStream && !protocols.hasDmaBuf) {
|
||||||
|
- wlExternalApiUnlock();
|
||||||
|
- goto fail;
|
||||||
|
+ if (!protocols.hasDrm || (!protocols.hasEglStream && !protocols.hasDmaBuf)) {
|
||||||
|
+ goto fail_cleanup_protocols;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!pData->egl.queryDevices(1, &eglDevice, &numDevices) || numDevices == 0) {
|
||||||
|
- wlExternalApiUnlock();
|
||||||
|
- goto fail;
|
||||||
|
+ /* Get the number of devices available */
|
||||||
|
+ if (!pData->egl.queryDevices(-1, NULL, &numDevices) || numDevices == 0) {
|
||||||
|
+ goto fail_cleanup_protocols;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ eglDeviceList = calloc(numDevices, sizeof(*eglDeviceList));
|
||||||
|
+ if (!eglDeviceList) {
|
||||||
|
+ goto fail_cleanup_protocols;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Now we need to find an EGLDevice. If wl_drm is in use we will try to find one that
|
||||||
|
+ * matches the device the compositor is using. We know that device is an nvidia device
|
||||||
|
+ * since we just checked that above.
|
||||||
|
+ */
|
||||||
|
+ if (!pData->egl.queryDevices(numDevices, eglDeviceList, &numDevices) || numDevices == 0) {
|
||||||
|
+ goto fail_cleanup_devices;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (protocols.drm_name) {
|
||||||
|
+ for (int i = 0; i < numDevices; i++) {
|
||||||
|
+ tmpDev = eglDeviceList[i];
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * To check against the wl_drm name, we need to check if we can use
|
||||||
|
+ * the drm extension
|
||||||
|
+ */
|
||||||
|
+ dev_exts = display->data->egl.queryDeviceString(tmpDev,
|
||||||
|
+ EGL_EXTENSIONS);
|
||||||
|
+ if (dev_exts) {
|
||||||
|
+ if (wlEglFindExtension("EGL_EXT_device_drm_render_node", dev_exts)) {
|
||||||
|
+ dev_name =
|
||||||
|
+ display->data->egl.queryDeviceString(tmpDev,
|
||||||
|
+ EGL_DRM_RENDER_NODE_FILE_EXT);
|
||||||
|
+
|
||||||
|
+ if (dev_name) {
|
||||||
|
+ /*
|
||||||
|
+ * At this point we have gotten the name from wl_drm, gotten
|
||||||
|
+ * the drm node from the EGLDevice. If they match, then
|
||||||
|
+ * this is the final device to use, since it is the compositor's
|
||||||
|
+ * device.
|
||||||
|
+ */
|
||||||
|
+ if (strcmp(dev_name, protocols.drm_name) == 0) {
|
||||||
|
+ eglDevice = eglDeviceList[0];
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Right now we are pretty much limited to running on the same GPU as the
|
||||||
|
+ * compositor. If we couldn't find an EGLDevice that has EGL_EXT_device_drm_render_node
|
||||||
|
+ * and the same DRM device path, then fail.
|
||||||
|
+ */
|
||||||
|
+ if (!eglDevice) {
|
||||||
|
+ goto fail_cleanup_devices;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
display->devDpy = wlGetInternalDisplay(pData, eglDevice);
|
||||||
|
if (display->devDpy == NULL) {
|
||||||
|
- wlExternalApiUnlock();
|
||||||
|
- goto fail;
|
||||||
|
+ goto fail_cleanup_devices;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!wlEglInitializeMutex(&display->mutex)) {
|
||||||
|
- wlExternalApiUnlock();
|
||||||
|
- goto fail;
|
||||||
|
+ goto fail_cleanup_devices;
|
||||||
|
}
|
||||||
|
display->refCount = 1;
|
||||||
|
WL_LIST_INIT(&display->wlEglSurfaceList);
|
||||||
|
@@ -537,10 +649,21 @@ EGLDisplay wlEglGetPlatformDisplayExport(void *data,
|
||||||
|
// in wlEglDisplayList.
|
||||||
|
wl_list_insert(&wlEglDisplayList, &display->link);
|
||||||
|
|
||||||
|
+ free(eglDeviceList);
|
||||||
|
+ if (protocols.drm_name) {
|
||||||
|
+ free(protocols.drm_name);
|
||||||
|
+ }
|
||||||
|
wlExternalApiUnlock();
|
||||||
|
return display;
|
||||||
|
|
||||||
|
+fail_cleanup_devices:
|
||||||
|
+ free(eglDeviceList);
|
||||||
|
+fail_cleanup_protocols:
|
||||||
|
+ if (protocols.drm_name) {
|
||||||
|
+ free(protocols.drm_name);
|
||||||
|
+ }
|
||||||
|
fail:
|
||||||
|
+ wlExternalApiUnlock();
|
||||||
|
|
||||||
|
if (display->ownNativeDpy) {
|
||||||
|
wl_display_disconnect(display->nativeDpy);
|
51
SOURCES/daab8546eca8428543a4d958a2c53fc747f70672.patch
Normal file
51
SOURCES/daab8546eca8428543a4d958a2c53fc747f70672.patch
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
From daab8546eca8428543a4d958a2c53fc747f70672 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oleksandr Kulkov <adamant-pwn@users.noreply.github.com>
|
||||||
|
Date: Fri, 29 Oct 2021 01:13:04 +0200
|
||||||
|
Subject: [PATCH] generate wayland-drm-client-protocol.h
|
||||||
|
|
||||||
|
---
|
||||||
|
Makefile.am | 3 ++-
|
||||||
|
src/meson.build | 1 +
|
||||||
|
wayland-drm/meson.build | 6 ++++--
|
||||||
|
3 files changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Makefile.am b/Makefile.am
|
||||||
|
index 8129539..9463349 100644
|
||||||
|
--- a/Makefile.am
|
||||||
|
+++ b/Makefile.am
|
||||||
|
@@ -49,7 +49,8 @@ libnvidia_egl_wayland_la_built_private_protocols = \
|
||||||
|
|
||||||
|
libnvidia_egl_wayland_la_built_client_headers = \
|
||||||
|
wayland-eglstream/wayland-eglstream-client-protocol.h \
|
||||||
|
- wayland-eglstream/wayland-eglstream-controller-client-protocol.h
|
||||||
|
+ wayland-eglstream/wayland-eglstream-controller-client-protocol.h \
|
||||||
|
+ wayland-drm/wayland-drm-client-protocol.h
|
||||||
|
|
||||||
|
libnvidia_egl_wayland_la_built_server_headers = \
|
||||||
|
wayland-eglstream/wayland-eglstream-server-protocol.h \
|
||||||
|
diff --git a/src/meson.build b/src/meson.build
|
||||||
|
index a489fa3..6f69e09 100644
|
||||||
|
--- a/src/meson.build
|
||||||
|
+++ b/src/meson.build
|
||||||
|
@@ -47,6 +47,7 @@ src = [
|
||||||
|
wayland_eglstream_controller_protocol_c,
|
||||||
|
wayland_eglstream_controller_client_protocol_h,
|
||||||
|
wayland_drm_protocol_c,
|
||||||
|
+ wayland_drm_client_protocol_h,
|
||||||
|
wayland_drm_server_protocol_h,
|
||||||
|
]
|
||||||
|
|
||||||
|
diff --git a/wayland-drm/meson.build b/wayland-drm/meson.build
|
||||||
|
index b3b3bcb..2a29afe 100644
|
||||||
|
--- a/wayland-drm/meson.build
|
||||||
|
+++ b/wayland-drm/meson.build
|
||||||
|
@@ -1,5 +1,7 @@
|
||||||
|
-foreach output_type: ['server-header', 'public-code']
|
||||||
|
- if output_type == 'server-header'
|
||||||
|
+foreach output_type: ['client-header', 'server-header', 'public-code']
|
||||||
|
+ if output_type == 'client-header'
|
||||||
|
+ output_file = 'wayland-drm-client-protocol.h'
|
||||||
|
+ elif output_type == 'server-header'
|
||||||
|
output_file = 'wayland-drm-server-protocol.h'
|
||||||
|
else
|
||||||
|
output_file = 'wayland-drm-protocol.c'
|
205
SPECS/egl-wayland.spec
Normal file
205
SPECS/egl-wayland.spec
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
Name: egl-wayland
|
||||||
|
Version: 1.1.9
|
||||||
|
Release: 1%{?dist}
|
||||||
|
Summary: Wayland EGL External Platform library
|
||||||
|
|
||||||
|
License: MIT
|
||||||
|
URL: https://github.com/NVIDIA/%{name}
|
||||||
|
Source0: %url/archive/%{version}/%{name}-%{version}.tar.gz
|
||||||
|
Source1: 10_nvidia_wayland.json
|
||||||
|
Source2: 15_nvidia_gbm.json
|
||||||
|
Patch0: %url/commit/d4937adc5cd04ac7df98fc5616e40319fb52fdee.patch
|
||||||
|
Patch1: %url/commit/daab8546eca8428543a4d958a2c53fc747f70672.patch
|
||||||
|
Patch2: %url/commit/582b2d345abaa0e313cf16c902e602084ea59551.patch
|
||||||
|
|
||||||
|
BuildRequires: meson
|
||||||
|
BuildRequires: libtool
|
||||||
|
BuildRequires: eglexternalplatform-devel
|
||||||
|
%if 0%{?fedora}
|
||||||
|
BuildRequires: libglvnd-devel
|
||||||
|
%else
|
||||||
|
BuildRequires: mesa-libEGL-devel
|
||||||
|
%endif
|
||||||
|
BuildRequires: wayland-devel
|
||||||
|
BuildRequires: wayland-protocols-devel
|
||||||
|
|
||||||
|
# Required for directory ownership
|
||||||
|
Requires: libglvnd-egl%{?_isa}
|
||||||
|
|
||||||
|
%description
|
||||||
|
Wayland EGL External Platform library
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Wayland EGL External Platform library development package
|
||||||
|
Requires: %{name}%{?_isa} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
Wayland EGL External Platform library development package
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1
|
||||||
|
%if 0%{?rhel}
|
||||||
|
sed -i -e 's@>= 0.50@>= 0.47@g' meson.build
|
||||||
|
%endif
|
||||||
|
|
||||||
|
%build
|
||||||
|
%meson
|
||||||
|
%meson_build
|
||||||
|
|
||||||
|
|
||||||
|
%install
|
||||||
|
%meson_install
|
||||||
|
install -m 0755 -d %{buildroot}%{_datadir}/egl/egl_external_platform.d/
|
||||||
|
install -pm 0644 %{SOURCE1} %{buildroot}%{_datadir}/egl/egl_external_platform.d/
|
||||||
|
find %{buildroot} -name '*.la' -exec rm -f {} ';'
|
||||||
|
|
||||||
|
|
||||||
|
%ldconfig_scriptlets
|
||||||
|
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc README.md
|
||||||
|
%license COPYING
|
||||||
|
%{_libdir}/*.so.*
|
||||||
|
%{_datadir}/egl/egl_external_platform.d/10_nvidia_wayland.json
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%{_libdir}/libnvidia-egl-wayland.so
|
||||||
|
%{_libdir}/pkgconfig/wayland-eglstream.pc
|
||||||
|
%{_datadir}/pkgconfig/wayland-eglstream-protocols.pc
|
||||||
|
%{_datadir}/wayland-eglstream/
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue Jan 25 2022 Dave Airlie <airlied@redhat.com> - 1.1.9-1
|
||||||
|
- Update to egl-wayland 1.1.9 like Fedora
|
||||||
|
|
||||||
|
* Mon Aug 09 2021 Mohan Boddu <mboddu@redhat.com> - 1.1.7-3
|
||||||
|
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
|
||||||
|
Related: rhbz#1991688
|
||||||
|
|
||||||
|
* Wed Jul 7 2021 Olivier Fourdan <ofourdan@redhat.com> - 1.1.7-2
|
||||||
|
- Rebuild for annobin-9.79 (#1975875)
|
||||||
|
|
||||||
|
* Thu Jul 1 2021 Olivier Fourdan <ofourdan@redhat.com> - 1.1.7-1
|
||||||
|
- Update to 1.1.7 (#1975875)
|
||||||
|
|
||||||
|
* Thu Apr 15 2021 Mohan Boddu <mboddu@redhat.com> - 1.1.6-3
|
||||||
|
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
|
||||||
|
|
||||||
|
* Tue Jan 26 2021 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.6-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Jan 7 2021 Leigh Scott <leigh123linux@gmail.com> - 1.1.6-1
|
||||||
|
- Update to 1.1.6
|
||||||
|
|
||||||
|
* Fri Aug 14 2020 Leigh Scott <leigh123linux@gmail.com> - 1.1.5-3
|
||||||
|
- Add upstream patch to address rhbz#1842473
|
||||||
|
|
||||||
|
* Mon Jul 27 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.5-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jun 01 2020 Leigh Scott <leigh123linux@gmail.com> - 1.1.5-1
|
||||||
|
- Update to 1.1.5
|
||||||
|
|
||||||
|
* Mon Mar 30 2020 leigh123linux <leigh123linux@googlemail.com> - 1.1.4-4
|
||||||
|
- Use upstream commit to address missing mesa includes
|
||||||
|
|
||||||
|
* Tue Jan 28 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.4-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Dec 16 2019 Leigh Scott <leigh123linux@gmail.com> - 1.1.4-2
|
||||||
|
- Add patch to add missing mesa includes
|
||||||
|
|
||||||
|
* Sun Sep 15 2019 Leigh Scott <leigh123linux@googlemail.com> - 1.1.4-1
|
||||||
|
- Update to 1.1.4
|
||||||
|
|
||||||
|
* Wed Jul 24 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.3-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sun Jun 02 2019 Leigh Scott <leigh123linux@googlemail.com> - 1.1.3-1
|
||||||
|
- Update to 1.1.3
|
||||||
|
|
||||||
|
* Tue Apr 16 2019 Adam Williamson <awilliam@redhat.com> - 1.1.2-3
|
||||||
|
- Rebuild with Meson fix for #1699099
|
||||||
|
|
||||||
|
* Sat Mar 30 2019 Leigh Scott <leigh123linux@googlemail.com> - 1.1.2-2
|
||||||
|
- Switch to upstream fix
|
||||||
|
|
||||||
|
* Fri Feb 01 2019 Leigh Scott <leigh123linux@googlemail.com> - 1.1.2-1
|
||||||
|
- Update to 1.1.2
|
||||||
|
|
||||||
|
* Thu Jan 31 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.1.1-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Dec 06 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.1.1-3
|
||||||
|
- Fix the same crappy warning f28 generates
|
||||||
|
|
||||||
|
* Thu Dec 06 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.1.1-2
|
||||||
|
- Fix the crappy warning epel7 generates
|
||||||
|
|
||||||
|
* Thu Dec 06 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.1.1-1
|
||||||
|
- Update to 1.1.1
|
||||||
|
|
||||||
|
* Mon Nov 26 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.1.0-0.2.20181015git0eb29d4
|
||||||
|
- Update to latest git snapshot (rhbz#1653118)
|
||||||
|
|
||||||
|
* Mon Aug 20 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.1.0-0.1.20180916git1676d1d
|
||||||
|
- Update to 1.1.0 snapshot
|
||||||
|
|
||||||
|
* Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.5-0.2.20180626git395ce9f
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
|
||||||
|
|
||||||
|
* Sat Jun 30 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.0.5-0.1.20180626git395ce9f
|
||||||
|
- Update to 1.0.5 snapshot
|
||||||
|
|
||||||
|
* Sat Jun 16 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.0.4-0.1.20180602git4ab0873
|
||||||
|
- Update to 1.0.4 snapshot
|
||||||
|
|
||||||
|
* Tue Feb 06 2018 Leigh Scott <leigh123linux@googlemail.com> - 1.0.3-2.20180201git6f5f7d0
|
||||||
|
- Update to latest git snapshot
|
||||||
|
- Switch to meson
|
||||||
|
- Install .so file to -devel as it's listed in wayland-eglstream.pc
|
||||||
|
- Fix directory ownership
|
||||||
|
|
||||||
|
* Wed Jan 31 2018 Jonas Ådahl <jadahl@redhat.com> - 1.0.3-1.20180111gitb283689
|
||||||
|
- Update to 1.0.3
|
||||||
|
- Add -devel package
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.2-0.4.20170802git1f4b1fd
|
||||||
|
- Update to latest git snapshot
|
||||||
|
|
||||||
|
* Wed Aug 02 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.2-0.3.20170628git818b613
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.2-0.2.20170628git818b613
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jun 28 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.2-0.1.20170628git818b613
|
||||||
|
- Update to 1.0.2 git
|
||||||
|
|
||||||
|
* Wed Mar 08 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.1-0.1.20170308git582fbf3
|
||||||
|
- Update to 1.0.1 git
|
||||||
|
|
||||||
|
* Tue Feb 07 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.7.20170207git05eb000
|
||||||
|
- Add license file
|
||||||
|
|
||||||
|
* Thu Feb 02 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.6.20170120git743d702
|
||||||
|
- Add requires libglvnd-egl
|
||||||
|
- Make review changes
|
||||||
|
|
||||||
|
* Wed Feb 01 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.5.20170120git743d702
|
||||||
|
- Drop devel sub-package
|
||||||
|
|
||||||
|
* Wed Feb 01 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.4.20170120git743d702
|
||||||
|
- Add 10_nvidia_wayland.json to libs sub-package
|
||||||
|
|
||||||
|
* Wed Feb 01 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.3.20170120git743d702
|
||||||
|
- Add loader directory to common sub-package
|
||||||
|
- Move libs to sub-package
|
||||||
|
|
||||||
|
* Fri Jan 20 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.2.20170120git743d702
|
||||||
|
- Add date to release
|
||||||
|
|
||||||
|
* Fri Jan 20 2017 Leigh Scott <leigh123linux@googlemail.com> - 1.0.0-0.1.git743d702
|
||||||
|
- First build
|
||||||
|
|
Loading…
Reference in New Issue
Block a user