[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xorg-server: Changes to 'upstream-unstable'



 Xext/Makefile.am                                 |    7 
 Xext/vidmode.c                                   | 2151 +++++++++++++++++++++++
 Xext/xvmain.c                                    |   11 
 Xext/xvmc.c                                      |   17 
 autogen.sh                                       |    3 
 configure.ac                                     |   29 
 dix/dixutils.c                                   |   22 
 dix/window.c                                     |   32 
 dri3/dri3_request.c                              |    4 
 glamor/Makefile.am                               |    6 
 glamor/glamor.c                                  |   16 
 glamor/glamor.h                                  |    4 
 glamor/glamor_composite_glyphs.c                 |   14 
 glamor/glamor_copy.c                             |   15 
 glamor/glamor_core.c                             |   22 
 glamor/glamor_dash.c                             |    6 
 glamor/glamor_egl.c                              |  189 +-
 glamor/glamor_egl_stubs.c                        |    6 
 glamor/glamor_fbo.c                              |   43 
 glamor/glamor_glyphblt.c                         |   12 
 glamor/glamor_gradient.c                         |   33 
 glamor/glamor_lines.c                            |    6 
 glamor/glamor_picture.c                          |   49 
 glamor/glamor_points.c                           |    7 
 glamor/glamor_priv.h                             |   50 
 glamor/glamor_program.c                          |   49 
 glamor/glamor_program.h                          |    1 
 glamor/glamor_rects.c                            |    7 
 glamor/glamor_render.c                           |  424 ++--
 glamor/glamor_segs.c                             |    6 
 glamor/glamor_spans.c                            |   23 
 glamor/glamor_text.c                             |    8 
 glamor/glamor_transfer.c                         |   18 
 glamor/glamor_transform.c                        |   23 
 glamor/glamor_transform.h                        |   15 
 glamor/glamor_utils.h                            |   52 
 glamor/glamor_vbo.c                              |    9 
 glamor/glamor_xv.c                               |  224 +-
 glx/extension_string.c                           |    2 
 glx/extension_string.h                           |    2 
 glx/glxcmds.c                                    |   59 
 glx/glxdri2.c                                    |    6 
 glx/glxdriswrast.c                               |    1 
 hw/dmx/glxProxy/glxcmds.c                        |    5 
 hw/kdrive/ephyr/ephyr_glamor_glx.c               |  122 +
 hw/kdrive/linux/evdev.c                          |   11 
 hw/kdrive/src/kdrive.c                           |    4 
 hw/vfb/InitOutput.c                              |    4 
 hw/xfree86/Makefile.am                           |    4 
 hw/xfree86/common/Makefile.am                    |    5 
 hw/xfree86/common/vidmodeproc.h                  |   83 
 hw/xfree86/common/xf86Config.c                   |    8 
 hw/xfree86/common/xf86Extensions.c               |    3 
 hw/xfree86/common/xf86Helper.c                   |    4 
 hw/xfree86/common/xf86Init.c                     |    1 
 hw/xfree86/common/xf86Privstr.h                  |   10 
 hw/xfree86/common/xf86VidMode.c                  |  582 ++----
 hw/xfree86/common/xf86str.h                      |   92 
 hw/xfree86/common/xf86vmode.c                    | 1955 --------------------
 hw/xfree86/dri/dri.c                             |    8 
 hw/xfree86/dri2/dri2.c                           |  130 -
 hw/xfree86/dri2/pci_ids/Makefile.am              |    1 
 hw/xfree86/dri2/pci_ids/pci_id_driver_map.h      |    7 
 hw/xfree86/dri2/pci_ids/virtio_gpu_pci_ids.h     |    2 
 hw/xfree86/drivers/modesetting/dri2.c            |    4 
 hw/xfree86/drivers/modesetting/drmmode_display.c |    1 
 hw/xfree86/modes/xf86Crtc.c                      |    6 
 hw/xfree86/modes/xf86Cursors.c                   |   21 
 hw/xfree86/modes/xf86RandR12.c                   |    4 
 hw/xfree86/ramdac/xf86Cursor.c                   |   24 
 hw/xfree86/ramdac/xf86Cursor.h                   |    1 
 hw/xquartz/darwinEvents.c                        |    2 
 hw/xquartz/quartz.c                              |    4 
 hw/xquartz/quartz.h                              |    2 
 hw/xwayland/Makefile.am                          |    9 
 hw/xwayland/xwayland-glamor-xv.c                 |  412 ++++
 hw/xwayland/xwayland-glamor.c                    |   29 
 hw/xwayland/xwayland-input.c                     |   10 
 hw/xwayland/xwayland-output.c                    |   10 
 hw/xwayland/xwayland-shm.c                       |   12 
 hw/xwayland/xwayland-vidmode.c                   |  408 ++++
 hw/xwayland/xwayland.c                           |   15 
 hw/xwayland/xwayland.h                           |   10 
 hw/xwin/winauth.c                                |   17 
 hw/xwin/winclipboard/internal.h                  |    8 
 hw/xwin/winclipboard/thread.c                    |    9 
 hw/xwin/winclipboard/wndproc.c                   |  109 -
 hw/xwin/winconfig.c                              |   74 
 hw/xwin/winlayouts.h                             |    5 
 hw/xwin/winmultiwindowclass.h                    |   28 
 hw/xwin/winmultiwindowwindow.c                   |   30 
 hw/xwin/winmultiwindowwm.c                       |    7 
 hw/xwin/winrandr.c                               |   96 -
 include/Makefile.am                              |    2 
 include/displaymode.h                            |  102 +
 include/dix-config.h.in                          |    3 
 include/dix.h                                    |    8 
 include/vidmodestr.h                             |  142 +
 include/window.h                                 |    8 
 os/osdep.h                                       |    6 
 present/present.c                                |  122 -
 randr/rrmonitor.c                                |   15 
 randr/rroutput.c                                 |   12 
 record/record.c                                  |    1 
 render/picture.c                                 |    3 
 test/Makefile.am                                 |    2 
 xfixes/cursor.c                                  |    4 
 107 files changed, 4958 insertions(+), 3563 deletions(-)

New commits:
commit 93d4224ccf3dee5a51815a66f76c905450419b50
Author: Adam Jackson <ajax@redhat.com>
Date:   Fri Mar 11 16:38:52 2016 -0500

    xserver 1.18.2
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>

diff --git a/configure.ac b/configure.ac
index 750fc58..612fff4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,9 +26,9 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.60)
-AC_INIT([xorg-server], 1.18.1, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2016-02-08"
-RELEASE_NAME="Spanakopita"
+AC_INIT([xorg-server], 1.18.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2016-03-11"
+RELEASE_NAME="Saganaki"
 AC_CONFIG_SRCDIR([Makefile.am])
 AC_CONFIG_MACRO_DIR([m4])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])

commit d88f8ffeb7ec0304d793388be5b65a293505bc3b
Author: Adam Jackson <ajax@redhat.com>
Date:   Fri Mar 11 13:50:32 2016 -0500

    vidmode: Remove stray vidmodeproc.h from EXTRA_DIST
    
    Was removed from the tree in:
    
        commit f175cf45aebcdda53f3ae49c0eaf27da1f194e92
        Author: Olivier Fourdan <ofourdan@redhat.com>
        Date:   Wed Feb 10 09:34:34 2016 +0100
    
            vidmode: move to a separate library of its own
    
    but not removed from the Makefile, which broke 'make dist'.
    
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    (cherry picked from commit 744c292ae49dd1f9d33b860d2b4f0ae27023809b)

diff --git a/hw/xfree86/common/Makefile.am b/hw/xfree86/common/Makefile.am
index 2eed5de..caae7fd 100644
--- a/hw/xfree86/common/Makefile.am
+++ b/hw/xfree86/common/Makefile.am
@@ -67,7 +67,6 @@ CLEANFILES = $(BUILT_SOURCES)
 EXTRA_DIST = \
 	compiler.h \
 	fourcc.h \
-	vidmodeproc.h \
 	xf86.h \
 	xf86Bus.h \
 	xf86Config.h \

commit 643359fb03c51244c9ed5f5efab4c84594259e8c
Author: Dave Airlie <airlied@gmail.com>
Date:   Tue Feb 9 16:54:22 2016 +1000

    present: fail flipping if we have any slave outputs
    
    Due to the way present currently works, we don't ever check with the
    secondary adapters if we can flip at all.
    
    We shouldn't flip if the secondary adapters are attached to the pixmap
    currently, however using the current check_flip callback isn't possible
    as it passes the Window to the driver (something we shouldn't be doing),
    so the slave driver can never get it's own screen ptr back.
    
    For now to fix the problem just block flips if we have any slaves
    configured. We can fix the ABI up later, but this fix can be backported
    to stable.
    
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Reviewed-by: Keith Packard <keithp@keithp.com>
    (cherry picked from commit 47bc7fcaa567b0d9e2627b4a21b112e96f81725b)

diff --git a/present/present.c b/present/present.c
index 1ce16af..55f6aa7 100644
--- a/present/present.c
+++ b/present/present.c
@@ -144,6 +144,10 @@ present_check_flip(RRCrtcPtr    crtc,
     if (!screen_priv->info->flip)
         return FALSE;
 
+    /* Fail to flip if we have slave outputs */
+    if (!xorg_list_is_empty(&screen->output_slave_list))
+        return FALSE;
+
     /* Make sure the window hasn't been redirected with Composite */
     window_pixmap = screen->GetWindowPixmap(window);
     if (window_pixmap != screen->GetScreenPixmap(screen) &&

commit 3e480c6f5168e7da1521bdcc15ed8b5b8762612d
Author: Adam Jackson <ajax@redhat.com>
Date:   Thu Jan 21 12:47:57 2016 -0500

    glx: Implement GLX_EXT_fbconfig_packed_float
    
    The tokens for this are already defined by GLX_ARB_fbconfig_float, which
    we already support, so just add the extension to the list and let the
    driver provide those configs if it wants.
    
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    (cherry picked from commit ef3005da3d5dc92b3ee5a0ee78164e739a3216dc)

diff --git a/glx/extension_string.c b/glx/extension_string.c
index c3ddc4c..616c793 100644
--- a/glx/extension_string.c
+++ b/glx/extension_string.c
@@ -82,6 +82,7 @@ static const struct extension_info known_glx_extensions[] = {
 
     { GLX(EXT_create_context_es_profile), VER(0,0), N, },
     { GLX(EXT_create_context_es2_profile), VER(0,0), N, },
+    { GLX(EXT_fbconfig_packed_float),   VER(0,0), N, },
     { GLX(EXT_framebuffer_sRGB),        VER(0,0), N, },
     { GLX(EXT_import_context),          VER(0,0), Y, },
     { GLX(EXT_stereo_tree),             VER(0,0), N, },
diff --git a/glx/extension_string.h b/glx/extension_string.h
index c1df91b..425a805 100644
--- a/glx/extension_string.h
+++ b/glx/extension_string.h
@@ -45,6 +45,7 @@ enum {
     ARB_multisample_bit,
     EXT_create_context_es_profile_bit,
     EXT_create_context_es2_profile_bit,
+    EXT_fbconfig_packed_float_bit,
     EXT_import_context_bit,
     EXT_stereo_tree_bit,
     EXT_texture_from_pixmap_bit,
diff --git a/glx/glxdri2.c b/glx/glxdri2.c
index 89ad808..58e60b9 100644
--- a/glx/glxdri2.c
+++ b/glx/glxdri2.c
@@ -895,6 +895,12 @@ initializeExtensions(__GLXDRIscreen * screen)
         LogMessage(X_INFO, "AIGLX: enabled GLX_ARB_fbconfig_float\n");
     }
 
+    /* enable EXT_fbconfig_packed_float (even if there are no packed float fbconfigs) */
+    {
+        __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_fbconfig_packed_float");
+        LogMessage(X_INFO, "AIGLX: enabled GLX_EXT_fbconfig_packed_float\n");
+    }
+
     for (i = 0; extensions[i]; i++) {
         if (strcmp(extensions[i]->name, __DRI_READ_DRAWABLE) == 0) {
             __glXEnableExtension(screen->glx_enable_bits,
diff --git a/glx/glxdriswrast.c b/glx/glxdriswrast.c
index be00f5f..924067c 100644
--- a/glx/glxdriswrast.c
+++ b/glx/glxdriswrast.c
@@ -413,6 +413,7 @@ initializeExtensions(__GLXDRIscreen * screen)
     /* these are harmless to enable unconditionally */
     __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_framebuffer_sRGB");
     __glXEnableExtension(screen->glx_enable_bits, "GLX_ARB_fbconfig_float");
+    __glXEnableExtension(screen->glx_enable_bits, "GLX_EXT_fbconfig_packed_float");
     __glXEnableExtension(screen->glx_enable_bits, "GLX_SGI_make_current_read");
 
     extensions = screen->core->getExtensions(screen->driScreen);

commit b9f7edda0634955711870bb1389095525d4496e3
Author: Adam Jackson <ajax@redhat.com>
Date:   Mon May 18 13:00:02 2015 -0400

    glx: Implement GLX_EXT_stereo_tree
    
    This is correct as it is, but only because we know no DRI drivers
    implement stereo.
    
    v2: Use new ATTRIB macro
    
    Reviewed-by: James Jones <jajones@nvidia.com>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    (cherry picked from commit d15cb654b6ba365dac9a62064e277adebde2fdab)

diff --git a/glx/extension_string.c b/glx/extension_string.c
index cf90146..c3ddc4c 100644
--- a/glx/extension_string.c
+++ b/glx/extension_string.c
@@ -84,6 +84,7 @@ static const struct extension_info known_glx_extensions[] = {
     { GLX(EXT_create_context_es2_profile), VER(0,0), N, },
     { GLX(EXT_framebuffer_sRGB),        VER(0,0), N, },
     { GLX(EXT_import_context),          VER(0,0), Y, },
+    { GLX(EXT_stereo_tree),             VER(0,0), N, },
     { GLX(EXT_texture_from_pixmap),     VER(0,0), Y, },
     { GLX(EXT_visual_info),             VER(0,0), Y, },
     { GLX(EXT_visual_rating),           VER(0,0), Y, },
diff --git a/glx/extension_string.h b/glx/extension_string.h
index ffaab07..c1df91b 100644
--- a/glx/extension_string.h
+++ b/glx/extension_string.h
@@ -46,6 +46,7 @@ enum {
     EXT_create_context_es_profile_bit,
     EXT_create_context_es2_profile_bit,
     EXT_import_context_bit,
+    EXT_stereo_tree_bit,
     EXT_texture_from_pixmap_bit,
     EXT_visual_info_bit,
     EXT_visual_rating_bit,
diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 139432e..561faeb 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1921,6 +1921,11 @@ __glXDisp_CopySubBufferMESA(__GLXclientState * cl, GLbyte * pc)
     return Success;
 }
 
+/* hack for old glxext.h */
+#ifndef GLX_STEREO_TREE_EXT
+#define GLX_STEREO_TREE_EXT                 0x20F5
+#endif
+
 /*
 ** Get drawable attributes
 */
@@ -1931,7 +1936,7 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId)
     xGLXGetDrawableAttributesReply reply;
     __GLXdrawable *pGlxDraw = NULL;
     DrawablePtr pDraw;
-    CARD32 attributes[16];
+    CARD32 attributes[18];
     int num = 0, error;
 
     if (!validGlxDrawable(client, drawId, GLX_DRAWABLE_ANY,
@@ -1964,6 +1969,9 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId)
         if (pGlxDraw->type == GLX_DRAWABLE_PBUFFER) {
             ATTRIB(GLX_PRESERVED_CONTENTS, GL_TRUE);
         }
+        if (pGlxDraw->type == GLX_DRAWABLE_WINDOW) {
+            ATTRIB(GLX_STEREO_TREE_EXT, 0);
+        }
     }
 #undef ATTRIB
 

commit 2b3363418a425bf432b55927d8f8dd93c004c791
Author: Adam Jackson <ajax@redhat.com>
Date:   Thu Mar 3 16:50:02 2016 -0500

    glx: Add GLX_SCREEN to the GetDrawableAttributes response
    
    libglvnd would like to use this to map from drawable to screen, so it
    can know which driver to dispatch to. Refer to the spec proposal here:
    
    https://lists.freedesktop.org/archives/mesa-dev/2016-March/109543.html
    
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    (cherry picked from commit a18238877bbf9aab95843d849a6f434275e9cd6c)

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index d8a144f..139432e 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1931,7 +1931,7 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId)
     xGLXGetDrawableAttributesReply reply;
     __GLXdrawable *pGlxDraw = NULL;
     DrawablePtr pDraw;
-    CARD32 attributes[14];
+    CARD32 attributes[16];
     int num = 0, error;
 
     if (!validGlxDrawable(client, drawId, GLX_DRAWABLE_ANY,
@@ -1954,6 +1954,7 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId)
     ATTRIB(GLX_Y_INVERTED_EXT, GL_FALSE);
     ATTRIB(GLX_WIDTH, pDraw->width);
     ATTRIB(GLX_HEIGHT, pDraw->height);
+    ATTRIB(GLX_SCREEN, pDraw->pScreen->myNum);
     if (pGlxDraw) {
         ATTRIB(GLX_TEXTURE_TARGET_EXT,
                pGlxDraw->target == GL_TEXTURE_2D ?

commit 2541d765fdd1006d649063882e3a667438f1d30e
Author: Adam Jackson <ajax@redhat.com>
Date:   Thu Mar 10 12:29:34 2016 -0500

    glx: Macroize building the attribute list in DoGetDrawableAttributes
    
    No functional change, just a little easier to read and harder to get
    wrong.
    
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    (cherry picked from commit 47c1d6b7abcfb1c6b478367bbc2e869c91485bc0)

diff --git a/glx/glxcmds.c b/glx/glxcmds.c
index 6eb3541..d8a144f 100644
--- a/glx/glxcmds.c
+++ b/glx/glxcmds.c
@@ -1945,33 +1945,26 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId)
     if (pGlxDraw)
         pDraw = pGlxDraw->pDraw;
 
-    attributes[2*num] = GLX_Y_INVERTED_EXT;
-    attributes[2*num+1] = GL_FALSE;
-    num++;
-    attributes[2*num] = GLX_WIDTH;
-    attributes[2*num+1] = pDraw->width;
-    num++;
-    attributes[2*num] = GLX_HEIGHT;
-    attributes[2*num+1] = pDraw->height;
-    num++;
+#define ATTRIB(a, v) do { \
+    attributes[2*num] = (a); \
+    attributes[2*num+1] = (v); \
+    num++; \
+    } while (0)
+
+    ATTRIB(GLX_Y_INVERTED_EXT, GL_FALSE);
+    ATTRIB(GLX_WIDTH, pDraw->width);
+    ATTRIB(GLX_HEIGHT, pDraw->height);
     if (pGlxDraw) {
-        attributes[2*num] = GLX_TEXTURE_TARGET_EXT;
-        attributes[2*num+1] = pGlxDraw->target == GL_TEXTURE_2D ?
-            GLX_TEXTURE_2D_EXT :
-            GLX_TEXTURE_RECTANGLE_EXT;
-        num++;
-        attributes[2*num] = GLX_EVENT_MASK;
-        attributes[2*num+1] = pGlxDraw->eventMask;
-        num++;
-        attributes[2*num] = GLX_FBCONFIG_ID;
-        attributes[2*num+1] = pGlxDraw->config->fbconfigID;
-        num++;
+        ATTRIB(GLX_TEXTURE_TARGET_EXT,
+               pGlxDraw->target == GL_TEXTURE_2D ?
+                GLX_TEXTURE_2D_EXT : GLX_TEXTURE_RECTANGLE_EXT);
+        ATTRIB(GLX_EVENT_MASK, pGlxDraw->eventMask);
+        ATTRIB(GLX_FBCONFIG_ID, pGlxDraw->config->fbconfigID);
         if (pGlxDraw->type == GLX_DRAWABLE_PBUFFER) {
-            attributes[2*num] = GLX_PRESERVED_CONTENTS;
-            attributes[2*num+1] = GL_TRUE;
-            num++;
+            ATTRIB(GLX_PRESERVED_CONTENTS, GL_TRUE);
         }
     }
+#undef ATTRIB
 
     reply = (xGLXGetDrawableAttributesReply) {
         .type = X_Reply,

commit 2a7b6ea1a54a4c8174669c1ca38c4665505c4637
Author: Eric Anholt <eric@anholt.net>
Date:   Mon Feb 1 13:58:15 2016 -0800

    ephyr: Fix redisplay with glamor on GLES.
    
    glamor_transfer.c is still totally broken, though.
    
    Reviewed-by: Adam Jackson <ajax@redhat.com>
    Signed-off-by: Eric Anholt <eric@anholt.net>
    (cherry picked from commit c01094c5312fbd84146dd83122e5256a8e57d092)

diff --git a/hw/kdrive/ephyr/ephyr_glamor_glx.c b/hw/kdrive/ephyr/ephyr_glamor_glx.c
index 636150d..2f21914 100644
--- a/hw/kdrive/ephyr/ephyr_glamor_glx.c
+++ b/hw/kdrive/ephyr/ephyr_glamor_glx.c
@@ -225,8 +225,10 @@ ephyr_glamor_damage_redisplay(struct ephyr_glamor *glamor,
     if (glamor->vao) {
         glGetIntegerv(GL_VERTEX_ARRAY_BINDING, &old_vao);
         glBindVertexArray(glamor->vao);
-    } else
+    } else {
+        glBindBuffer(GL_ARRAY_BUFFER, glamor->vbo);
         ephyr_glamor_set_vertices(glamor);
+    }
 
     glBindFramebuffer(GL_FRAMEBUFFER, 0);
     glUseProgram(glamor->texture_shader);

commit 5af20f15636aa2ede3dac1af9e9afa063564130c
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Wed Mar 9 16:45:18 2016 +0100

    glamor: do not build Xv support when --disable-xv
    
    Reviewed-by: Adam Jackson <ajax@redhat.com>
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    (cherry picked from commit 25ce263fd88684be9370025f93ba3a2bfc72ff1a)

diff --git a/glamor/Makefile.am b/glamor/Makefile.am
index c488029..c631c53 100644
--- a/glamor/Makefile.am
+++ b/glamor/Makefile.am
@@ -46,10 +46,14 @@ libglamor_la_SOURCES = \
 	glamor_compositerects.c\
 	glamor_utils.c\
 	glamor_utils.h\
-	glamor_xv.c \
 	glamor_sync.c \
 	glamor.h
 
+if XV
+libglamor_la_SOURCES += \
+	glamor_xv.c
+endif
+
 libglamor_egl_stubs_la_SOURCES = glamor_egl_stubs.c
 
 sdk_HEADERS = glamor.h

commit 9fc05b85e544638ccc4b811c19e64312b387c799
Author: Olivier Fourdan <ofourdan@redhat.com>
Date:   Wed Mar 9 16:21:18 2016 +0100

    xwayland: add glamor Xv adaptor
    
    This adds an Xv adaptor using glamor.
    
    Reviewed-by: Adam Jackson <ajax@redhat.com>
    Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
    (cherry picked from commit da7724d3d277c6c8a814881785b716896802629a)

diff --git a/hw/xwayland/Makefile.am b/hw/xwayland/Makefile.am
index 0905082..0e6a1ea 100644
--- a/hw/xwayland/Makefile.am
+++ b/hw/xwayland/Makefile.am
@@ -32,7 +32,12 @@ Xwayland_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG)
 
 
 if GLAMOR_EGL
-Xwayland_SOURCES += xwayland-glamor.c
+Xwayland_SOURCES += 				\
+	xwayland-glamor.c
+if XV
+Xwayland_SOURCES += 				\
+	xwayland-glamor-xv.c
+endif
 
 nodist_Xwayland_SOURCES =			\
 	drm-client-protocol.h			\
diff --git a/hw/xwayland/xwayland-glamor-xv.c b/hw/xwayland/xwayland-glamor-xv.c
new file mode 100644
index 0000000..c99418d
--- /dev/null
+++ b/hw/xwayland/xwayland-glamor-xv.c
@@ -0,0 +1,412 @@
+/*
+ * Copyright (c) 1998-2003 by The XFree86 Project, Inc.
+ * Copyright © 2013 Red Hat
+ * Copyright © 2014 Intel Corporation
+ * Copyright © 2016 Red Hat
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Authors:
+ *      Olivier Fourdan <ofourdan@redhat.com>
+ *
+ * Derived from the glamor_xf86_xv, ephyr_glamor_xv and xf86xv
+ * implementations
+ */
+
+#include "xwayland.h"
+#include "glamor_priv.h"
+
+#include <X11/extensions/Xv.h>
+
+#define NUM_FORMATS    3
+#define NUM_PORTS      16
+#define ADAPTOR_NAME   "glamor textured video"
+#define ENCODER_NAME   "XV_IMAGE"
+
+static DevPrivateKeyRec xwlXvScreenPrivateKeyRec;
+#define xwlXvScreenPrivateKey (&xwlXvScreenPrivateKeyRec)
+
+typedef struct {
+    XvAdaptorPtr glxv_adaptor; /* We have only one adaptor, glamor Xv */
+    glamor_port_private *port_privates;
+
+    CloseScreenProcPtr CloseScreen;
+} xwlXvScreenRec, *xwlXvScreenPtr;
+
+typedef struct {
+    char depth;
+    short class;
+} xwlVideoFormatRec, *xwlVideoFormatPtr;
+
+static xwlVideoFormatRec Formats[NUM_FORMATS] = {
+    {15, TrueColor},
+    {16, TrueColor},
+    {24, TrueColor}
+};
+
+static int
+xwl_glamor_xv_stop_video(XvPortPtr   pPort,
+                         DrawablePtr pDraw)
+{
+    glamor_port_private *gpp = (glamor_port_private *) (pPort->devPriv.ptr);
+
+    if (pDraw->type != DRAWABLE_WINDOW)
+        return BadAlloc;
+
+    glamor_xv_stop_video(gpp);
+
+    return Success;
+}
+
+static int
+xwl_glamor_xv_set_port_attribute(XvPortPtr pPort,
+                                 Atom      attribute,
+                                 INT32     value)
+{
+    glamor_port_private *gpp = (glamor_port_private *) (pPort->devPriv.ptr);
+
+    return glamor_xv_set_port_attribute(gpp, attribute, value);
+}
+
+static int
+xwl_glamor_xv_get_port_attribute(XvPortPtr pPort,
+                                 Atom      attribute,
+                                 INT32    *pValue)
+{
+    glamor_port_private *gpp = (glamor_port_private *) (pPort->devPriv.ptr);
+
+    return glamor_xv_get_port_attribute(gpp, attribute, pValue);
+}
+
+static int
+xwl_glamor_xv_query_best_size(XvPortPtr     pPort,
+                              CARD8         motion,
+                              CARD16        vid_w,
+                              CARD16        vid_h,
+                              CARD16        drw_w,
+                              CARD16        drw_h,
+                              unsigned int *p_w,
+                              unsigned int *p_h)
+{
+    *p_w = drw_w;
+    *p_h = drw_h;
+
+    return Success;
+}
+
+static int
+xwl_glamor_xv_query_image_attributes(XvPortPtr  pPort,
+                                     XvImagePtr format,
+                                     CARD16    *width,
+                                     CARD16    *height,
+                                     int       *pitches,
+                                     int       *offsets)
+{
+    return glamor_xv_query_image_attributes(format->id,
+                                            width,
+                                            height,
+                                            pitches,
+                                            offsets);
+}
+
+static int
+xwl_glamor_xv_put_image(DrawablePtr    pDrawable,
+                        XvPortPtr      pPort,
+                        GCPtr          pGC,
+                        INT16          src_x,
+                        INT16          src_y,
+                        CARD16         src_w,
+                        CARD16         src_h,
+                        INT16          drw_x,
+                        INT16          drw_y,
+                        CARD16         drw_w,
+                        CARD16         drw_h,
+                        XvImagePtr     format,
+                        unsigned char *data,
+                        Bool           sync,
+                        CARD16         width,
+                        CARD16         height)
+{
+    glamor_port_private *gpp = (glamor_port_private *) (pPort->devPriv.ptr);
+
+    RegionRec WinRegion;
+    RegionRec ClipRegion;
+    BoxRec WinBox;
+    int ret = Success;
+
+    if (pDrawable->type != DRAWABLE_WINDOW)
+        return BadWindow;
+
+    WinBox.x1 = pDrawable->x + drw_x;
+    WinBox.y1 = pDrawable->y + drw_y;
+    WinBox.x2 = WinBox.x1 + drw_w;
+    WinBox.y2 = WinBox.y1 + drw_h;
+
+    RegionInit(&WinRegion, &WinBox, 1);
+    RegionInit(&ClipRegion, NullBox, 1);
+    RegionIntersect(&ClipRegion, &WinRegion, pGC->pCompositeClip);
+
+    if (RegionNotEmpty(&ClipRegion))
+        ret = glamor_xv_put_image(gpp,
+                                  pDrawable,
+                                  src_x,
+                                  src_y,
+                                  pDrawable->x + drw_x,
+                                  pDrawable->y + drw_y,
+                                  src_w,
+                                  src_h,
+                                  drw_w,
+                                  drw_h,
+                                  format->id,
+                                  data,
+                                  width,
+                                  height,
+                                  sync,
+                                  &ClipRegion);
+
+     RegionUninit(&WinRegion);
+     RegionUninit(&ClipRegion);
+
+     return ret;
+
+}
+
+static Bool
+xwl_glamor_xv_add_formats(XvAdaptorPtr pa)
+{
+    ScreenPtr pScreen;
+    XvFormatPtr pFormat, pf;
+    VisualPtr pVisual;
+    int numFormat;
+    int totFormat;
+    int numVisuals;
+    int i;
+
+    totFormat = NUM_FORMATS;
+    pFormat = xnfcalloc(totFormat, sizeof(XvFormatRec));
+    pScreen = pa->pScreen;
+    for (pf = pFormat, i = 0, numFormat = 0; i < NUM_FORMATS; i++) {
+        numVisuals = pScreen->numVisuals;
+        pVisual = pScreen->visuals;
+
+        while (numVisuals--) {
+           if ((pVisual->class == Formats[i].class) &&
+               (pVisual->nplanes == Formats[i].depth)) {
+                    if (numFormat >= totFormat) {
+                        void *moreSpace;
+
+                        totFormat *= 2;
+                        moreSpace = XNFreallocarray(pFormat, totFormat,
+                                                    sizeof(XvFormatRec));
+                        pFormat = moreSpace;
+                        pf = pFormat + numFormat;
+                    }
+
+                    pf->visual = pVisual->vid;
+                    pf->depth = Formats[i].depth;
+
+                    pf++;
+                    numFormat++;
+                }
+            pVisual++;
+        }
+    }
+    pa->nFormats = numFormat;
+    pa->pFormats = pFormat;
+
+    return numFormat != 0;
+}
+
+static Bool
+xwl_glamor_xv_add_ports(XvAdaptorPtr pa)
+{
+    XvPortPtr pPorts, pp;
+    xwlXvScreenPtr xwlXvScreen;
+    unsigned long PortResource = 0;
+    int nPorts;
+    int i;
+
+    pPorts = xnfcalloc(NUM_PORTS, sizeof(XvPortRec));
+    xwlXvScreen = dixLookupPrivate(&(pa->pScreen)->devPrivates,
+                                   xwlXvScreenPrivateKey);
+    xwlXvScreen->port_privates = xnfcalloc(NUM_PORTS,
+                                           sizeof(glamor_port_private));
+
+    PortResource = XvGetRTPort();
+    for (pp = pPorts, i = 0, nPorts = 0; i < NUM_PORTS; i++) {
+        if (!(pp->id = FakeClientID(0)))
+            continue;
+
+        pp->pAdaptor = pa;
+
+        glamor_xv_init_port(&xwlXvScreen->port_privates[i]);
+        pp->devPriv.ptr = &xwlXvScreen->port_privates[i];
+
+        if (AddResource(pp->id, PortResource, pp)) {
+            pp++;
+            nPorts++;
+        }
+    }
+
+    pa->base_id = pPorts->id;
+    pa->nPorts = nPorts;
+    pa->pPorts = pPorts;
+
+    return nPorts != 0;
+}
+
+static void
+xwl_glamor_xv_add_attributes(XvAdaptorPtr pa)
+{
+    int i;
+
+    pa->pAttributes = xnfcalloc(glamor_xv_num_attributes, sizeof(XvAttributeRec));
+    memcpy(pa->pAttributes, glamor_xv_attributes,
+           glamor_xv_num_attributes * sizeof(XvAttributeRec));
+
+    for (i = 0; i < glamor_xv_num_attributes; i++)
+        pa->pAttributes[i].name = strdup(glamor_xv_attributes[i].name);
+
+    pa->nAttributes = glamor_xv_num_attributes;
+}
+
+static void
+xwl_glamor_xv_add_images(XvAdaptorPtr pa)
+{
+    pa->pImages = xnfcalloc(glamor_xv_num_images, sizeof(XvImageRec));
+    memcpy(pa->pImages, glamor_xv_images, glamor_xv_num_images * sizeof(XvImageRec));
+
+    pa->nImages = glamor_xv_num_images;
+}
+
+static void
+xwl_glamor_xv_add_encodings(XvAdaptorPtr pa)
+{
+    XvEncodingPtr pe;
+    GLint texsize;
+
+    glGetIntegerv(GL_MAX_TEXTURE_SIZE, &texsize);
+
+    pe = xnfcalloc(1, sizeof(XvEncodingRec));
+    pe->id = 0;
+    pe->pScreen = pa->pScreen;
+    pe->name = strdup(ENCODER_NAME);
+    pe->width = texsize;
+    pe->height = texsize;
+    pe->rate.numerator = 1;
+    pe->rate.denominator = 1;
+
+    pa->pEncodings = pe;
+    pa->nEncodings = 1;
+}
+
+static Bool
+xwl_glamor_xv_add_adaptors(ScreenPtr pScreen)
+{
+    DevPrivateKey XvScreenKey;
+    XvScreenPtr XvScreen;
+    xwlXvScreenPtr xwlXvScreen;
+    XvAdaptorPtr pa;
+
+    if (XvScreenInit(pScreen) != Success)
+        return FALSE;
+
+    XvScreenKey = XvGetScreenKey();
+    XvScreen = dixLookupPrivate(&(pScreen)->devPrivates, XvScreenKey);
+
+    XvScreen->nAdaptors = 0;
+    XvScreen->pAdaptors = NULL;
+
+    pa = xnfcalloc(1, sizeof(XvAdaptorRec));
+    pa->pScreen = pScreen;
+    pa->type = (unsigned int) (XvWindowMask | XvInputMask | XvImageMask);
+    pa->ddStopVideo = xwl_glamor_xv_stop_video;
+    pa->ddPutImage = xwl_glamor_xv_put_image;
+    pa->ddSetPortAttribute = xwl_glamor_xv_set_port_attribute;
+    pa->ddGetPortAttribute = xwl_glamor_xv_get_port_attribute;
+    pa->ddQueryBestSize = xwl_glamor_xv_query_best_size;
+    pa->ddQueryImageAttributes = xwl_glamor_xv_query_image_attributes;
+    pa->name = strdup(ADAPTOR_NAME);
+
+    xwl_glamor_xv_add_encodings(pa);
+    xwl_glamor_xv_add_images(pa);
+    xwl_glamor_xv_add_attributes(pa);
+    if (!xwl_glamor_xv_add_formats(pa))
+        goto failed;
+    if (!xwl_glamor_xv_add_ports(pa))
+        goto failed;
+
+    /* We're good now with out Xv adaptor */
+    XvScreen->nAdaptors = 1;
+    XvScreen->pAdaptors = pa;
+
+    xwlXvScreen = dixLookupPrivate(&(pa->pScreen)->devPrivates,
+                                   xwlXvScreenPrivateKey);
+    xwlXvScreen->glxv_adaptor = pa;
+
+    return TRUE;
+
+failed:
+    XvFreeAdaptor(pa);
+    free(pa);
+
+    return FALSE;
+}
+
+static Bool
+xwl_glamor_xv_close_screen(ScreenPtr pScreen)
+{
+    xwlXvScreenPtr xwlXvScreen;
+
+    xwlXvScreen = dixLookupPrivate(&(pScreen)->devPrivates,
+                                   xwlXvScreenPrivateKey);
+
+    if (xwlXvScreen->glxv_adaptor) {
+        XvFreeAdaptor(xwlXvScreen->glxv_adaptor);
+        free(xwlXvScreen->glxv_adaptor);
+    }
+    free(xwlXvScreen->port_privates);
+
+    pScreen->CloseScreen = xwlXvScreen->CloseScreen;
+
+    return pScreen->CloseScreen(pScreen);
+}
+
+Bool
+xwl_glamor_xv_init(ScreenPtr pScreen)
+{
+    xwlXvScreenPtr xwlXvScreen;
+
+    if (!dixRegisterPrivateKey(xwlXvScreenPrivateKey, PRIVATE_SCREEN,
+                               sizeof(xwlXvScreenRec)))
+        return FALSE;
+
+    xwlXvScreen = dixLookupPrivate(&(pScreen)->devPrivates,
+                                    xwlXvScreenPrivateKey);
+
+    xwlXvScreen->port_privates = NULL;
+    xwlXvScreen->glxv_adaptor = NULL;
+    xwlXvScreen->CloseScreen = pScreen->CloseScreen;
+    pScreen->CloseScreen = xwl_glamor_xv_close_screen;
+
+    glamor_xv_core_init(pScreen);
+
+    return xwl_glamor_xv_add_adaptors(pScreen);
+}
diff --git a/hw/xwayland/xwayland-glamor.c b/hw/xwayland/xwayland-glamor.c
index 40f22a3..04aa8f2 100644
--- a/hw/xwayland/xwayland-glamor.c
+++ b/hw/xwayland/xwayland-glamor.c
@@ -574,5 +574,10 @@ xwl_glamor_init(struct xwl_screen *xwl_screen)
     screen->CreatePixmap = xwl_glamor_create_pixmap;
     screen->DestroyPixmap = xwl_glamor_destroy_pixmap;
 
+#ifdef XV
+    if (!xwl_glamor_xv_init(screen))
+        ErrorF("Failed to initialize glamor Xv extension\n");
+#endif
+
     return TRUE;
 }
diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
index 4b150ed..67b30cb 100644
--- a/hw/xwayland/xwayland.h
+++ b/hw/xwayland/xwayland.h
@@ -190,6 +190,11 @@ Bool xwl_screen_init_glamor(struct xwl_screen *xwl_screen,
                          uint32_t id, uint32_t version);
 struct wl_buffer *xwl_glamor_pixmap_get_wl_buffer(PixmapPtr pixmap);
 
+#ifdef XV
+/* glamor Xv Adaptor */
+Bool xwl_glamor_xv_init(ScreenPtr pScreen);
+#endif
+
 #ifdef XF86VIDMODE
 void xwlVidModeExtensionInit(void);
 #endif

commit 1aa9a2be313c51a78af9bceea865dcf069e9cebe
Author: Michel Dänzer <michel.daenzer@amd.com>
Date:   Mon Dec 21 17:54:08 2015 +0900

    modesetting: Allow CRTC transforms to actually take effect


Reply to: