diff options
-rw-r--r-- | etnaviv/etnaviv.c | 7 | ||||
-rw-r--r-- | src/armada_accel.h | 1 | ||||
-rw-r--r-- | src/armada_drm.c | 4 |
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, |