From: Michel Dänzer <[email protected]>

This enables tiling for scanout BOs used for TearFree / ShadowPrimary,
and simplifies the code a little.

Signed-off-by: Michel Dänzer <[email protected]>
---
 src/drmmode_display.c | 24 +++++++++---------------
 1 file changed, 9 insertions(+), 15 deletions(-)

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index ad3de7f..cb0b0a0 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -531,11 +531,10 @@ drmmode_crtc_scanout_allocate(xf86CrtcPtr crtc,
        ScrnInfoPtr pScrn = crtc->scrn;
        drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
        drmmode_ptr drmmode = drmmode_crtc->drmmode;
-       int aligned_height;
-       int size;
+       struct radeon_surface surface;
+       uint32_t tiling;
        int ret;
-       unsigned long rotate_pitch;
-       int base_align;
+       int pitch;
 
        if (scanout->bo) {
                if (scanout->width == width && scanout->height == height)
@@ -544,23 +543,18 @@ drmmode_crtc_scanout_allocate(xf86CrtcPtr crtc,
                drmmode_crtc_scanout_destroy(drmmode, scanout);
        }
 
-       rotate_pitch =
-               RADEON_ALIGN(width, drmmode_get_pitch_align(pScrn, 
drmmode->cpp, 0))
-               * drmmode->cpp;
-       aligned_height = RADEON_ALIGN(height, drmmode_get_height_align(pScrn, 
0));
-       base_align = drmmode_get_base_align(pScrn, drmmode->cpp, 0);
-       size = RADEON_ALIGN(rotate_pitch * aligned_height, 
RADEON_GPU_PAGE_SIZE);
-
-       scanout->bo = radeon_bo_open(drmmode->bufmgr, 0, size, base_align,
-                                    RADEON_GEM_DOMAIN_VRAM,
-                                    RADEON_GEM_NO_CPU_ACCESS);
+       scanout->bo = radeon_alloc_pixmap_bo(pScrn, width, height, pScrn->depth,
+                                            RADEON_CREATE_PIXMAP_TILING_MACRO |
+                                            RADEON_CREATE_PIXMAP_TILING_MICRO,
+                                            pScrn->bitsPerPixel, &pitch,
+                                            &surface, &tiling);
        if (scanout->bo == NULL)
                return NULL;
 
        radeon_bo_map(scanout->bo, 1);
 
        ret = drmModeAddFB(drmmode->fd, width, height, pScrn->depth,
-                          pScrn->bitsPerPixel, rotate_pitch,
+                          pScrn->bitsPerPixel, pitch,
                           scanout->bo->handle,
                           &scanout->fb_id);
        if (ret) {
-- 
2.8.0.rc3

_______________________________________________
xorg-driver-ati mailing list
[email protected]
https://lists.x.org/mailman/listinfo/xorg-driver-ati

Reply via email to