summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Glisse <jglisse@redhat.com>2013-04-08 13:45:18 -0400
committerJerome Glisse <jglisse@redhat.com>2013-04-18 17:27:10 -0400
commitb2826580e4d246d45871b413e4deecb070162577 (patch)
tree4cf271c6b734cc43716219a3edb9630991774dca
parent6e74aacc5e5da3b51744153dad1645caa6ea4ce3 (diff)
radeonsi: add 2d tiling support
Signed-off-by: Jerome Glisse <jglisse@redhat.com>
-rw-r--r--configure.ac2
-rw-r--r--src/drmmode_display.c4
-rw-r--r--src/radeon_bo_helper.c4
-rw-r--r--src/radeon_kms.c6
4 files changed, 15 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 71f85cd6..b4f1d4c5 100644
--- a/configure.ac
+++ b/configure.ac
@@ -68,13 +68,13 @@ AC_ARG_WITH(xorg-module-dir,
XORG_DRIVER_CHECK_EXT(RANDR, randrproto)
XORG_DRIVER_CHECK_EXT(RENDER, renderproto)
XORG_DRIVER_CHECK_EXT(XV, videoproto)
XORG_DRIVER_CHECK_EXT(DPMSExtension, xextproto)
# Checks for libraries.
-PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.36])
+PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.44])
PKG_CHECK_MODULES(LIBDRM_RADEON, [libdrm_radeon])
# Obtain compiler/linker options for the driver dependencies
PKG_CHECK_MODULES(XORG, [xorg-server >= 1.7 xproto fontsproto xf86driproto $REQUIRED_MODULES])
PKG_CHECK_MODULES(XEXT, [xextproto >= 7.0.99.1],
HAVE_XEXTPROTO_71="yes"; AC_DEFINE(HAVE_XEXTPROTO_71, 1, [xextproto 7.1 available]),
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 4c50a1b8..13e65fa3 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -118,12 +118,14 @@ static PixmapPtr drmmode_create_bo_pixmap(ScrnInfoPtr pScrn,
surface->blk_d = 1;
surface->array_size = 1;
surface->last_level = 0;
surface->bpe = bpp / 8;
surface->nsamples = 1;
surface->flags = RADEON_SURF_SCANOUT;
+ /* we are requiring a recent enough libdrm version */
+ surface->flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
surface->flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR_ALIGNED, MODE);
if (tiling & RADEON_TILING_MICRO) {
surface->flags = RADEON_SURF_CLR(surface->flags, MODE);
surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
}
@@ -1348,12 +1350,14 @@ drmmode_xf86crtc_resize (ScrnInfoPtr scrn, int width, int height)
surface.blk_d = 1;
surface.array_size = 1;
surface.last_level = 0;
surface.bpe = cpp;
surface.nsamples = 1;
surface.flags = RADEON_SURF_SCANOUT;
+ /* we are requiring a recent enough libdrm version */
+ surface.flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
surface.flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
surface.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR_ALIGNED, MODE);
if (tiling_flags & RADEON_TILING_MICRO) {
surface.flags = RADEON_SURF_CLR(surface.flags, MODE);
surface.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
}
diff --git a/src/radeon_bo_helper.c b/src/radeon_bo_helper.c
index c5f5ce29..539590cb 100644
--- a/src/radeon_bo_helper.c
+++ b/src/radeon_bo_helper.c
@@ -129,12 +129,14 @@ radeon_alloc_pixmap_bo(ScrnInfoPtr pScrn, int width, int height, int depth,
* the fact that ddx align height to 8 pixel for old
* obscure reason i can't remember
*/
tiling &= ~RADEON_TILING_MACRO;
}
surface.flags = RADEON_SURF_SCANOUT;
+ /* we are requiring a recent enough libdrm version */
+ surface.flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
surface.flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
surface.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR, MODE);
if ((tiling & RADEON_TILING_MICRO)) {
surface.flags = RADEON_SURF_CLR(surface.flags, MODE);
surface.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
}
@@ -221,12 +223,14 @@ Bool radeon_set_shared_pixmap_backing(PixmapPtr ppix, void *fd_handle,
surface->blk_w = 1;
surface->blk_h = 1;
surface->blk_d = 1;
surface->array_size = 1;
surface->bpe = ppix->drawable.bitsPerPixel / 8;
surface->nsamples = 1;
+ /* we are requiring a recent enough libdrm version */
+ surface->flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
surface->flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
surface->flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR, MODE);
if (radeon_surface_best(info->surf_man, surface)) {
return FALSE;
}
if (radeon_surface_init(info->surf_man, surface)) {
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index e4f586c3..fcac885a 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -832,12 +832,16 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
/* don't enable tiling if accel is not enabled */
if (!info->r600_shadow_fb) {
Bool colorTilingDefault =
xorgGetVersion() >= XORG_VERSION_NUMERIC(1,9,4,901,0) &&
info->ChipFamily >= CHIP_FAMILY_R300 &&
+ /* this ARUBA check could be removed sometime after a big mesa release
+ * with proper bit, in the meantime you need to set tiling option in
+ * xorg configuration files
+ */
info->ChipFamily <= CHIP_FAMILY_ARUBA;
/* 2D color tiling */
if (info->ChipFamily >= CHIP_FAMILY_R600) {
info->allowColorTiling2D = xf86ReturnOptValBool(info->Options, OPTION_COLOR_TILING_2D,
info->ChipFamily <= CHIP_FAMILY_ARUBA);
@@ -1452,12 +1456,14 @@ static Bool radeon_setup_kernel_mem(ScreenPtr pScreen)
surface.blk_d = 1;
surface.array_size = 1;
surface.last_level = 0;
surface.bpe = cpp;
surface.nsamples = 1;
surface.flags = RADEON_SURF_SCANOUT;
+ /* we are requiring a recent enough libdrm version */
+ surface.flags |= RADEON_SURF_HAS_TILE_MODE_INDEX;
surface.flags |= RADEON_SURF_SET(RADEON_SURF_TYPE_2D, TYPE);
surface.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_LINEAR_ALIGNED, MODE);
if (tiling_flags & RADEON_TILING_MICRO) {
surface.flags = RADEON_SURF_CLR(surface.flags, MODE);
surface.flags |= RADEON_SURF_SET(RADEON_SURF_MODE_1D, MODE);
}