summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--etnaviv/etnaviv.c7
-rw-r--r--src/armada_accel.h1
-rw-r--r--src/armada_drm.c4
3 files changed, 12 insertions, 0 deletions
diff --git a/etnaviv/etnaviv.c b/etnaviv/etnaviv.c
index 5123b74..b4306e9 100644
--- a/etnaviv/etnaviv.c
+++ b/etnaviv/etnaviv.c
@@ -1005,6 +1005,12 @@ fail_accel:
return FALSE;
}
+static void etnaviv_align_bo_size(ScreenPtr pScreen, int *width, int *height,
+ int bpp)
+{
+ *width = etnaviv_pitch(*width, bpp) * 8 / bpp;
+}
+
static Bool etnaviv_format(struct etnaviv_format *fmt, unsigned int depth,
unsigned int bpp)
{
@@ -1155,6 +1161,7 @@ static int etnaviv_export_name(ScreenPtr pScreen, uint32_t name)
const struct armada_accel_ops etnaviv_ops = {
.pre_init = etnaviv_pre_init,
.screen_init = etnaviv_ScreenInit,
+ .align_bo_size = etnaviv_align_bo_size,
.import_dmabuf = etnaviv_import_dmabuf,
.attach_name = etnaviv_attach_name,
.free_pixmap = etnaviv_free_pixmap,
diff --git a/src/armada_accel.h b/src/armada_accel.h
index 157bb1d..073f0d7 100644
--- a/src/armada_accel.h
+++ b/src/armada_accel.h
@@ -25,6 +25,7 @@ enum {
struct armada_accel_ops {
Bool (*pre_init)(ScrnInfoPtr, int);
int (*screen_init)(ScreenPtr, struct drm_armada_bufmgr *);
+ void (*align_bo_size)(ScreenPtr, int *, int *, int);
Bool (*import_dmabuf)(ScreenPtr, PixmapPtr, int);
void (*attach_name)(ScreenPtr, PixmapPtr, uint32_t);
void (*free_pixmap)(PixmapPtr);
diff --git a/src/armada_drm.c b/src/armada_drm.c
index 14de490..0f21493 100644
--- a/src/armada_drm.c
+++ b/src/armada_drm.c
@@ -108,6 +108,10 @@ static struct drm_armada_bo *armada_bo_alloc_framebuffer(ScrnInfoPtr pScrn,
struct drm_armada_bo *bo;
int ret;
+ if (arm->accel_ops && arm->accel_ops->align_bo_size)
+ arm->accel_ops->align_bo_size(pScrn->pScreen, &width,
+ &height, bpp);
+
bo = drm_armada_bo_dumb_create(arm->bufmgr, width, height, bpp);
if (!bo) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,