[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