diff --git a/0001-xsync-Add-resource-inside-of-SyncCreate-export-SyncC.patch b/0001-xsync-Add-resource-inside-of-SyncCreate-export-SyncC.patch deleted file mode 100644 index f4174ff..0000000 --- a/0001-xsync-Add-resource-inside-of-SyncCreate-export-SyncC.patch +++ /dev/null @@ -1,242 +0,0 @@ -From 7f962c70b6d9c346477f23f6c15211e749110078 Mon Sep 17 00:00:00 2001 -From: Alex Goins -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 -Reviewed-by: James Jones -Signed-off-by: Aaron Plattner ---- - 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 - diff --git a/0002-GLX-Add-a-per-client-vendor-mapping.patch b/0002-GLX-Add-a-per-client-vendor-mapping.patch deleted file mode 100644 index abfad15..0000000 --- a/0002-GLX-Add-a-per-client-vendor-mapping.patch +++ /dev/null @@ -1,91 +0,0 @@ -From 37a36a6b5b887d5c5a17a6931ceba8ad5d1bb6d5 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -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 -Reviewed-by: Aaron Plattner -Reviewed-by: Adam Jackson ---- - 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; ivendors[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 - diff --git a/0003-GLX-Use-the-sending-client-for-looking-up-XID-s.patch b/0003-GLX-Use-the-sending-client-for-looking-up-XID-s.patch deleted file mode 100644 index b99e5e5..0000000 --- a/0003-GLX-Use-the-sending-client-for-looking-up-XID-s.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 8b67ec7cc6fda243480a5a8ca118b66242f3eb2c Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -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 -Reviewed-by: Aaron Plattner -Reviewed-by: Adam Jackson ---- - 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 - diff --git a/0004-GLX-Add-a-function-to-change-a-clients-vendor-list.patch b/0004-GLX-Add-a-function-to-change-a-clients-vendor-list.patch deleted file mode 100644 index 4bc5c10..0000000 --- a/0004-GLX-Add-a-function-to-change-a-clients-vendor-list.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 56c0a71fdd94a008e5d746261f70a713c4767f93 Mon Sep 17 00:00:00 2001 -From: Kyle Brenneman -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 -Reviewed-by: Aaron Plattner -Reviewed-by: Adam Jackson ---- - 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 - diff --git a/0005-GLX-Set-GlxServerExports-major-minor-Version.patch b/0005-GLX-Set-GlxServerExports-major-minor-Version.patch deleted file mode 100644 index 273963f..0000000 --- a/0005-GLX-Set-GlxServerExports-major-minor-Version.patch +++ /dev/null @@ -1,34 +0,0 @@ -From b4231d69028adc8123801a7552b40a15ea928d1b Mon Sep 17 00:00:00 2001 -From: Aaron Plattner -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 ---- - 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 - diff --git a/U_xwayland-Separate-DamagePtr-into-separate-window-data.patch b/U_xwayland-Separate-DamagePtr-into-separate-window-data.patch deleted file mode 100644 index 041b542..0000000 --- a/U_xwayland-Separate-DamagePtr-into-separate-window-data.patch +++ /dev/null @@ -1,307 +0,0 @@ -From 4e50440ae20c537d6a4edf356cda67dd33d4e5a8 Mon Sep 17 00:00:00 2001 -From: Carlos Garnacho -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 ---- - 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; diff --git a/_service b/_service new file mode 100644 index 0000000..18c9029 --- /dev/null +++ b/_service @@ -0,0 +1,15 @@ + + + https://gitlab.freedesktop.org/xorg/xserver.git + git + b6ee04e7 + @PARENT_TAG@+@TAG_OFFSET@ + xorgserver(.*) + enable + + + *.tar + xz + + + diff --git a/_servicedata b/_servicedata new file mode 100644 index 0000000..f6d0567 --- /dev/null +++ b/_servicedata @@ -0,0 +1,4 @@ + + + https://gitlab.freedesktop.org/xorg/xserver.git + b6ee04e774af1fc2e2560583c95dfac688494c2a \ No newline at end of file diff --git a/xorg-server-1.20.5.tar.bz2 b/xorg-server-1.20.5.tar.bz2 deleted file mode 100644 index 7111d83..0000000 --- a/xorg-server-1.20.5.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a81d8243f37e75a03d4f8c55f96d0bc25802be6ec45c3bfa5cb614c6d01bac9d -size 6126757 diff --git a/xorg-x11-server.changes b/xorg-x11-server.changes index f107991..86449c8 100644 --- a/xorg-x11-server.changes +++ b/xorg-x11-server.changes @@ -1,3 +1,51 @@ +------------------------------------------------------------------- +Tue Oct 22 06:54:42 UTC 2019 - bjorn.lie@gmail.com + +- Update to version 1.20.5+24: + * Fix crash on XkbSetMap +- Drop unneeded obsinfo file and tweak _service. + +------------------------------------------------------------------- +Sat Oct 12 18:53:52 UTC 2019 - Bjørn Lie + +- 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 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 088b166..291e584 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -46,7 +46,7 @@ %endif Name: xorg-x11-server -Version: 1.20.5 +Version: 1.20.5+24 Release: 0 Url: http://xorg.freedesktop.org/ BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -55,7 +55,7 @@ Summary: X # Source URL: http://xorg.freedesktop.org/archive/individual/xserver/ License: MIT Group: System/X11/Servers/XF86_4 -Source0: xorg-server-%{version}.tar.bz2 +Source0: xserver-%{version}.tar.xz Source1: sysconfig.displaymanager.template Source2: README.updates 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 -Patch1504: U_xwayland-Separate-DamagePtr-into-separate-window-data.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 This package contains the X.Org Server. @@ -367,7 +358,7 @@ Group: Development/Sources This package contains patched sources of X.Org Server. %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. sh %{SOURCE92} --verify . %{SOURCE91} @@ -384,25 +375,16 @@ sh %{SOURCE92} --verify . %{SOURCE91} # %patch100 -p1 #%patch101 -p1 - %patch104 -p1 - %patch112 -p1 - %patch115 -p1 - %patch117 -p1 - %patch160 -p1 - %patch208 -p1 %patch209 -p1 - ### not applicable anymore #%patch210 -p1 - %patch215 -p1 - %patch1000 -p1 ### disabled for now @@ -411,26 +393,12 @@ sh %{SOURCE92} --verify . %{SOURCE91} #%patch1211 -p1 ### patch222 might not be applicable anymore #%patch1222 -p1 - %patch1401 -p1 - %patch1501 -p1 - %patch1502 -p1 - %patch1503 -p1 - -%patch1504 -p1 - %patch1505 -p1 -# required for NVIDIA's PRIME render offload support -%patch1601 -p1 -%patch1602 -p1 -%patch1603 -p1 -%patch1604 -p1 -%patch1605 -p1 - %build %define _lto_cflags %{nil} test -e source-file-list || \ @@ -442,7 +410,7 @@ autoreconf -fi export PCI_TXT_IDS_DIR=%{pci_ids_dir} %endif %configure CFLAGS="%{optflags} -fno-strict-aliasing" \ - --sysconfdir=/etc \ + --sysconfdir=/etc \ --enable-xdmcp \ --enable-xdm-auth-1 \ --enable-dri \ @@ -468,7 +436,7 @@ export PCI_TXT_IDS_DIR=%{pci_ids_dir} %else --enable-xorg \ %if 0%{?suse_version} > 1120 - --enable-config-udev \ + --enable-config-udev \ %endif %endif %if 0%{?have_wayland} == 1 @@ -477,8 +445,8 @@ export PCI_TXT_IDS_DIR=%{pci_ids_dir} --disable-xwayland \ %endif %if 0%{?build_suid_wrapper} == 1 - --enable-suid-wrapper \ - --libexecdir=%{suid_wrapper_dir} \ + --enable-suid-wrapper \ + --libexecdir=%{suid_wrapper_dir} \ %endif --with-log-dir="/var/log" \ --with-os-name="openSUSE" \ @@ -486,7 +454,7 @@ export PCI_TXT_IDS_DIR=%{pci_ids_dir} --with-fontrootdir="/usr/share/fonts" \ --with-xkb-path="/usr/share/X11/xkb" \ --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,\ %if 0%{?suse_version} > 1210 /usr/share/fonts/75dpi:unscaled,/usr/share/fonts/ghostscript/,\ diff --git a/xserver-1.20.5+24.tar.xz b/xserver-1.20.5+24.tar.xz new file mode 100644 index 0000000..e27be03 --- /dev/null +++ b/xserver-1.20.5+24.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ea9fb153b1761e5c869e2601f45e2a9a9f5cf07065be48c75f44c8acaa94f7e9 +size 3108096