summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@openbsd.org>2013-08-22 10:32:46 -0400
committerAlex Deucher <alexander.deucher@amd.com>2013-08-22 10:32:46 -0400
commit8927d33f76ee12bc618fecfc59fc7ff1fcedcd5e (patch)
tree9e8adfeffb3fbe52a590121ae14aca1bc46c496f
parentfa83d3d1636c315bc43dd622d407eb058e3ef976 (diff)
Fix shadowfb on big-endian machines
For shadowfb, the framebuffer needs to have the RADEON_TILING_SURFACE flag set, otherwise the appropriate byte swapping won't happen. See https://bugs.freedesktop.org/show_bug.cgi?id=66663 Signed-off-by: Mark Kettenis <kettenis@openbsd.org> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
-rw-r--r--src/drmmode_display.c3
-rw-r--r--src/radeon_kms.c3
2 files changed, 6 insertions, 0 deletions
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 1df104d1..921b7ba9 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -1590,6 +1590,9 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
tiling_flags |= RADEON_TILING_SWAP_16BIT;
break;
}
+ if (info->ChipFamily < CHIP_FAMILY_R600 &&
+ info->r600_shadow_fb && tiling_flags)
+ tiling_flags |= RADEON_TILING_SURFACE;
#endif
if (tiling_flags)
radeon_bo_set_tiling(info->front_bo, tiling_flags, pitch);
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index edc3b048..82e88d44 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1585,6 +1585,9 @@ static Bool radeon_setup_kernel_mem(ScreenPtr pScreen)
tiling_flags |= RADEON_TILING_SWAP_16BIT;
break;
}
+ if (info->ChipFamily < CHIP_FAMILY_R600 &&
+ info->r600_shadow_fb && tiling_flags)
+ tiling_flags |= RADEON_TILING_SURFACE;
#endif
if (tiling_flags)
radeon_bo_set_tiling(info->front_bo, tiling_flags, pitch);