Accepting request 741600 from home:iznogood:branches:X11:XOrg
Resub, now with tarball produced and using explict commitid in _service, ensure that source updates are entirely manual OBS-URL: https://build.opensuse.org/request/show/741600 OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=748
This commit is contained in:
parent
9789aaef6f
commit
ed55af51ec
@ -1,242 +0,0 @@
|
|||||||
From 7f962c70b6d9c346477f23f6c15211e749110078 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Alex Goins <agoins@nvidia.com>
|
|
||||||
Date: Wed, 10 Apr 2019 13:48:02 -0500
|
|
||||||
Subject: [PATCH] xsync: Add resource inside of SyncCreate, export SyncCreate
|
|
||||||
|
|
||||||
As shown by DRI3 adding the SyncCreateFenceFromFD() function, extensions may
|
|
||||||
want to create a fence, then initialize it in their own way. This currently
|
|
||||||
can't be done without adding a function directly to Xext/sync.c due to the fact
|
|
||||||
that the RTFence resource type is private and there is no external interface to
|
|
||||||
add to it.
|
|
||||||
|
|
||||||
To facilitate other X extensions creating fences and initializing them, this
|
|
||||||
change exports SyncCreate() and adds the resource directly within it. Callers no
|
|
||||||
longer need to call AddResource() after SyncCreate(), they only need to
|
|
||||||
initialize the SyncObject.
|
|
||||||
|
|
||||||
To prevent FreeFence() and FreeCounter() from segfaulting if the call to
|
|
||||||
AddResource() fails before the sync object is initialized, this adds a new
|
|
||||||
'initialized' parameter to SyncObject that, when FALSE, causes FreeFence() and
|
|
||||||
FreeCounter() to skip de-initialization and simply free the object.
|
|
||||||
Initialization after adding the resource shouldn't otherwise be a problem due to
|
|
||||||
the single-threaded nature of X.
|
|
||||||
|
|
||||||
Signed-off-by: Alex Goins <agoins@nvidia.com>
|
|
||||||
Reviewed-by: James Jones <jajones@nvidia.com>
|
|
||||||
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
---
|
|
||||||
Xext/sync.c | 50 ++++++++++++++++++++++++++++----------------------
|
|
||||||
Xext/syncsdk.h | 3 +++
|
|
||||||
miext/sync/misync.c | 27 ++++++++++++++++-----------
|
|
||||||
miext/sync/misync.h | 1 +
|
|
||||||
miext/sync/misyncstr.h | 5 +++--
|
|
||||||
5 files changed, 51 insertions(+), 35 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/Xext/sync.c b/Xext/sync.c
|
|
||||||
index 8f22a865b..fd2ceb042 100644
|
|
||||||
--- a/Xext/sync.c
|
|
||||||
+++ b/Xext/sync.c
|
|
||||||
@@ -881,18 +881,21 @@ SyncChangeAlarmAttributes(ClientPtr client, SyncAlarm * pAlarm, Mask mask,
|
|
||||||
return Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static SyncObject *
|
|
||||||
+SyncObject *
|
|
||||||
SyncCreate(ClientPtr client, XID id, unsigned char type)
|
|
||||||
{
|
|
||||||
SyncObject *pSync;
|
|
||||||
+ RESTYPE resType;
|
|
||||||
|
|
||||||
switch (type) {
|
|
||||||
case SYNC_COUNTER:
|
|
||||||
pSync = malloc(sizeof(SyncCounter));
|
|
||||||
+ resType = RTCounter;
|
|
||||||
break;
|
|
||||||
case SYNC_FENCE:
|
|
||||||
pSync = (SyncObject *) dixAllocateObjectWithPrivates(SyncFence,
|
|
||||||
PRIVATE_SYNC_FENCE);
|
|
||||||
+ resType = RTFence;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return NULL;
|
|
||||||
@@ -901,6 +904,11 @@ SyncCreate(ClientPtr client, XID id, unsigned char type)
|
|
||||||
if (!pSync)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
+ pSync->initialized = FALSE;
|
|
||||||
+
|
|
||||||
+ if (!AddResource(id, resType, (void *) pSync))
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
pSync->client = client;
|
|
||||||
pSync->id = id;
|
|
||||||
pSync->pTriglist = NULL;
|
|
||||||
@@ -923,13 +931,10 @@ SyncCreateFenceFromFD(ClientPtr client, DrawablePtr pDraw, XID id, int fd, BOOL
|
|
||||||
|
|
||||||
status = miSyncInitFenceFromFD(pDraw, pFence, fd, initially_triggered);
|
|
||||||
if (status != Success) {
|
|
||||||
- dixFreeObjectWithPrivates(pFence, PRIVATE_SYNC_FENCE);
|
|
||||||
+ FreeResource(pFence->sync.id, RT_NONE);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!AddResource(id, RTFence, (void *) pFence))
|
|
||||||
- return BadAlloc;
|
|
||||||
-
|
|
||||||
return Success;
|
|
||||||
#else
|
|
||||||
return BadImplementation;
|
|
||||||
@@ -957,8 +962,7 @@ SyncCreateCounter(ClientPtr client, XSyncCounter id, int64_t initialvalue)
|
|
||||||
pCounter->value = initialvalue;
|
|
||||||
pCounter->pSysCounterInfo = NULL;
|
|
||||||
|
|
||||||
- if (!AddResource(id, RTCounter, (void *) pCounter))
|
|
||||||
- return NULL;
|
|
||||||
+ pCounter->sync.initialized = TRUE;
|
|
||||||
|
|
||||||
return pCounter;
|
|
||||||
}
|
|
||||||
@@ -1137,21 +1141,26 @@ static int
|
|
||||||
FreeCounter(void *env, XID id)
|
|
||||||
{
|
|
||||||
SyncCounter *pCounter = (SyncCounter *) env;
|
|
||||||
- SyncTriggerList *ptl, *pnext;
|
|
||||||
|
|
||||||
pCounter->sync.beingDestroyed = TRUE;
|
|
||||||
- /* tell all the counter's triggers that the counter has been destroyed */
|
|
||||||
- for (ptl = pCounter->sync.pTriglist; ptl; ptl = pnext) {
|
|
||||||
- (*ptl->pTrigger->CounterDestroyed) (ptl->pTrigger);
|
|
||||||
- pnext = ptl->next;
|
|
||||||
- free(ptl); /* destroy the trigger list as we go */
|
|
||||||
- }
|
|
||||||
- if (IsSystemCounter(pCounter)) {
|
|
||||||
- xorg_list_del(&pCounter->pSysCounterInfo->entry);
|
|
||||||
- free(pCounter->pSysCounterInfo->name);
|
|
||||||
- free(pCounter->pSysCounterInfo->private);
|
|
||||||
- free(pCounter->pSysCounterInfo);
|
|
||||||
+
|
|
||||||
+ if (pCounter->sync.initialized) {
|
|
||||||
+ SyncTriggerList *ptl, *pnext;
|
|
||||||
+
|
|
||||||
+ /* tell all the counter's triggers that counter has been destroyed */
|
|
||||||
+ for (ptl = pCounter->sync.pTriglist; ptl; ptl = pnext) {
|
|
||||||
+ (*ptl->pTrigger->CounterDestroyed) (ptl->pTrigger);
|
|
||||||
+ pnext = ptl->next;
|
|
||||||
+ free(ptl); /* destroy the trigger list as we go */
|
|
||||||
+ }
|
|
||||||
+ if (IsSystemCounter(pCounter)) {
|
|
||||||
+ xorg_list_del(&pCounter->pSysCounterInfo->entry);
|
|
||||||
+ free(pCounter->pSysCounterInfo->name);
|
|
||||||
+ free(pCounter->pSysCounterInfo->private);
|
|
||||||
+ free(pCounter->pSysCounterInfo);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
+
|
|
||||||
free(pCounter);
|
|
||||||
return Success;
|
|
||||||
}
|
|
||||||
@@ -1889,9 +1898,6 @@ ProcSyncCreateFence(ClientPtr client)
|
|
||||||
|
|
||||||
miSyncInitFence(pDraw->pScreen, pFence, stuff->initially_triggered);
|
|
||||||
|
|
||||||
- if (!AddResource(stuff->fid, RTFence, (void *) pFence))
|
|
||||||
- return BadAlloc;
|
|
||||||
-
|
|
||||||
return Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/Xext/syncsdk.h b/Xext/syncsdk.h
|
|
||||||
index f1b99d010..c88285cb1 100644
|
|
||||||
--- a/Xext/syncsdk.h
|
|
||||||
+++ b/Xext/syncsdk.h
|
|
||||||
@@ -29,6 +29,9 @@
|
|
||||||
extern _X_EXPORT int
|
|
||||||
SyncVerifyFence(SyncFence ** ppFence, XID fid, ClientPtr client, Mask mode);
|
|
||||||
|
|
||||||
+extern _X_EXPORT SyncObject*
|
|
||||||
+ SyncCreate(ClientPtr client, XID id, unsigned char type);
|
|
||||||
+
|
|
||||||
#define VERIFY_SYNC_FENCE(pFence, fid, client, mode) \
|
|
||||||
do { \
|
|
||||||
int rc; \
|
|
||||||
diff --git a/miext/sync/misync.c b/miext/sync/misync.c
|
|
||||||
index 490fa0b17..0931803f6 100644
|
|
||||||
--- a/miext/sync/misync.c
|
|
||||||
+++ b/miext/sync/misync.c
|
|
||||||
@@ -101,24 +101,29 @@ miSyncInitFence(ScreenPtr pScreen, SyncFence * pFence, Bool initially_triggered)
|
|
||||||
pFence->funcs = miSyncFenceFuncs;
|
|
||||||
|
|
||||||
pScreenPriv->funcs.CreateFence(pScreen, pFence, initially_triggered);
|
|
||||||
+
|
|
||||||
+ pFence->sync.initialized = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
miSyncDestroyFence(SyncFence * pFence)
|
|
||||||
{
|
|
||||||
- ScreenPtr pScreen = pFence->pScreen;
|
|
||||||
- SyncScreenPrivPtr pScreenPriv = SYNC_SCREEN_PRIV(pScreen);
|
|
||||||
- SyncTriggerList *ptl, *pNext;
|
|
||||||
-
|
|
||||||
pFence->sync.beingDestroyed = TRUE;
|
|
||||||
- /* tell all the fence's triggers that the counter has been destroyed */
|
|
||||||
- for (ptl = pFence->sync.pTriglist; ptl; ptl = pNext) {
|
|
||||||
- (*ptl->pTrigger->CounterDestroyed) (ptl->pTrigger);
|
|
||||||
- pNext = ptl->next;
|
|
||||||
- free(ptl); /* destroy the trigger list as we go */
|
|
||||||
- }
|
|
||||||
|
|
||||||
- pScreenPriv->funcs.DestroyFence(pScreen, pFence);
|
|
||||||
+ if (pFence->sync.initialized) {
|
|
||||||
+ ScreenPtr pScreen = pFence->pScreen;
|
|
||||||
+ SyncScreenPrivPtr pScreenPriv = SYNC_SCREEN_PRIV(pScreen);
|
|
||||||
+ SyncTriggerList *ptl, *pNext;
|
|
||||||
+
|
|
||||||
+ /* tell all the fence's triggers that the counter has been destroyed */
|
|
||||||
+ for (ptl = pFence->sync.pTriglist; ptl; ptl = pNext) {
|
|
||||||
+ (*ptl->pTrigger->CounterDestroyed) (ptl->pTrigger);
|
|
||||||
+ pNext = ptl->next;
|
|
||||||
+ free(ptl); /* destroy the trigger list as we go */
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ pScreenPriv->funcs.DestroyFence(pScreen, pFence);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
dixFreeObjectWithPrivates(pFence, PRIVATE_SYNC_FENCE);
|
|
||||||
}
|
|
||||||
diff --git a/miext/sync/misync.h b/miext/sync/misync.h
|
|
||||||
index dc78c5fdb..f7082d5ea 100644
|
|
||||||
--- a/miext/sync/misync.h
|
|
||||||
+++ b/miext/sync/misync.h
|
|
||||||
@@ -28,6 +28,7 @@
|
|
||||||
#ifndef _MISYNC_H_
|
|
||||||
#define _MISYNC_H_
|
|
||||||
|
|
||||||
+typedef struct _SyncObject SyncObject;
|
|
||||||
typedef struct _SyncFence SyncFence;
|
|
||||||
typedef struct _SyncTrigger SyncTrigger;
|
|
||||||
|
|
||||||
diff --git a/miext/sync/misyncstr.h b/miext/sync/misyncstr.h
|
|
||||||
index 2eab2aa57..2a6e84a96 100644
|
|
||||||
--- a/miext/sync/misyncstr.h
|
|
||||||
+++ b/miext/sync/misyncstr.h
|
|
||||||
@@ -38,13 +38,14 @@
|
|
||||||
#define SYNC_COUNTER 0
|
|
||||||
#define SYNC_FENCE 1
|
|
||||||
|
|
||||||
-typedef struct _SyncObject {
|
|
||||||
+struct _SyncObject {
|
|
||||||
ClientPtr client; /* Owning client. 0 for system counters */
|
|
||||||
struct _SyncTriggerList *pTriglist; /* list of triggers */
|
|
||||||
XID id; /* resource ID */
|
|
||||||
unsigned char type; /* SYNC_* */
|
|
||||||
+ Bool initialized; /* FALSE if created but not initialized */
|
|
||||||
Bool beingDestroyed; /* in process of going away */
|
|
||||||
-} SyncObject;
|
|
||||||
+};
|
|
||||||
|
|
||||||
typedef struct _SyncCounter {
|
|
||||||
SyncObject sync; /* Common sync object data */
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,91 +0,0 @@
|
|||||||
From 37a36a6b5b887d5c5a17a6931ceba8ad5d1bb6d5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kyle Brenneman <kbrenneman@nvidia.com>
|
|
||||||
Date: Thu, 19 Oct 2017 15:14:51 -0600
|
|
||||||
Subject: [PATCH] GLX: Add a per-client vendor mapping.
|
|
||||||
|
|
||||||
Each client now has its own (screen, vendor) mapping.
|
|
||||||
|
|
||||||
Currently, it's just a copy of the global mapping, but later changes will allow
|
|
||||||
it to change.
|
|
||||||
|
|
||||||
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
|
||||||
---
|
|
||||||
glx/vndext.c | 11 ++++++++++-
|
|
||||||
glx/vndserver.h | 5 +++++
|
|
||||||
glx/vndservermapping.c | 19 +++++++++++++++----
|
|
||||||
3 files changed, 30 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glx/vndext.c b/glx/vndext.c
|
|
||||||
index d7936467b..20c0648cc 100644
|
|
||||||
--- a/glx/vndext.c
|
|
||||||
+++ b/glx/vndext.c
|
|
||||||
@@ -139,8 +139,17 @@ GlxGetClientData(ClientPtr client)
|
|
||||||
{
|
|
||||||
GlxClientPriv *cl = xglvGetClientPrivate(client);
|
|
||||||
if (cl == NULL) {
|
|
||||||
- cl = calloc(1, sizeof(GlxClientPriv));
|
|
||||||
+ cl = calloc(1, sizeof(GlxClientPriv)
|
|
||||||
+ + screenInfo.numScreens * sizeof(GlxServerVendor *));
|
|
||||||
if (cl != NULL) {
|
|
||||||
+ int i;
|
|
||||||
+
|
|
||||||
+ cl->vendors = (GlxServerVendor **) (cl + 1);
|
|
||||||
+ for (i=0; i<screenInfo.numScreens; i++)
|
|
||||||
+ {
|
|
||||||
+ cl->vendors[i] = GlxGetVendorForScreen(NULL, screenInfo.screens[i]);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
xglvSetClientPrivate(client, cl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/glx/vndserver.h b/glx/vndserver.h
|
|
||||||
index a175656ae..78246d212 100644
|
|
||||||
--- a/glx/vndserver.h
|
|
||||||
+++ b/glx/vndserver.h
|
|
||||||
@@ -57,6 +57,11 @@ typedef struct GlxContextTagInfoRec {
|
|
||||||
typedef struct GlxClientPrivRec {
|
|
||||||
GlxContextTagInfo *contextTags;
|
|
||||||
unsigned int contextTagCount;
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * The vendor handles for each screen.
|
|
||||||
+ */
|
|
||||||
+ GlxServerVendor **vendors;
|
|
||||||
} GlxClientPriv;
|
|
||||||
|
|
||||||
extern int GlxErrorBase;
|
|
||||||
diff --git a/glx/vndservermapping.c b/glx/vndservermapping.c
|
|
||||||
index fd3be92d9..778656bb6 100644
|
|
||||||
--- a/glx/vndservermapping.c
|
|
||||||
+++ b/glx/vndservermapping.c
|
|
||||||
@@ -187,10 +187,21 @@ Bool GlxSetScreenVendor(ScreenPtr screen, GlxServerVendor *vendor)
|
|
||||||
|
|
||||||
GlxServerVendor *GlxGetVendorForScreen(ClientPtr client, ScreenPtr screen)
|
|
||||||
{
|
|
||||||
- GlxScreenPriv *priv = GlxGetScreen(screen);
|
|
||||||
- if (priv != NULL) {
|
|
||||||
- return priv->vendor;
|
|
||||||
+ // Note that the client won't be sending GPU screen numbers, so we don't
|
|
||||||
+ // need per-client mappings for them.
|
|
||||||
+ if (client != NULL && !screen->isGPU) {
|
|
||||||
+ GlxClientPriv *cl = GlxGetClientData(client);
|
|
||||||
+ if (cl != NULL) {
|
|
||||||
+ return cl->vendors[screen->myNum];
|
|
||||||
+ } else {
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
} else {
|
|
||||||
- return NULL;
|
|
||||||
+ GlxScreenPriv *priv = GlxGetScreen(screen);
|
|
||||||
+ if (priv != NULL) {
|
|
||||||
+ return priv->vendor;
|
|
||||||
+ } else {
|
|
||||||
+ return NULL;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
From 8b67ec7cc6fda243480a5a8ca118b66242f3eb2c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kyle Brenneman <kbrenneman@nvidia.com>
|
|
||||||
Date: Wed, 8 May 2019 08:44:54 -0600
|
|
||||||
Subject: [PATCH] GLX: Use the sending client for looking up XID's
|
|
||||||
|
|
||||||
When GlxGetXIDMap looks up an unknown XID, it will now look up a vendor based
|
|
||||||
on the screen number for the XID and the client that sent the current request.
|
|
||||||
|
|
||||||
In GlxGetXIDMap, if the XID is for a regular X window, then it won't be in the
|
|
||||||
(XID -> vendor) mapping, so we have to look up a vendor by screen number.
|
|
||||||
|
|
||||||
With this change, GlxGetXIDMap will use the (screen -> vendor) map for
|
|
||||||
whichever client sent the current request, instead of using the global
|
|
||||||
(screen -> vendor) map.
|
|
||||||
|
|
||||||
Since GlxGetXIDMap doesn't take a ClientPtr argument, GlxDispatchRequest will
|
|
||||||
store the client for the current request in a global variable. That way, the
|
|
||||||
ABI for GLXVND doesn't need to change.
|
|
||||||
|
|
||||||
v2: Fix an error check in GlxDispatchRequest.
|
|
||||||
|
|
||||||
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
|
||||||
---
|
|
||||||
glx/vndcmds.c | 13 +++++++++++--
|
|
||||||
glx/vndserver.h | 7 +++++++
|
|
||||||
glx/vndservermapping.c | 12 ++++++++----
|
|
||||||
3 files changed, 26 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glx/vndcmds.c b/glx/vndcmds.c
|
|
||||||
index f0779d14a..21c6fef9e 100644
|
|
||||||
--- a/glx/vndcmds.c
|
|
||||||
+++ b/glx/vndcmds.c
|
|
||||||
@@ -468,15 +468,24 @@ void GlxDispatchReset(void)
|
|
||||||
int GlxDispatchRequest(ClientPtr client)
|
|
||||||
{
|
|
||||||
REQUEST(xReq);
|
|
||||||
+ int result;
|
|
||||||
+
|
|
||||||
if (GlxExtensionEntry->base == 0)
|
|
||||||
return BadRequest;
|
|
||||||
+
|
|
||||||
+ GlxSetRequestClient(client);
|
|
||||||
+
|
|
||||||
if (stuff->data < OPCODE_ARRAY_LEN) {
|
|
||||||
if (dispatchFuncs[stuff->data] == NULL) {
|
|
||||||
// Try to find a dispatch stub.
|
|
||||||
dispatchFuncs[stuff->data] = GetVendorDispatchFunc(stuff->data, 0);
|
|
||||||
}
|
|
||||||
- return dispatchFuncs[stuff->data](client);
|
|
||||||
+ result = dispatchFuncs[stuff->data](client);
|
|
||||||
} else {
|
|
||||||
- return dispatch_GLXSingle(client);
|
|
||||||
+ result = dispatch_GLXSingle(client);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ GlxSetRequestClient(NULL);
|
|
||||||
+
|
|
||||||
+ return result;
|
|
||||||
}
|
|
||||||
diff --git a/glx/vndserver.h b/glx/vndserver.h
|
|
||||||
index 78246d212..613fef0fe 100644
|
|
||||||
--- a/glx/vndserver.h
|
|
||||||
+++ b/glx/vndserver.h
|
|
||||||
@@ -95,6 +95,13 @@ Bool GlxAddXIDMap(XID id, GlxServerVendor *vendor);
|
|
||||||
GlxServerVendor * GlxGetXIDMap(XID id);
|
|
||||||
void GlxRemoveXIDMap(XID id);
|
|
||||||
|
|
||||||
+/**
|
|
||||||
+ * Records the client that sent the current request. This is needed in
|
|
||||||
+ * GlxGetXIDMap to know which client's (screen -> vendor) mapping to use for a
|
|
||||||
+ * regular X window.
|
|
||||||
+ */
|
|
||||||
+void GlxSetRequestClient(ClientPtr client);
|
|
||||||
+
|
|
||||||
GlxContextTagInfo *GlxAllocContextTag(ClientPtr client, GlxServerVendor *vendor);
|
|
||||||
GlxContextTagInfo *GlxLookupContextTag(ClientPtr client, GLXContextTag tag);
|
|
||||||
void GlxFreeContextTag(GlxContextTagInfo *tagInfo);
|
|
||||||
diff --git a/glx/vndservermapping.c b/glx/vndservermapping.c
|
|
||||||
index 778656bb6..4efab8b81 100644
|
|
||||||
--- a/glx/vndservermapping.c
|
|
||||||
+++ b/glx/vndservermapping.c
|
|
||||||
@@ -33,6 +33,13 @@
|
|
||||||
|
|
||||||
#include "vndservervendor.h"
|
|
||||||
|
|
||||||
+static ClientPtr requestClient = NULL;
|
|
||||||
+
|
|
||||||
+void GlxSetRequestClient(ClientPtr client)
|
|
||||||
+{
|
|
||||||
+ requestClient = client;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static GlxServerVendor *LookupXIDMapResource(XID id)
|
|
||||||
{
|
|
||||||
void *ptr = NULL;
|
|
||||||
@@ -59,10 +66,7 @@ GlxServerVendor *GlxGetXIDMap(XID id)
|
|
||||||
DixGetAttrAccess);
|
|
||||||
if (rv == Success && ptr != NULL) {
|
|
||||||
DrawablePtr draw = (DrawablePtr) ptr;
|
|
||||||
- GlxScreenPriv *screenPriv = GlxGetScreen(draw->pScreen);
|
|
||||||
- if (screenPriv != NULL) {
|
|
||||||
- vendor = screenPriv->vendor;
|
|
||||||
- }
|
|
||||||
+ vendor = GlxGetVendorForScreen(requestClient, draw->pScreen);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return vendor;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,112 +0,0 @@
|
|||||||
From 56c0a71fdd94a008e5d746261f70a713c4767f93 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Kyle Brenneman <kbrenneman@nvidia.com>
|
|
||||||
Date: Thu, 2 May 2019 07:17:21 -0600
|
|
||||||
Subject: [PATCH] GLX: Add a function to change a clients vendor list.
|
|
||||||
|
|
||||||
Add a new function, GlxServerExports::setClientScreenVendor, which will change
|
|
||||||
the vendor that handles GLX requests for a screen, but only for requests from
|
|
||||||
a specific client.
|
|
||||||
|
|
||||||
v2: Increment the GLXVND minor version number.
|
|
||||||
v3: Note the GLXVND version requirement for setClientScreenVendor.
|
|
||||||
|
|
||||||
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
|
||||||
---
|
|
||||||
glx/vndext.c | 1 +
|
|
||||||
glx/vndserver.h | 1 +
|
|
||||||
glx/vndservermapping.c | 21 +++++++++++++++++++++
|
|
||||||
include/glxvndabi.h | 13 ++++++++++++-
|
|
||||||
4 files changed, 35 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/glx/vndext.c b/glx/vndext.c
|
|
||||||
index 20c0648cc..582e60b6e 100644
|
|
||||||
--- a/glx/vndext.c
|
|
||||||
+++ b/glx/vndext.c
|
|
||||||
@@ -324,6 +324,7 @@ _X_EXPORT const GlxServerExports glxServer = {
|
|
||||||
.getContextTagPrivate = GlxGetContextTagPrivate,
|
|
||||||
.getVendorForScreen = GlxGetVendorForScreen,
|
|
||||||
.forwardRequest = GlxForwardRequest,
|
|
||||||
+ .setClientScreenVendor = GlxSetClientScreenVendor,
|
|
||||||
};
|
|
||||||
|
|
||||||
const GlxServerExports *
|
|
||||||
diff --git a/glx/vndserver.h b/glx/vndserver.h
|
|
||||||
index 613fef0fe..772b458a1 100644
|
|
||||||
--- a/glx/vndserver.h
|
|
||||||
+++ b/glx/vndserver.h
|
|
||||||
@@ -107,6 +107,7 @@ GlxContextTagInfo *GlxLookupContextTag(ClientPtr client, GLXContextTag tag);
|
|
||||||
void GlxFreeContextTag(GlxContextTagInfo *tagInfo);
|
|
||||||
|
|
||||||
Bool GlxSetScreenVendor(ScreenPtr screen, GlxServerVendor *vendor);
|
|
||||||
+Bool GlxSetClientScreenVendor(ClientPtr client, ScreenPtr screen, GlxServerVendor *vendor);
|
|
||||||
GlxScreenPriv *GlxGetScreen(ScreenPtr pScreen);
|
|
||||||
GlxServerVendor *GlxGetVendorForScreen(ClientPtr client, ScreenPtr screen);
|
|
||||||
|
|
||||||
diff --git a/glx/vndservermapping.c b/glx/vndservermapping.c
|
|
||||||
index 4efab8b81..04788ffbd 100644
|
|
||||||
--- a/glx/vndservermapping.c
|
|
||||||
+++ b/glx/vndservermapping.c
|
|
||||||
@@ -189,6 +189,27 @@ Bool GlxSetScreenVendor(ScreenPtr screen, GlxServerVendor *vendor)
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
+Bool GlxSetClientScreenVendor(ClientPtr client, ScreenPtr screen, GlxServerVendor *vendor)
|
|
||||||
+{
|
|
||||||
+ GlxClientPriv *cl;
|
|
||||||
+
|
|
||||||
+ if (screen == NULL || screen->isGPU) {
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ cl = GlxGetClientData(client);
|
|
||||||
+ if (cl == NULL) {
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (vendor != NULL) {
|
|
||||||
+ cl->vendors[screen->myNum] = vendor;
|
|
||||||
+ } else {
|
|
||||||
+ cl->vendors[screen->myNum] = GlxGetVendorForScreen(NULL, screen);
|
|
||||||
+ }
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
GlxServerVendor *GlxGetVendorForScreen(ClientPtr client, ScreenPtr screen)
|
|
||||||
{
|
|
||||||
// Note that the client won't be sending GPU screen numbers, so we don't
|
|
||||||
diff --git a/include/glxvndabi.h b/include/glxvndabi.h
|
|
||||||
index b78306d23..71f36e722 100644
|
|
||||||
--- a/include/glxvndabi.h
|
|
||||||
+++ b/include/glxvndabi.h
|
|
||||||
@@ -75,7 +75,7 @@
|
|
||||||
* will still work.
|
|
||||||
*/
|
|
||||||
#define GLXSERVER_VENDOR_ABI_MAJOR_VERSION 0
|
|
||||||
-#define GLXSERVER_VENDOR_ABI_MINOR_VERSION 0
|
|
||||||
+#define GLXSERVER_VENDOR_ABI_MINOR_VERSION 1
|
|
||||||
|
|
||||||
#if defined(__cplusplus)
|
|
||||||
extern "C" {
|
|
||||||
@@ -236,6 +236,17 @@ typedef struct GlxServerExportsRec {
|
|
||||||
* \param client The client.
|
|
||||||
*/
|
|
||||||
int (* forwardRequest) (GlxServerVendor *vendor, ClientPtr client);
|
|
||||||
+
|
|
||||||
+ /**
|
|
||||||
+ * Sets the vendor library to use for a screen for a specific client.
|
|
||||||
+ *
|
|
||||||
+ * This function changes which vendor should handle GLX requests for a
|
|
||||||
+ * screen. Unlike \c setScreenVendor, this function can be called at any
|
|
||||||
+ * time, and only applies to requests from a single client.
|
|
||||||
+ *
|
|
||||||
+ * This function is available in GLXVND version 0.1 or later.
|
|
||||||
+ */
|
|
||||||
+ Bool (* setClientScreenVendor) (ClientPtr client, ScreenPtr screen, GlxServerVendor *vendor);
|
|
||||||
} GlxServerExports;
|
|
||||||
|
|
||||||
extern _X_EXPORT const GlxServerExports glxServer;
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
|||||||
From b4231d69028adc8123801a7552b40a15ea928d1b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
Date: Tue, 21 May 2019 10:50:42 -0700
|
|
||||||
Subject: [PATCH] GLX: Set GlxServerExports::{major,minor}Version
|
|
||||||
|
|
||||||
Commit 56c0a71fdd94a008e5d746261f70a713c4767f93 incremented the
|
|
||||||
GLXSERVER_VENDOR_ABI_MINOR_VERSION define, but this define was not actually
|
|
||||||
being used to set glxServer.minorVersion.
|
|
||||||
|
|
||||||
Update the initializer for glxServer to use the correct version numbers.
|
|
||||||
|
|
||||||
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
|
|
||||||
---
|
|
||||||
glx/vndext.c | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/glx/vndext.c b/glx/vndext.c
|
|
||||||
index 582e60b6e..0513733b6 100644
|
|
||||||
--- a/glx/vndext.c
|
|
||||||
+++ b/glx/vndext.c
|
|
||||||
@@ -304,8 +304,8 @@ GlxFreeServerImports(GlxServerImports *imports)
|
|
||||||
}
|
|
||||||
|
|
||||||
_X_EXPORT const GlxServerExports glxServer = {
|
|
||||||
- .majorVersion = 0,
|
|
||||||
- .minorVersion = 0,
|
|
||||||
+ .majorVersion = GLXSERVER_VENDOR_ABI_MAJOR_VERSION,
|
|
||||||
+ .minorVersion = GLXSERVER_VENDOR_ABI_MINOR_VERSION,
|
|
||||||
|
|
||||||
.extensionInitCallback = &vndInitCallbackListPtr,
|
|
||||||
|
|
||||||
--
|
|
||||||
2.16.4
|
|
||||||
|
|
@ -1,307 +0,0 @@
|
|||||||
From 4e50440ae20c537d6a4edf356cda67dd33d4e5a8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Carlos Garnacho <carlosg@gnome.org>
|
|
||||||
Date: Mon, 7 Jan 2019 15:20:05 +0100
|
|
||||||
Subject: [PATCH 1/3] xwayland: Separate DamagePtr into separate window data
|
|
||||||
|
|
||||||
This will be dissociated in future commits to handle the cases
|
|
||||||
where windows are being realized before there is a compositor
|
|
||||||
handling redirection.
|
|
||||||
|
|
||||||
In that case, we still want the DamagePtr to be registered upfront
|
|
||||||
on RealizeWindowProc before a corresponding xwl_window might be
|
|
||||||
created. Most notably, it cannot be lazily created on
|
|
||||||
SetWindowPixmapProc as damage accounting gets broken.
|
|
||||||
|
|
||||||
Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
|
|
||||||
---
|
|
||||||
hw/xwayland/xwayland.c | 74 +++++++++++++++++++++++++++++++++---------
|
|
||||||
hw/xwayland/xwayland.h | 1 -
|
|
||||||
2 files changed, 58 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
Index: xorg-server-1.20.5/hw/xwayland/xwayland.c
|
|
||||||
===================================================================
|
|
||||||
--- xorg-server-1.20.5.orig/hw/xwayland/xwayland.c
|
|
||||||
+++ xorg-server-1.20.5/hw/xwayland/xwayland.c
|
|
||||||
@@ -125,6 +125,7 @@ ddxProcessArgument(int argc, char *argv[
|
|
||||||
static DevPrivateKeyRec xwl_window_private_key;
|
|
||||||
static DevPrivateKeyRec xwl_screen_private_key;
|
|
||||||
static DevPrivateKeyRec xwl_pixmap_private_key;
|
|
||||||
+static DevPrivateKeyRec xwl_damage_private_key;
|
|
||||||
|
|
||||||
static struct xwl_window *
|
|
||||||
xwl_window_get(WindowPtr window)
|
|
||||||
@@ -367,8 +368,14 @@ xwl_cursor_confined_to(DeviceIntPtr devi
|
|
||||||
static void
|
|
||||||
damage_report(DamagePtr pDamage, RegionPtr pRegion, void *data)
|
|
||||||
{
|
|
||||||
- struct xwl_window *xwl_window = data;
|
|
||||||
- struct xwl_screen *xwl_screen = xwl_window->xwl_screen;
|
|
||||||
+ WindowPtr window = data;
|
|
||||||
+ struct xwl_window *xwl_window = xwl_window_get(window);
|
|
||||||
+ struct xwl_screen *xwl_screen;
|
|
||||||
+
|
|
||||||
+ if (!xwl_window)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ xwl_screen = xwl_window->xwl_screen;
|
|
||||||
|
|
||||||
#ifdef GLAMOR_HAS_GBM
|
|
||||||
if (xwl_window->present_flipped) {
|
|
||||||
@@ -390,6 +397,47 @@ damage_destroy(DamagePtr pDamage, void *
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
+static Bool
|
|
||||||
+register_damage(WindowPtr window)
|
|
||||||
+{
|
|
||||||
+ DamagePtr damage;
|
|
||||||
+
|
|
||||||
+ damage = DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty,
|
|
||||||
+ FALSE, window->drawable.pScreen, window);
|
|
||||||
+ if (damage == NULL) {
|
|
||||||
+ ErrorF("Failed creating damage\n");
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ DamageRegister(&window->drawable, damage);
|
|
||||||
+ DamageSetReportAfterOp(damage, TRUE);
|
|
||||||
+
|
|
||||||
+ dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, damage);
|
|
||||||
+
|
|
||||||
+ return TRUE;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+unregister_damage(WindowPtr window)
|
|
||||||
+{
|
|
||||||
+ DamagePtr damage;
|
|
||||||
+
|
|
||||||
+ damage = dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key);
|
|
||||||
+ if (!damage)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ DamageUnregister(damage);
|
|
||||||
+ DamageDestroy(damage);
|
|
||||||
+
|
|
||||||
+ dixSetPrivate(&window->devPrivates, &xwl_damage_private_key, NULL);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static DamagePtr
|
|
||||||
+window_get_damage(WindowPtr window)
|
|
||||||
+{
|
|
||||||
+ return dixLookupPrivate(&window->devPrivates, &xwl_damage_private_key);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
shell_surface_ping(void *data,
|
|
||||||
struct wl_shell_surface *shell_surface, uint32_t serial)
|
|
||||||
@@ -470,36 +518,25 @@ send_surface_id_event(struct xwl_window
|
|
||||||
}
|
|
||||||
|
|
||||||
static Bool
|
|
||||||
-xwl_realize_window(WindowPtr window)
|
|
||||||
+ensure_surface_for_window(WindowPtr window)
|
|
||||||
{
|
|
||||||
ScreenPtr screen = window->drawable.pScreen;
|
|
||||||
struct xwl_screen *xwl_screen;
|
|
||||||
struct xwl_window *xwl_window;
|
|
||||||
struct wl_region *region;
|
|
||||||
- Bool ret;
|
|
||||||
-
|
|
||||||
- xwl_screen = xwl_screen_get(screen);
|
|
||||||
-
|
|
||||||
- screen->RealizeWindow = xwl_screen->RealizeWindow;
|
|
||||||
- ret = (*screen->RealizeWindow) (window);
|
|
||||||
- xwl_screen->RealizeWindow = screen->RealizeWindow;
|
|
||||||
- screen->RealizeWindow = xwl_realize_window;
|
|
||||||
|
|
||||||
- if (xwl_screen->rootless && !window->parent) {
|
|
||||||
- BoxRec box = { 0, 0, xwl_screen->width, xwl_screen->height };
|
|
||||||
+ if (xwl_window_get(window))
|
|
||||||
+ return TRUE;
|
|
||||||
|
|
||||||
- RegionReset(&window->winSize, &box);
|
|
||||||
- RegionNull(&window->clipList);
|
|
||||||
- RegionNull(&window->borderClip);
|
|
||||||
- }
|
|
||||||
+ xwl_screen = xwl_screen_get(screen);
|
|
||||||
|
|
||||||
if (xwl_screen->rootless) {
|
|
||||||
if (window->redirectDraw != RedirectDrawManual)
|
|
||||||
- return ret;
|
|
||||||
+ return TRUE;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (window->parent)
|
|
||||||
- return ret;
|
|
||||||
+ return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
xwl_window = calloc(1, sizeof *xwl_window);
|
|
||||||
@@ -545,25 +582,14 @@ xwl_realize_window(WindowPtr window)
|
|
||||||
|
|
||||||
wl_surface_set_user_data(xwl_window->surface, xwl_window);
|
|
||||||
|
|
||||||
- xwl_window->damage =
|
|
||||||
- DamageCreate(damage_report, damage_destroy, DamageReportNonEmpty,
|
|
||||||
- FALSE, screen, xwl_window);
|
|
||||||
- if (xwl_window->damage == NULL) {
|
|
||||||
- ErrorF("Failed creating damage\n");
|
|
||||||
- goto err_surf;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
compRedirectWindow(serverClient, window, CompositeRedirectManual);
|
|
||||||
|
|
||||||
- DamageRegister(&window->drawable, xwl_window->damage);
|
|
||||||
- DamageSetReportAfterOp(xwl_window->damage, TRUE);
|
|
||||||
-
|
|
||||||
dixSetPrivate(&window->devPrivates, &xwl_window_private_key, xwl_window);
|
|
||||||
xorg_list_init(&xwl_window->link_damage);
|
|
||||||
|
|
||||||
xwl_window_init_allow_commits(xwl_window);
|
|
||||||
|
|
||||||
- return ret;
|
|
||||||
+ return TRUE;
|
|
||||||
|
|
||||||
err_surf:
|
|
||||||
if (xwl_window->shell_surface)
|
|
||||||
@@ -575,6 +601,42 @@ err:
|
|
||||||
}
|
|
||||||
|
|
||||||
static Bool
|
|
||||||
+xwl_realize_window(WindowPtr window)
|
|
||||||
+{
|
|
||||||
+ ScreenPtr screen = window->drawable.pScreen;
|
|
||||||
+ struct xwl_screen *xwl_screen;
|
|
||||||
+ Bool ret;
|
|
||||||
+
|
|
||||||
+ xwl_screen = xwl_screen_get(screen);
|
|
||||||
+
|
|
||||||
+ screen->RealizeWindow = xwl_screen->RealizeWindow;
|
|
||||||
+ ret = (*screen->RealizeWindow) (window);
|
|
||||||
+ xwl_screen->RealizeWindow = screen->RealizeWindow;
|
|
||||||
+ screen->RealizeWindow = xwl_realize_window;
|
|
||||||
+
|
|
||||||
+ if (!ret)
|
|
||||||
+ return FALSE;
|
|
||||||
+
|
|
||||||
+ if (xwl_screen->rootless && !window->parent) {
|
|
||||||
+ BoxRec box = { 0, 0, xwl_screen->width, xwl_screen->height };
|
|
||||||
+
|
|
||||||
+ RegionReset(&window->winSize, &box);
|
|
||||||
+ RegionNull(&window->clipList);
|
|
||||||
+ RegionNull(&window->borderClip);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (xwl_screen->rootless ?
|
|
||||||
+ (window->drawable.class == InputOutput &&
|
|
||||||
+ window->parent == window->drawable.pScreen->root) :
|
|
||||||
+ !window->parent) {
|
|
||||||
+ if (!register_damage(window))
|
|
||||||
+ return FALSE;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return ensure_surface_for_window(window);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static Bool
|
|
||||||
xwl_unrealize_window(WindowPtr window)
|
|
||||||
{
|
|
||||||
ScreenPtr screen = window->drawable.pScreen;
|
|
||||||
@@ -620,8 +682,8 @@ xwl_unrealize_window(WindowPtr window)
|
|
||||||
|
|
||||||
wl_surface_destroy(xwl_window->surface);
|
|
||||||
xorg_list_del(&xwl_window->link_damage);
|
|
||||||
- DamageUnregister(xwl_window->damage);
|
|
||||||
- DamageDestroy(xwl_window->damage);
|
|
||||||
+ unregister_damage(window);
|
|
||||||
+
|
|
||||||
if (xwl_window->frame_callback)
|
|
||||||
wl_callback_destroy(xwl_window->frame_callback);
|
|
||||||
|
|
||||||
@@ -638,6 +700,26 @@ xwl_save_screen(ScreenPtr pScreen, int o
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
+xwl_set_window_pixmap(WindowPtr window,
|
|
||||||
+ PixmapPtr pixmap)
|
|
||||||
+{
|
|
||||||
+ ScreenPtr screen = window->drawable.pScreen;
|
|
||||||
+ struct xwl_screen *xwl_screen;
|
|
||||||
+
|
|
||||||
+ xwl_screen = xwl_screen_get(screen);
|
|
||||||
+
|
|
||||||
+ screen->SetWindowPixmap = xwl_screen->SetWindowPixmap;
|
|
||||||
+ (*screen->SetWindowPixmap) (window, pixmap);
|
|
||||||
+ xwl_screen->SetWindowPixmap = screen->SetWindowPixmap;
|
|
||||||
+ screen->SetWindowPixmap = xwl_set_window_pixmap;
|
|
||||||
+
|
|
||||||
+ if (!RegionNotEmpty(&window->winSize))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ ensure_surface_for_window(window);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
frame_callback(void *data,
|
|
||||||
struct wl_callback *callback,
|
|
||||||
uint32_t time)
|
|
||||||
@@ -689,7 +771,7 @@ xwl_window_post_damage(struct xwl_window
|
|
||||||
|
|
||||||
assert(!xwl_window->frame_callback);
|
|
||||||
|
|
||||||
- region = DamageRegion(xwl_window->damage);
|
|
||||||
+ region = DamageRegion(window_get_damage(xwl_window->window));
|
|
||||||
pixmap = (*xwl_screen->screen->GetWindowPixmap) (xwl_window->window);
|
|
||||||
|
|
||||||
#ifdef XWL_HAS_GLAMOR
|
|
||||||
@@ -726,7 +808,7 @@ xwl_window_post_damage(struct xwl_window
|
|
||||||
wl_callback_add_listener(xwl_window->frame_callback, &frame_listener, xwl_window);
|
|
||||||
|
|
||||||
wl_surface_commit(xwl_window->surface);
|
|
||||||
- DamageEmpty(xwl_window->damage);
|
|
||||||
+ DamageEmpty(window_get_damage(xwl_window->window));
|
|
||||||
|
|
||||||
xorg_list_del(&xwl_window->link_damage);
|
|
||||||
}
|
|
||||||
@@ -962,6 +1044,8 @@ xwl_screen_init(ScreenPtr pScreen, int a
|
|
||||||
return FALSE;
|
|
||||||
if (!dixRegisterPrivateKey(&xwl_pixmap_private_key, PRIVATE_PIXMAP, 0))
|
|
||||||
return FALSE;
|
|
||||||
+ if (!dixRegisterPrivateKey(&xwl_damage_private_key, PRIVATE_WINDOW, 0))
|
|
||||||
+ return FALSE;
|
|
||||||
|
|
||||||
dixSetPrivate(&pScreen->devPrivates, &xwl_screen_private_key, xwl_screen);
|
|
||||||
xwl_screen->screen = pScreen;
|
|
||||||
@@ -1121,6 +1205,11 @@ xwl_screen_init(ScreenPtr pScreen, int a
|
|
||||||
xwl_screen->CloseScreen = pScreen->CloseScreen;
|
|
||||||
pScreen->CloseScreen = xwl_close_screen;
|
|
||||||
|
|
||||||
+ if (xwl_screen->rootless) {
|
|
||||||
+ xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap;
|
|
||||||
+ pScreen->SetWindowPixmap = xwl_set_window_pixmap;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
pScreen->CursorWarpedTo = xwl_cursor_warped_to;
|
|
||||||
pScreen->CursorConfinedTo = xwl_cursor_confined_to;
|
|
||||||
|
|
||||||
Index: xorg-server-1.20.5/hw/xwayland/xwayland.h
|
|
||||||
===================================================================
|
|
||||||
--- xorg-server-1.20.5.orig/hw/xwayland/xwayland.h
|
|
||||||
+++ xorg-server-1.20.5/hw/xwayland/xwayland.h
|
|
||||||
@@ -133,6 +133,7 @@ struct xwl_screen {
|
|
||||||
UnrealizeWindowProcPtr UnrealizeWindow;
|
|
||||||
DestroyWindowProcPtr DestroyWindow;
|
|
||||||
XYToWindowProcPtr XYToWindow;
|
|
||||||
+ SetWindowPixmapProcPtr SetWindowPixmap;
|
|
||||||
|
|
||||||
struct xorg_list output_list;
|
|
||||||
struct xorg_list seat_list;
|
|
||||||
@@ -178,7 +179,6 @@ struct xwl_window {
|
|
||||||
struct wl_surface *surface;
|
|
||||||
struct wl_shell_surface *shell_surface;
|
|
||||||
WindowPtr window;
|
|
||||||
- DamagePtr damage;
|
|
||||||
struct xorg_list link_damage;
|
|
||||||
struct wl_callback *frame_callback;
|
|
||||||
Bool allow_commits;
|
|
16
_service
Normal file
16
_service
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<services>
|
||||||
|
<service name="tar_scm" mode="disabled">
|
||||||
|
<param name="url">https://gitlab.freedesktop.org/xorg/xserver.git</param>
|
||||||
|
<param name="scm">git</param>
|
||||||
|
<param name="revision">c747dbb2</param>
|
||||||
|
<param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@</param>
|
||||||
|
<param name="versionrewrite-pattern">xorgserver(.*)</param>
|
||||||
|
<param name="changesgenerate">enable</param>
|
||||||
|
</service>
|
||||||
|
<service mode="disabled" name="tar" />
|
||||||
|
<service mode="disabled" name="recompress">
|
||||||
|
<param name="file">*.tar</param>
|
||||||
|
<param name="compression">xz</param>
|
||||||
|
</service>
|
||||||
|
<service mode="disabled" name="set_version" />
|
||||||
|
</services>
|
4
_servicedata
Normal file
4
_servicedata
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<servicedata>
|
||||||
|
<service name="tar_scm">
|
||||||
|
<param name="url">https://gitlab.freedesktop.org/xorg/xserver.git</param>
|
||||||
|
<param name="changesrevision">c747dbb250c11c6a02641b253e7322145dc9b913</param></service></servicedata>
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:a81d8243f37e75a03d4f8c55f96d0bc25802be6ec45c3bfa5cb614c6d01bac9d
|
|
||||||
size 6126757
|
|
@ -1,3 +1,44 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Sat Oct 12 18:53:52 UTC 2019 - Bjørn Lie <bjorn.lie@gmail.com>
|
||||||
|
|
||||||
|
- Update to version 1.20.5+22:
|
||||||
|
* miext/sync:
|
||||||
|
- Make struct _SyncObject::initialized fully ABI compatible
|
||||||
|
- Fix needless ABI change
|
||||||
|
* xf86: Disable unused crtc functions when a lease is revoked
|
||||||
|
* xwayland:
|
||||||
|
- Handle the case of windows being realized before redirection
|
||||||
|
- Refactor surface creation into a separate function
|
||||||
|
- Separate DamagePtr into separate window data
|
||||||
|
- Do not free a NULL GBM bo
|
||||||
|
- Expand the RANDR screen size limits
|
||||||
|
- Update screen pixmap on output resize
|
||||||
|
- Reset scheduled frames after hiding tablet cursor
|
||||||
|
- Check status in GBM pixmap creation
|
||||||
|
- Avoid a crash on pointer enter with a grab
|
||||||
|
* GLX:
|
||||||
|
- Fix previous context validation in xorgGlxMakeCurrent
|
||||||
|
- Set GlxServerExports::{major,minor}Version
|
||||||
|
- Add a function to change a clients vendor list
|
||||||
|
- Use the sending client for looking up XID's
|
||||||
|
- Add a per-client vendor mapping
|
||||||
|
* xsync: Add resource inside of SyncCreate, export SyncCreate
|
||||||
|
* dri2: Sync i965_pci_ids.h from mesa
|
||||||
|
* Xi: Use current device active grab to deliver touch events if
|
||||||
|
any
|
||||||
|
* Revert "present/scmd: Check that the flip and screen pixmap
|
||||||
|
pitches match"
|
||||||
|
* glamor: Make pixmap exportable from `gbm_bo_from_pixmap()`
|
||||||
|
- Drop patches fixed upstream:
|
||||||
|
* U_xwayland-Separate-DamagePtr-into-separate-window-data.patch
|
||||||
|
* 0001-xsync-Add-resource-inside-of-SyncCreate-export-SyncC.patch
|
||||||
|
* 0002-GLX-Add-a-per-client-vendor-mapping.patch
|
||||||
|
* 0003-GLX-Use-the-sending-client-for-looking-up-XID-s.patch
|
||||||
|
* 0004-GLX-Add-a-function-to-change-a-clients-vendor-list.patch
|
||||||
|
* 0005-GLX-Set-GlxServerExports-major-minor-Version.patch
|
||||||
|
- Switch to gitcheckout via source service, use the stable released
|
||||||
|
branch but set explicit commit used in _service.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Sat Sep 21 10:23:06 UTC 2019 - Stefan Dirsch <sndirsch@suse.com>
|
Sat Sep 21 10:23:06 UTC 2019 - Stefan Dirsch <sndirsch@suse.com>
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: xorg-x11-server
|
Name: xorg-x11-server
|
||||||
Version: 1.20.5
|
Version: 1.20.5+22
|
||||||
Release: 0
|
Release: 0
|
||||||
Url: http://xorg.freedesktop.org/
|
Url: http://xorg.freedesktop.org/
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
@ -55,7 +55,7 @@ Summary: X
|
|||||||
# Source URL: http://xorg.freedesktop.org/archive/individual/xserver/
|
# Source URL: http://xorg.freedesktop.org/archive/individual/xserver/
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: System/X11/Servers/XF86_4
|
Group: System/X11/Servers/XF86_4
|
||||||
Source0: xorg-server-%{version}.tar.bz2
|
Source0: xserver-%{version}.tar.xz
|
||||||
Source1: sysconfig.displaymanager.template
|
Source1: sysconfig.displaymanager.template
|
||||||
Source2: README.updates
|
Source2: README.updates
|
||||||
Source3: xorgcfg.tar.bz2
|
Source3: xorgcfg.tar.bz2
|
||||||
@ -249,17 +249,8 @@ Patch1502: U_dix-window-Use-ConfigureWindow-instead-of-MoveWindow.patch
|
|||||||
|
|
||||||
Patch1503: u_xfree86-Do-not-claim-pci-slots-if-fb-slot-is-already.patch
|
Patch1503: u_xfree86-Do-not-claim-pci-slots-if-fb-slot-is-already.patch
|
||||||
|
|
||||||
Patch1504: U_xwayland-Separate-DamagePtr-into-separate-window-data.patch
|
|
||||||
|
|
||||||
Patch1505: U_xwayland-Allow-passing-a-fd.patch
|
Patch1505: U_xwayland-Allow-passing-a-fd.patch
|
||||||
|
|
||||||
# required for NVIDIA's PRIME render offload support
|
|
||||||
Patch1601: 0001-xsync-Add-resource-inside-of-SyncCreate-export-SyncC.patch
|
|
||||||
Patch1602: 0002-GLX-Add-a-per-client-vendor-mapping.patch
|
|
||||||
Patch1603: 0003-GLX-Use-the-sending-client-for-looking-up-XID-s.patch
|
|
||||||
Patch1604: 0004-GLX-Add-a-function-to-change-a-clients-vendor-list.patch
|
|
||||||
Patch1605: 0005-GLX-Set-GlxServerExports-major-minor-Version.patch
|
|
||||||
|
|
||||||
%description
|
%description
|
||||||
This package contains the X.Org Server.
|
This package contains the X.Org Server.
|
||||||
|
|
||||||
@ -367,7 +358,7 @@ Group: Development/Sources
|
|||||||
This package contains patched sources of X.Org Server.
|
This package contains patched sources of X.Org Server.
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q -n xorg-server-%{version} -a3
|
%setup -q -n xserver-%{version} -a3
|
||||||
# Early verification if the ABI Defines are correct. Let's not waste build cycles if the Provides are wrong at the end.
|
# Early verification if the ABI Defines are correct. Let's not waste build cycles if the Provides are wrong at the end.
|
||||||
sh %{SOURCE92} --verify . %{SOURCE91}
|
sh %{SOURCE92} --verify . %{SOURCE91}
|
||||||
|
|
||||||
@ -384,25 +375,16 @@ sh %{SOURCE92} --verify . %{SOURCE91}
|
|||||||
#
|
#
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
#%patch101 -p1
|
#%patch101 -p1
|
||||||
|
|
||||||
%patch104 -p1
|
%patch104 -p1
|
||||||
|
|
||||||
%patch112 -p1
|
%patch112 -p1
|
||||||
|
|
||||||
%patch115 -p1
|
%patch115 -p1
|
||||||
|
|
||||||
%patch117 -p1
|
%patch117 -p1
|
||||||
|
|
||||||
%patch160 -p1
|
%patch160 -p1
|
||||||
|
|
||||||
%patch208 -p1
|
%patch208 -p1
|
||||||
%patch209 -p1
|
%patch209 -p1
|
||||||
|
|
||||||
### not applicable anymore
|
### not applicable anymore
|
||||||
#%patch210 -p1
|
#%patch210 -p1
|
||||||
|
|
||||||
%patch215 -p1
|
%patch215 -p1
|
||||||
|
|
||||||
%patch1000 -p1
|
%patch1000 -p1
|
||||||
|
|
||||||
### disabled for now
|
### disabled for now
|
||||||
@ -411,26 +393,12 @@ sh %{SOURCE92} --verify . %{SOURCE91}
|
|||||||
#%patch1211 -p1
|
#%patch1211 -p1
|
||||||
### patch222 might not be applicable anymore
|
### patch222 might not be applicable anymore
|
||||||
#%patch1222 -p1
|
#%patch1222 -p1
|
||||||
|
|
||||||
%patch1401 -p1
|
%patch1401 -p1
|
||||||
|
|
||||||
%patch1501 -p1
|
%patch1501 -p1
|
||||||
|
|
||||||
%patch1502 -p1
|
%patch1502 -p1
|
||||||
|
|
||||||
%patch1503 -p1
|
%patch1503 -p1
|
||||||
|
|
||||||
%patch1504 -p1
|
|
||||||
|
|
||||||
%patch1505 -p1
|
%patch1505 -p1
|
||||||
|
|
||||||
# required for NVIDIA's PRIME render offload support
|
|
||||||
%patch1601 -p1
|
|
||||||
%patch1602 -p1
|
|
||||||
%patch1603 -p1
|
|
||||||
%patch1604 -p1
|
|
||||||
%patch1605 -p1
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%define _lto_cflags %{nil}
|
%define _lto_cflags %{nil}
|
||||||
test -e source-file-list || \
|
test -e source-file-list || \
|
||||||
@ -442,7 +410,7 @@ autoreconf -fi
|
|||||||
export PCI_TXT_IDS_DIR=%{pci_ids_dir}
|
export PCI_TXT_IDS_DIR=%{pci_ids_dir}
|
||||||
%endif
|
%endif
|
||||||
%configure CFLAGS="%{optflags} -fno-strict-aliasing" \
|
%configure CFLAGS="%{optflags} -fno-strict-aliasing" \
|
||||||
--sysconfdir=/etc \
|
--sysconfdir=/etc \
|
||||||
--enable-xdmcp \
|
--enable-xdmcp \
|
||||||
--enable-xdm-auth-1 \
|
--enable-xdm-auth-1 \
|
||||||
--enable-dri \
|
--enable-dri \
|
||||||
@ -468,7 +436,7 @@ export PCI_TXT_IDS_DIR=%{pci_ids_dir}
|
|||||||
%else
|
%else
|
||||||
--enable-xorg \
|
--enable-xorg \
|
||||||
%if 0%{?suse_version} > 1120
|
%if 0%{?suse_version} > 1120
|
||||||
--enable-config-udev \
|
--enable-config-udev \
|
||||||
%endif
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?have_wayland} == 1
|
%if 0%{?have_wayland} == 1
|
||||||
@ -477,8 +445,8 @@ export PCI_TXT_IDS_DIR=%{pci_ids_dir}
|
|||||||
--disable-xwayland \
|
--disable-xwayland \
|
||||||
%endif
|
%endif
|
||||||
%if 0%{?build_suid_wrapper} == 1
|
%if 0%{?build_suid_wrapper} == 1
|
||||||
--enable-suid-wrapper \
|
--enable-suid-wrapper \
|
||||||
--libexecdir=%{suid_wrapper_dir} \
|
--libexecdir=%{suid_wrapper_dir} \
|
||||||
%endif
|
%endif
|
||||||
--with-log-dir="/var/log" \
|
--with-log-dir="/var/log" \
|
||||||
--with-os-name="openSUSE" \
|
--with-os-name="openSUSE" \
|
||||||
@ -486,7 +454,7 @@ export PCI_TXT_IDS_DIR=%{pci_ids_dir}
|
|||||||
--with-fontrootdir="/usr/share/fonts" \
|
--with-fontrootdir="/usr/share/fonts" \
|
||||||
--with-xkb-path="/usr/share/X11/xkb" \
|
--with-xkb-path="/usr/share/X11/xkb" \
|
||||||
--with-xkb-output="/var/lib/xkb/compiled" \
|
--with-xkb-output="/var/lib/xkb/compiled" \
|
||||||
--with-default-font-path="/usr/share/fonts/misc:unscaled,\
|
--with-default-font-path="/usr/share/fonts/misc:unscaled,\
|
||||||
/usr/share/fonts/Type1/,/usr/share/fonts/100dpi:unscaled,\
|
/usr/share/fonts/Type1/,/usr/share/fonts/100dpi:unscaled,\
|
||||||
%if 0%{?suse_version} > 1210
|
%if 0%{?suse_version} > 1210
|
||||||
/usr/share/fonts/75dpi:unscaled,/usr/share/fonts/ghostscript/,\
|
/usr/share/fonts/75dpi:unscaled,/usr/share/fonts/ghostscript/,\
|
||||||
|
3
xserver-1.20.5+22.tar.xz
Normal file
3
xserver-1.20.5+22.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:a0133add65eb6de98d994f2236356e252075b74a5ec1ae6e6f77010710f76b45
|
||||||
|
size 3108040
|
5
xserver.obsinfo
Normal file
5
xserver.obsinfo
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
name: xserver
|
||||||
|
version: 1.20.5+22
|
||||||
|
mtime: 1569515205
|
||||||
|
commit: c747dbb250c11c6a02641b253e7322145dc9b913
|
||||||
|
|
Loading…
Reference in New Issue
Block a user