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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@gmx.com> Date: Mon Mar 23 14:26:58 2020 -0700 Remove the declaration of EXAOPT_MIGRATION_HEURISTIC macro Signed-off-by: Kevin Brace <kevinbr...@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 <kevinbr...@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 <kevinbr...@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 <kevinbr...@gmx.com> Date: Mon Mar 23 14:23:48 2020 -0700 Change several drm_bo_alloc() input parameters type Signed-off-by: Kevin Brace <kevinbr...@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 *); _______________________________________________ openchrome-devel mailing list openchrome-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/openchrome-devel