Hello community,

here is the log from the commit of package xorg-x11-server for openSUSE:Factory 
checked in at 2018-10-22 11:06:18
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/xorg-x11-server (Old)
 and      /work/SRC/openSUSE:Factory/.xorg-x11-server.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "xorg-x11-server"

Mon Oct 22 11:06:18 2018 rev:362 rq:642109 version:1.20.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/xorg-x11-server/xorg-x11-server.changes  
2018-08-20 16:17:38.732672381 +0200
+++ /work/SRC/openSUSE:Factory/.xorg-x11-server.new/xorg-x11-server.changes     
2018-10-22 11:06:43.712102447 +0200
@@ -1,0 +2,14 @@
+Mon Oct 15 18:03:28 UTC 2018 - Tobias Klausmann 
<[email protected]>
+
+- Update to version 1.20.2:
+  Lots of bugfixes all over the map especially for modesetting,
+  glamor and xwayland!
+
+-------------------------------------------------------------------
+Wed Aug 15 11:24:17 UTC 2018 - [email protected]
+
+- Update n_xserver-optimus-autoconfig-hack.patch to v5.
+  * Fixes provider auto-configuration with nvidia proprietary
+    driver. (bsc#1103816)
+
+-------------------------------------------------------------------

Old:
----
  xorg-server-1.20.1.tar.bz2

New:
----
  xorg-server-1.20.2.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xorg-x11-server.spec ++++++
--- /var/tmp/diff_new_pack.b0Ac8x/_old  2018-10-22 11:06:45.916100602 +0200
+++ /var/tmp/diff_new_pack.b0Ac8x/_new  2018-10-22 11:06:45.916100602 +0200
@@ -12,7 +12,7 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
@@ -46,7 +46,7 @@
 %endif
 
 Name:           xorg-x11-server
-Version:        1.20.1
+Version:        1.20.2
 Release:        0
 Url:            http://xorg.freedesktop.org/
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build

++++++ n_xserver-optimus-autoconfig-hack.patch ++++++
--- /var/tmp/diff_new_pack.b0Ac8x/_old  2018-10-22 11:06:46.040100499 +0200
+++ /var/tmp/diff_new_pack.b0Ac8x/_new  2018-10-22 11:06:46.044100496 +0200
@@ -1,7 +1,7 @@
 From 3216e0c618cc330f053ed36a749c8d8cfeb87a2f Mon Sep 17 00:00:00 2001
 From: Dave Airlie <[email protected]>
 Date: Fri, 17 Aug 2012 09:49:24 +1000
-Subject: [PATCH] autobind GPUs to the screen, (v3)
+Subject: [PATCH] autobind GPUs to the screen, (v5)
 
 this is racy and really not what we want for hotplug going forward,
 but until DE support is in GNOME its probably for the best.
@@ -13,6 +13,12 @@
     compatibility fix for 5c7af02b10
       -- Michal Srb <[email protected]>
 
+v5: Do not use xf86CrtcConfig, it is not filled by nvidia proprietary driver,
+    only use randr structures.
+    Auto configure outputs of additional GPUs on start, just like the outputs
+    of the main GPU are configured.
+      -- Michal Srb <[email protected]>
+
 DO NOT UPSTREAM.
 
 Signed-off-by: Dave Airlie <[email protected]>
@@ -22,28 +28,273 @@
  hw/xfree86/modes/xf86Crtc.c         | 32 ++++++++++++++++++++++++++++++++
  3 files changed, 47 insertions(+)
 
-Index: xorg-server-1.19.6/hw/xfree86/common/xf86Init.c
-===================================================================
---- xorg-server-1.19.6.orig/hw/xfree86/common/xf86Init.c
-+++ xorg-server-1.19.6/hw/xfree86/common/xf86Init.c
-@@ -297,6 +297,16 @@ xf86PrivsElevated(void)
-     return PrivsElevated();
+diff --git a/dix/main.c b/dix/main.c
+index 273f30330..b85c81034 100644
+--- a/dix/main.c
++++ b/dix/main.c
+@@ -122,6 +122,8 @@ extern void Dispatch(void);
+ 
+ CallbackListPtr RootWindowFinalizeCallback = NULL;
+ 
++CallbackListPtr RootWindowInitialized = NULL;
++
+ int
+ dix_main(int argc, char *argv[], char *envp[])
+ {
+@@ -244,6 +246,8 @@ dix_main(int argc, char *argv[], char *envp[])
+         for (i = 0; i < screenInfo.numScreens; i++)
+             InitRootWindow(screenInfo.screens[i]->root);
+ 
++        CallCallbacks(&RootWindowInitialized, NULL);
++
+         InitCoreDevices();
+         InitInput(argc, argv);
+         InitAndStartDevices();
+diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
+index cc34a1952..766888b3e 100644
+--- a/hw/xfree86/common/xf86Init.c
++++ b/hw/xfree86/common/xf86Init.c
+@@ -73,6 +73,7 @@
+ #include "xf86DDC.h"
+ #include "xf86Xinput.h"
+ #include "xf86InPriv.h"
++#include "xf86Crtc.h"
+ #include "picturestr.h"
+ #include "randrstr.h"
+ #include "glxvndabi.h"
+@@ -264,6 +265,231 @@ AddVTAtoms(CallbackListPtr *pcbl, void *data, void 
*screen)
+                    "Failed to register VT properties\n");
  }
  
-+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr 
master);                              
++/*
++ * This function activates all outputs of all GPU screens associated with the
++ * given master screen and sets them to their preferred resolution next to
++ * each other left-to-right.
++ */
++static void
++xf86AutoConfigureProviderOutputsForMaster(ScreenPtr pMasterScreen)
++{
++    ScreenPtr pScreen;
++    rrScrPrivPtr pMasterScrPriv, pScrPriv;
++    RROutputPtr pOutput;
++    RRCrtcPtr pCrtc;
++    RRCrtcPtr *pUsedCrtcs;
++    int usedCrtcsCount;
++    int screenWidth, screenHeight, screenWidthMM, screenHeightMM;
++    int i, j, k, l;
++
++    struct OutputConfig {
++        RROutputPtr pOutput;
++        RRCrtcPtr pCrtc;
++
++        int x;
++        int y;
++    } *outputConfigs;
++    int outputConfigsCount = 0, outputConfigsUsed = 0;
++
++    pMasterScrPriv = rrGetScrPriv(pMasterScreen);
++    if (!pMasterScrPriv)
++        return;
++
++    // Count the potential maximum of outputs that we will try to auto 
configure
++    for (i = 0; i < xf86NumGPUScreens; i++) {
++        pScreen = xf86GPUScreens[i]->pScreen;
++        if (pScreen->current_master != pMasterScreen || 
!pScreen->is_output_slave)
++            continue;
++
++        pScrPriv = rrGetScrPriv(pScreen);
++        if (!pScrPriv)
++            continue;
++
++        outputConfigsCount += pScrPriv->numOutputs;
++    }
++
++    if (outputConfigsCount == 0)
++        return;
++
++    outputConfigs = calloc(outputConfigsCount, sizeof(*outputConfigs));
++
++    screenWidth = 0;
++    screenHeight = 0;
++
++    // Consider the master's own outputs/crtcs that were already configured
++    for (i = 0; i < pMasterScrPriv->numCrtcs; i++) {
++        if (!pMasterScrPriv->crtcs[i]->mode)
++            continue;
++
++        screenWidth = max(screenWidth, pMasterScrPriv->crtcs[i]->x + 
pMasterScrPriv->crtcs[i]->mode->mode.width);
++        screenHeight = max(screenHeight, pMasterScrPriv->crtcs[i]->y + 
pMasterScrPriv->crtcs[i]->mode->mode.height);
++    }
++
++    // Now add as many outputs from slave GPUs as we can next to it
++    for (i = 0; i < xf86NumGPUScreens; i++) {
++        pScreen = xf86GPUScreens[i]->pScreen;
++        if (pScreen->current_master != pMasterScreen || 
!pScreen->is_output_slave)
++            continue;
++
++        pScrPriv = rrGetScrPriv(pScreen);
++        if (!pScrPriv)
++            continue;
++
++        pUsedCrtcs = calloc(pScrPriv->numCrtcs, sizeof(*pUsedCrtcs));
++        if (!pUsedCrtcs)
++            continue;
++
++        usedCrtcsCount = 0;
++
++        for (j = 0; j < pScrPriv->numOutputs; j++) {
++            pOutput = pScrPriv->outputs[j];
++
++            if (pOutput->connection != RR_Connected ||
++                pOutput->nonDesktop ||
++                pOutput->numModes == 0 ||
++                pOutput->numCrtcs == 0)
++                continue;
++
++            if (screenWidth + pOutput->modes[0]->mode.width > 
pMasterScrPriv->maxWidth ||
++                screenHeight + pOutput->modes[0]->mode.height > 
pMasterScrPriv->maxHeight)
++            {
++                // It can't fit into the maximal size, skip
++                continue;
++            }
++
++            for (k = 0; k < pOutput->numCrtcs; k++) {
++                pCrtc = pOutput->crtcs[k];
++                for (l = 0; l < usedCrtcsCount; l++) {
++                    if (pCrtc == pUsedCrtcs[l]) {
++                        pCrtc = NULL;
++                        break;
++                    }
++                }
++                if (pCrtc) {
++                    break;
++                }
++            }
++
++            if (!pCrtc) {
++                // No more free CRTCs to setup this output, skip
++                continue;
++            }
++
++            pUsedCrtcs[usedCrtcsCount] = pCrtc;
++            usedCrtcsCount++;
++
++            assert(outputConfigsUsed < outputConfigsCount);
++            outputConfigs[outputConfigsUsed].pOutput = pOutput;
++            outputConfigs[outputConfigsUsed].pCrtc = pCrtc;
++            outputConfigs[outputConfigsUsed].x = screenWidth;
++            outputConfigs[outputConfigsUsed].y = 0;
++            outputConfigsUsed++;
++
++            screenWidth += pOutput->modes[0]->mode.width;
++            screenHeight += pOutput->modes[0]->mode.height;
++        }
++
++        free(pUsedCrtcs);
++    }
++
++    if (outputConfigsUsed == 0)
++      goto out;
++
++    if (screenWidth < pMasterScrPriv->minWidth)
++        screenWidth = pMasterScrPriv->minWidth;
++    if (screenHeight < pMasterScrPriv->minHeight)
++        screenHeight = pMasterScrPriv->minHeight;
++
++    if (pMasterScrPriv->mmWidth > 0 &&
++        pMasterScrPriv->mmHeight > 0 &&
++        pMasterScrPriv->width > 0 &&
++        pMasterScrPriv->height > 0)
++    {
++      // If the master screen already has some DPI, keep it
++      screenWidthMM = pMasterScrPriv->mmWidth * screenWidth / 
pMasterScreen->width;
++      screenHeightMM = pMasterScrPriv->mmHeight * screenHeight / 
pMasterScreen->height;
++    } else {
++      assert(outputConfigsUsed > 0);
++      // Otherwise use DPI of the first output
++      screenWidthMM = outputConfigs[0].pOutput->mmWidth * screenWidth / 
outputConfigs[0].pOutput->modes[0]->mode.width;
++      screenHeightMM = outputConfigs[0].pOutput->mmHeight * screenHeight / 
outputConfigs[0].pOutput->modes[0]->mode.height;
++    }
++
++    if (!RRScreenSizeSet(pMasterScreen, screenWidth, screenHeight, 
screenWidthMM, screenHeightMM))
++        goto out;
++
++    for (i = 0; i < outputConfigsUsed; i++) {
++        RRCrtcSet(
++            outputConfigs[i].pCrtc,
++            outputConfigs[i].pOutput->modes[0],
++            outputConfigs[i].x,
++            outputConfigs[i].y,
++            RR_Rotate_0,
++            1,
++            &outputConfigs[i].pOutput
++        );
++    }
++
++out:
++    free(outputConfigs);
++}
++
++static void
++xf86AutoConfigProviderOutputs(CallbackListPtr *pcbl, void *data, void 
*call_data)
++{
++    int i;
++
++    for (i = 0; i < xf86NumScreens; i++) {
++        xf86AutoConfigureProviderOutputsForMaster(xf86Screens[i]->pScreen);
++    }
++}
++
++void
++xf86AutoConfigOutputDevice(ScreenPtr slave, ScreenPtr master)
++{
++    RRProviderPtr master_provider;
++    RRProviderPtr slave_provider;
++    rrScrPrivPtr master_rp;
++    rrScrPrivPtr slave_rp;
++
++    master_rp = rrGetScrPriv(master);
++    slave_rp = rrGetScrPriv(slave);
++
++    if (!master_rp || !slave_rp)
++        return;
++
++    master_provider = master_rp->provider;
++    slave_provider = slave_rp->provider;
++
++    if (!master_provider || !slave_provider)
++        return;
++
++    if ((master_provider->capabilities & RR_Capability_SinkOffload) &&
++        (slave_provider->capabilities & RR_Capability_SourceOffload)) {
++        /* source offload */
++        AttachOffloadGPU(master, slave);
++        slave_provider->offload_sink = master_provider;
++    }
++    if ((master_provider->capabilities & RR_Capability_SourceOutput) &&
++        (slave_provider->capabilities & RR_Capability_SinkOutput)) {
++        /* sink offload */
++        AttachOutputGPU(master, slave);
++        slave_provider->output_source = master_provider;
++    }
++}
++
 +static void
 +xf86AutoConfigOutputDevices(void)
 +{
 +    int i;
 +
-+    for (i = 0; i < xf86NumGPUScreens; i++)
-+        xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
++    for (i = 0; i < xf86NumGPUScreens; i++) {
++        xf86AutoConfigOutputDevice(xf86GPUScreens[i]->pScreen, 
xf86Screens[0]->pScreen);
++    }
++
++    AddCallback(&RootWindowInitialized, xf86AutoConfigProviderOutputs, NULL);
 +}
 +
- static void
- TrapSignals(void)
+ static Bool
+ xf86ScreenInit(ScreenPtr pScreen, int argc, char **argv)
  {
-@@ -872,6 +882,8 @@ InitOutput(ScreenInfo * pScreenInfo, int
+@@ -703,6 +929,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv)
      for (i = 0; i < xf86NumGPUScreens; i++)
          AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
  
@@ -52,58 +303,37 @@
      xf86VGAarbiterWrapFunctions();
      if (sigio_blocked)
          input_unlock();
-Index: xorg-server-1.19.6/hw/xfree86/common/xf86platformBus.c
-===================================================================
---- xorg-server-1.19.6.orig/hw/xfree86/common/xf86platformBus.c
-+++ xorg-server-1.19.6/hw/xfree86/common/xf86platformBus.c
-@@ -489,6 +489,8 @@ xf86platformProbeDev(DriverPtr drvp)
+diff --git a/hw/xfree86/common/xf86platformBus.c 
b/hw/xfree86/common/xf86platformBus.c
+index cef47da03..395ce9400 100644
+--- a/hw/xfree86/common/xf86platformBus.c
++++ b/hw/xfree86/common/xf86platformBus.c
+@@ -594,6 +594,8 @@ xf86platformAddGPUDevices(DriverPtr drvp)
      return foundScreen;
  }
  
-+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master);
++extern void xf86AutoConfigOutputDevice(ScreenPtr slave, ScreenPtr master);
 +
  int
  xf86platformAddDevice(int index)
  {
-@@ -560,6 +562,7 @@ xf86platformAddDevice(int index)
+@@ -665,6 +667,7 @@ xf86platformAddDevice(int index)
     }
     /* attach unbound to 0 protocol screen */
     AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
-+   xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
++   xf86AutoConfigOutputDevice(xf86GPUScreens[i]->pScreen, 
xf86Screens[0]->pScreen);
  
     RRResourcesChanged(xf86Screens[0]->pScreen);
     RRTellChanged(xf86Screens[0]->pScreen);
-Index: xorg-server-1.19.6/hw/xfree86/modes/xf86Crtc.c
-===================================================================
---- xorg-server-1.19.6.orig/hw/xfree86/modes/xf86Crtc.c
-+++ xorg-server-1.19.6/hw/xfree86/modes/xf86Crtc.c
-@@ -3462,3 +3462,29 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn)
-             crtc->x = crtc->y = 0;
-         }
- }
-+
-+
-+void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
-+{
-+    RRProviderPtr master_provider;
-+    xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(master);
-+    xf86CrtcConfigPtr slave_config = XF86_CRTC_CONFIG_PTR(pScrn);
-+
-+    if (!config || !slave_config)
-+        return;
-+
-+    master_provider = config->randr_provider;
+diff --git a/include/dix.h b/include/dix.h
+index 476559842..7372ba0d5 100644
+--- a/include/dix.h
++++ b/include/dix.h
+@@ -597,6 +597,8 @@ typedef struct {
+ 
+ extern _X_EXPORT CallbackListPtr RootWindowFinalizeCallback;
+ 
++extern _X_EXPORT CallbackListPtr RootWindowInitialized;
 +
-+    if ((master->capabilities & RR_Capability_SinkOffload) &&
-+        pScrn->capabilities & RR_Capability_SourceOffload) {
-+        /* source offload */
-+        AttachOffloadGPU(master->pScreen, pScrn->pScreen);
-+        slave_config->randr_provider->offload_sink = master_provider;
-+    }
-+    if ((master->capabilities & RR_Capability_SourceOutput) &&
-+               pScrn->capabilities & RR_Capability_SinkOutput) {
-+        /* sink offload */
-+        AttachOutputGPU(master->pScreen, pScrn->pScreen);
-+        slave_config->randr_provider->output_source = master_provider;
-+    }
-+}
+ extern int
+ XItoCoreType(int xi_type);
+ extern Bool

++++++ xorg-server-1.20.1.tar.bz2 -> xorg-server-1.20.2.tar.bz2 ++++++
++++ 6801 lines of diff (skipped)


Reply via email to