[openchrome-devel] xf86-video-openchrome: 7 commits - configure.ac src/via_driver.c src/via_driver.h src/via_exa.c src/via_exa_h2.c src/via_exa_h6.c src/via_memmgr.c src/via_memmgr.h

Kevin Brace kevinbrace at kemper.freedesktop.org
Mon Mar 23 22:17:25 UTC 2020


 configure.ac     |    2 -
 src/via_driver.c |   11 +++++++--
 src/via_driver.h |    6 +++++
 src/via_exa.c    |   62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/via_exa_h2.c |   36 -------------------------------
 src/via_exa_h6.c |   36 -------------------------------
 src/via_memmgr.c |   42 ++++++++++---------------------------
 src/via_memmgr.h |    4 +--
 8 files changed, 91 insertions(+), 108 deletions(-)

New commits:
commit a68c8319a22dc4fd79061c811001db92a1215a11
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:30:16 2020 -0700

    Version bumped to 0.6.220
    
    Fixed an issue with allocated memory alignment for UMS no acceleration
    and non-DRI1 EXA acceleration situations.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/configure.ac b/configure.ac
index db1b147..ad1c6e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -23,7 +23,7 @@
 # Initialize Autoconf
 AC_PREREQ([2.60])
 AC_INIT([xf86-video-openchrome],
-        [0.6.219],
+        [0.6.220],
         [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg&component=Driver/openchrome],
         [xf86-video-openchrome])
 
commit cfe95227ca07ffc3666dbcf26104d4c0402819fe
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:29:44 2020 -0700

    Align cursor storage to the cursor storage's size
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_driver.c b/src/via_driver.c
index 41359b9..d0adba5 100644
--- a/src/via_driver.c
+++ b/src/via_driver.c
@@ -1418,6 +1418,7 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
     ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
     VIAPtr pVia = VIAPTR(pScrn);
     unsigned int bppSize, alignedPitch;
+    unsigned long alignment;
 
     pScrn->displayWidth = pScrn->virtualX;
 
@@ -1536,11 +1537,13 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
             flags |= HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_1;
             size = 32;
             cursorSize = ((size * size) >> 3) * 2;
+            alignment = cursorSize;
             break;
         default:
             flags |= (HARDWARE_CURSOR_SOURCE_MASK_INTERLEAVE_64 | HARDWARE_CURSOR_ARGB);
             size = 64;
             cursorSize = (size * size) << 2;
+            alignment = cursorSize;
             break;
         }
 
@@ -1548,8 +1551,12 @@ VIAScreenInit(SCREEN_INIT_ARGS_DECL)
             xf86CrtcPtr crtc = xf86_config->crtc[i];
             drmmode_crtc_private_ptr iga = crtc->driver_private;
 
-            /* Set cursor location in frame buffer. */
-            iga->cursor_bo = drm_bo_alloc(pScrn, cursorSize, 16, TTM_PL_FLAG_VRAM);
+            /*
+             * Set cursor location in frame buffer.
+             */
+            iga->cursor_bo = drm_bo_alloc(pScrn,
+                                            cursorSize, alignment,
+                                            TTM_PL_FLAG_VRAM);
         }
 
         if (!xf86_cursors_init(pScreen, size, size, flags)) {
commit 79c9bc269be65361af08a85753f4c07502b16b1c
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:28:13 2020 -0700

    Move duplicated EXA related code into via_exa.c
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_driver.h b/src/via_driver.h
index 086c3d3..011ede7 100644
--- a/src/via_driver.h
+++ b/src/via_driver.h
@@ -365,6 +365,8 @@ int viaEXAOffscreenAlloc(ScrnInfoPtr pScrn,
                             struct buffer_object *obj,
                             unsigned long size,
                             unsigned long alignment);
+Bool viaIsAGP(VIAPtr pVia, PixmapPtr pPix, unsigned long *offset);
+Bool viaExaIsOffscreen(PixmapPtr pPix);
 Bool viaInitExa(ScreenPtr pScreen);
 Bool viaAccelSetMode(int bpp, ViaTwodContext * tdc);
 void viaSetClippingRectangle(ScrnInfoPtr pScrn,
diff --git a/src/via_exa.c b/src/via_exa.c
index 7ef69d6..d2c5762 100644
--- a/src/via_exa.c
+++ b/src/via_exa.c
@@ -814,6 +814,42 @@ exit:
     return ret;
 }
 
+Bool
+viaIsAGP(VIAPtr pVia, PixmapPtr pPix, unsigned long *offset)
+{
+#ifdef HAVE_DRI
+    unsigned long offs;
+
+    if (pVia->directRenderingType && !pVia->IsPCI) {
+        offs = ((unsigned long)pPix->devPrivate.ptr
+                - (unsigned long)pVia->agpMappedAddr);
+
+        if ((offs - pVia->scratchOffset) < pVia->agpSize) {
+            *offset = offs + pVia->agpAddr;
+            return TRUE;
+        }
+    }
+#endif
+    return FALSE;
+}
+
+Bool
+viaExaIsOffscreen(PixmapPtr pPix)
+{
+    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
+    VIAPtr pVia = VIAPTR(pScrn);
+    uint8_t* addr_size;
+    uint8_t* front_bo;
+    Bool ret;
+
+    front_bo = drm_bo_map(pScrn, pVia->drmmode.front_bo);
+    addr_size = (uint8_t*)pPix->devPrivate.ptr -
+                                            (unsigned long)front_bo;
+    ret = (addr_size < (uint8_t*)pVia->drmmode.front_bo->size) ?
+                                                        TRUE : FALSE;
+    return ret;
+}
+
 Bool
 viaInitExa(ScreenPtr pScreen)
 {
diff --git a/src/via_exa_h2.c b/src/via_exa_h2.c
index b1a3270..05f0d46 100644
--- a/src/via_exa_h2.c
+++ b/src/via_exa_h2.c
@@ -337,42 +337,6 @@ viaExaCheckComposite_H2(int op, PicturePtr pSrcPicture,
     return FALSE;
 }
 
-static Bool
-viaIsAGP(VIAPtr pVia, PixmapPtr pPix, unsigned long *offset)
-{
-#ifdef HAVE_DRI
-    unsigned long offs;
-
-    if (pVia->directRenderingType && !pVia->IsPCI) {
-        offs = ((unsigned long)pPix->devPrivate.ptr
-                - (unsigned long)pVia->agpMappedAddr);
-
-        if ((offs - pVia->scratchOffset) < pVia->agpSize) {
-            *offset = offs + pVia->agpAddr;
-            return TRUE;
-        }
-    }
-#endif
-    return FALSE;
-}
-
-static Bool
-viaExaIsOffscreen(PixmapPtr pPix)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
-    VIAPtr pVia = VIAPTR(pScrn);
-    uint8_t* addr_size;
-    uint8_t* front_bo;
-    Bool ret;
-
-    front_bo = drm_bo_map(pScrn, pVia->drmmode.front_bo);
-    addr_size = (uint8_t*)pPix->devPrivate.ptr -
-                                            (unsigned long)front_bo;
-    ret = (addr_size < (uint8_t*)pVia->drmmode.front_bo->size) ?
-                                                        TRUE : FALSE;
-    return ret;
-}
-
 Bool
 viaExaPrepareComposite_H2(int op, PicturePtr pSrcPicture,
                             PicturePtr pMaskPicture, PicturePtr pDstPicture,
diff --git a/src/via_exa_h6.c b/src/via_exa_h6.c
index 8029184..daf5c58 100644
--- a/src/via_exa_h6.c
+++ b/src/via_exa_h6.c
@@ -350,42 +350,6 @@ viaExaCheckComposite_H6(int op, PicturePtr pSrcPicture,
     return FALSE;
 }
 
-static Bool
-viaIsAGP(VIAPtr pVia, PixmapPtr pPix, unsigned long *offset)
-{
-#ifdef HAVE_DRI
-    unsigned long offs;
-
-    if (pVia->directRenderingType && !pVia->IsPCI) {
-        offs = ((unsigned long)pPix->devPrivate.ptr
-                - (unsigned long)pVia->agpMappedAddr);
-
-        if ((offs - pVia->scratchOffset) < pVia->agpSize) {
-            *offset = offs + pVia->agpAddr;
-            return TRUE;
-        }
-    }
-#endif
-    return FALSE;
-}
-
-static Bool
-viaExaIsOffscreen(PixmapPtr pPix)
-{
-    ScrnInfoPtr pScrn = xf86ScreenToScrn(pPix->drawable.pScreen);
-    VIAPtr pVia = VIAPTR(pScrn);
-    uint8_t* addr_size;
-    uint8_t* front_bo;
-    Bool ret;
-
-    front_bo = drm_bo_map(pScrn, pVia->drmmode.front_bo);
-    addr_size = (uint8_t*)pPix->devPrivate.ptr -
-                                            (unsigned long)front_bo;
-    ret = (addr_size < (uint8_t*)pVia->drmmode.front_bo->size) ?
-                                                        TRUE : FALSE;
-    return ret;
-}
-
 Bool
 viaExaPrepareComposite_H6(int op, PicturePtr pSrcPicture,
                             PicturePtr pMaskPicture, PicturePtr pDstPicture,
commit b7308b5886748ec47ef39e1933f7d3916fb8576e
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:27:42 2020 -0700

    Move viaEXAOffscreenAlloc() to via_exa.c
    
    All EXA related code should be inside via_exa.c.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_driver.h b/src/via_driver.h
index c39d0aa..086c3d3 100644
--- a/src/via_driver.h
+++ b/src/via_driver.h
@@ -361,6 +361,10 @@ void viaSetupDefaultOptions(ScrnInfoPtr pScrn);
 void viaProcessOptions(ScrnInfoPtr pScrn);
 
 /* In via_exa.c. */
+int viaEXAOffscreenAlloc(ScrnInfoPtr pScrn,
+                            struct buffer_object *obj,
+                            unsigned long size,
+                            unsigned long alignment);
 Bool viaInitExa(ScreenPtr pScreen);
 Bool viaAccelSetMode(int bpp, ViaTwodContext * tdc);
 void viaSetClippingRectangle(ScrnInfoPtr pScrn,
diff --git a/src/via_exa.c b/src/via_exa.c
index 1cae321..7ef69d6 100644
--- a/src/via_exa.c
+++ b/src/via_exa.c
@@ -788,6 +788,32 @@ viaExaTexUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src,
 
 #endif /* HAVE_DRI */
 
+int
+viaEXAOffscreenAlloc(ScrnInfoPtr pScrn, struct buffer_object *obj,
+                        unsigned long size, unsigned long alignment)
+{
+    ExaOffscreenArea *pArea;
+    int newSize = size;
+    int newAlignment;
+    int ret = 0;
+
+    newAlignment = alignment;
+    pArea = exaOffscreenAlloc(pScrn->pScreen, newSize,
+                                newAlignment, TRUE, NULL, NULL);
+    if (!pArea) {
+        ret = -ENOMEM;
+        goto exit;
+    }
+
+    obj->offset = pArea->offset;
+    obj->handle = (unsigned long) pArea;
+    obj->domain = TTM_PL_FLAG_VRAM;
+    obj->size = newSize;
+
+exit:
+    return ret;
+}
+
 Bool
 viaInitExa(ScreenPtr pScreen)
 {
diff --git a/src/via_memmgr.c b/src/via_memmgr.c
index 264eca0..70cf6ad 100644
--- a/src/via_memmgr.c
+++ b/src/via_memmgr.c
@@ -70,32 +70,6 @@ exit:
     return ret;
 }
 
-static int
-viaEXAOffscreenAlloc(ScrnInfoPtr pScrn, struct buffer_object *obj,
-                        unsigned long size, unsigned long alignment)
-{
-    ExaOffscreenArea *pArea;
-    int newSize = size;
-    int newAlignment;
-    int ret = 0;
-
-    newAlignment = alignment;
-    pArea = exaOffscreenAlloc(pScrn->pScreen, newSize,
-                                newAlignment, TRUE, NULL, NULL);
-    if (!pArea) {
-        ret = -ENOMEM;
-        goto exit;
-    }
-
-    obj->offset = pArea->offset;
-    obj->handle = (unsigned long) pArea;
-    obj->domain = TTM_PL_FLAG_VRAM;
-    obj->size = newSize;
-
-exit:
-    return ret;
-}
-
 struct buffer_object *
 drm_bo_alloc(ScrnInfoPtr pScrn, unsigned long size,
                 unsigned long alignment, int domain)
commit a76f1b7d1eb5c501d7731ec01e9a79ccae89f3c4
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:26:58 2020 -0700

    Remove the declaration of EXAOPT_MIGRATION_HEURISTIC macro
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_exa.c b/src/via_exa.c
index 7c2944e..1cae321 100644
--- a/src/via_exa.c
+++ b/src/via_exa.c
@@ -788,8 +788,6 @@ viaExaTexUploadToScreen(PixmapPtr pDst, int x, int y, int w, int h, char *src,
 
 #endif /* HAVE_DRI */
 
-#define EXAOPT_MIGRATION_HEURISTIC  0
-
 Bool
 viaInitExa(ScreenPtr pScreen)
 {
commit 5830d5d781f1303062bd9b093772f613bcf0b014
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:24:22 2020 -0700

    Really pass the alignment requirement when allocating memory
    
    In UMS no acceleration and non-DRI1 EXA acceleration situations,
    drm_bo_alloc() was not actually passing the alignment requirement to
    function calls that allocate memory.  They were blindly specifying
    32 byte alignment.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_memmgr.c b/src/via_memmgr.c
index d063399..264eca0 100644
--- a/src/via_memmgr.c
+++ b/src/via_memmgr.c
@@ -44,15 +44,18 @@
 
 static int
 viaOffScreenLinear(ScrnInfoPtr pScrn, struct buffer_object *obj,
-                    unsigned long size)
+                    unsigned long size, unsigned long alignment)
 {
     FBLinearPtr linear;
     int depth = pScrn->bitsPerPixel / 8;
+    int newAlignment;
     int ret = 0;
 
+    newAlignment = alignment;
     linear = xf86AllocateOffscreenLinear(pScrn->pScreen,
-                                        (size + depth - 1) / depth,
-                                        32, NULL, NULL, NULL);
+                                            (size + depth - 1) / depth,
+                                            newAlignment,
+                                            NULL, NULL, NULL);
     if (!linear) {
         ret = -ENOMEM;
         goto exit;
@@ -69,14 +72,16 @@ exit:
 
 static int
 viaEXAOffscreenAlloc(ScrnInfoPtr pScrn, struct buffer_object *obj,
-                        unsigned long size)
+                        unsigned long size, unsigned long alignment)
 {
     ExaOffscreenArea *pArea;
     int newSize = size;
+    int newAlignment;
     int ret = 0;
 
+    newAlignment = alignment;
     pArea = exaOffscreenAlloc(pScrn->pScreen, newSize,
-                               32, TRUE, NULL, NULL);
+                                newAlignment, TRUE, NULL, NULL);
     if (!pArea) {
         ret = -ENOMEM;
         goto exit;
@@ -112,7 +117,8 @@ drm_bo_alloc(ScrnInfoPtr pScrn, unsigned long size,
     case TTM_PL_FLAG_VRAM:
         if (pVia->directRenderingType == DRI_NONE) {
             if (!pVia->useEXA) {
-                ret = viaOffScreenLinear(pScrn, obj, size);
+                ret = viaOffScreenLinear(pScrn, obj,
+                                            size, alignment);
                 if (ret) {
                     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                                         "Linear memory allocation "
@@ -126,7 +132,8 @@ drm_bo_alloc(ScrnInfoPtr pScrn, unsigned long size,
                                         obj->handle));
                 }
             } else {
-                ret = viaEXAOffscreenAlloc(pScrn, obj, size);
+                ret = viaEXAOffscreenAlloc(pScrn, obj,
+                                            size, alignment);
                 if (ret) {
                     DEBUG(xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
                                         "EXA offscreen memory "
commit eb7ba2f926dd55fb994f23328efa1e735aeba2fb
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Mon Mar 23 14:23:48 2020 -0700

    Change several drm_bo_alloc() input parameters type
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/src/via_memmgr.c b/src/via_memmgr.c
index 6c3aa18..d063399 100644
--- a/src/via_memmgr.c
+++ b/src/via_memmgr.c
@@ -92,7 +92,8 @@ exit:
 }
 
 struct buffer_object *
-drm_bo_alloc(ScrnInfoPtr pScrn, unsigned int size, unsigned int alignment, int domain)
+drm_bo_alloc(ScrnInfoPtr pScrn, unsigned long size,
+                unsigned long alignment, int domain)
 {
     struct buffer_object *obj = NULL;
     VIAPtr pVia = VIAPTR(pScrn);
diff --git a/src/via_memmgr.h b/src/via_memmgr.h
index dd3c788..54199f5 100644
--- a/src/via_memmgr.h
+++ b/src/via_memmgr.h
@@ -41,8 +41,8 @@ struct buffer_object {
 
 
 struct buffer_object *
-drm_bo_alloc(ScrnInfoPtr pScrn, unsigned int size, unsigned int alignment,
-                int domain);
+drm_bo_alloc(ScrnInfoPtr pScrn, unsigned long size,
+                unsigned long alignment, int domain);
 void *drm_bo_map(ScrnInfoPtr pScrn, struct buffer_object *obj);
 void drm_bo_unmap(ScrnInfoPtr pScrn, struct buffer_object *obj);
 void drm_bo_free(ScrnInfoPtr pScrn, struct buffer_object *);


More information about the openchrome-devel mailing list