xf86-video-ati: Branch 'master' - 5 commits
Michel Dänzer
daenzer at kemper.freedesktop.org
Thu Mar 24 09:04:31 UTC 2016
configure.ac | 2 +-
src/drmmode_display.c | 45 ++++++++++++++++++++++++++-------------------
src/radeon.h | 8 --------
src/radeon_dri2.c | 14 --------------
src/radeon_glamor.c | 8 --------
src/radeon_kms.c | 47 ++++++++++++++++++++++++++++++-----------------
src/radeon_list.h | 1 +
src/radeon_video.c | 2 --
8 files changed, 58 insertions(+), 69 deletions(-)
New commits:
commit e592f32f8b5f5873fcc18b10a69dd5e4ccf11073
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Wed Mar 23 18:25:48 2016 +0900
Require xserver 1.9 or newer
1.9.0 was released in August 2010.
We were already unintentionally relying on things not available in 1.8
for at least a year, and nobody has complained.
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
diff --git a/configure.ac b/configure.ac
index eb97a6b..a4963c3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,7 +75,7 @@ PKG_CHECK_MODULES(LIBDRM, [libdrm >= 2.4.60])
PKG_CHECK_MODULES(LIBDRM_RADEON, [libdrm_radeon])
# Obtain compiler/linker options for the driver dependencies
-PKG_CHECK_MODULES(XORG, [xorg-server >= 1.8 xproto fontsproto xf86driproto $REQUIRED_MODULES])
+PKG_CHECK_MODULES(XORG, [xorg-server >= 1.9 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]),
HAVE_XEXTPROTO_71="no")
diff --git a/src/radeon.h b/src/radeon.h
index b9afd8e..37d5fb6 100644
--- a/src/radeon.h
+++ b/src/radeon.h
@@ -272,19 +272,11 @@ struct radeon_pixmap {
uint32_t handle;
};
-#if HAS_DEVPRIVATEKEYREC
extern DevPrivateKeyRec glamor_pixmap_index;
-#else
-extern int glamor_pixmap_index;
-#endif
static inline struct radeon_pixmap *radeon_get_pixmap_private(PixmapPtr pixmap)
{
-#if HAS_DEVPRIVATEKEYREC
return dixGetPrivate(&pixmap->devPrivates, &glamor_pixmap_index);
-#else
- return dixLookupPrivate(&pixmap->devPrivates, &glamor_pixmap_index);
-#endif
}
static inline void radeon_set_pixmap_private(PixmapPtr pixmap, struct radeon_pixmap *priv)
diff --git a/src/radeon_dri2.c b/src/radeon_dri2.c
index 474611a..73e09d0 100644
--- a/src/radeon_dri2.c
+++ b/src/radeon_dri2.c
@@ -70,18 +70,9 @@ struct dri2_window_priv {
int vblank_delta;
};
-#if HAS_DEVPRIVATEKEYREC
-
static DevPrivateKeyRec dri2_window_private_key_rec;
#define dri2_window_private_key (&dri2_window_private_key_rec)
-#else
-
-static int dri2_window_private_key_index;
-DevPrivateKey dri2_window_private_key = &dri2_window_private_key_index;
-
-#endif /* HAS_DEVPRIVATEKEYREC */
-
#define get_dri2_window_priv(window) \
((struct dri2_window_priv*) \
dixLookupPrivate(&(window)->devPrivates, dri2_window_private_key))
@@ -1588,14 +1579,9 @@ radeon_dri2_screen_init(ScreenPtr pScreen)
driverNames[1] = NULL; /* no VDPAU support */
if (DRI2InfoCnt == 0) {
-#if HAS_DIXREGISTERPRIVATEKEY
if (!dixRegisterPrivateKey(dri2_window_private_key,
PRIVATE_WINDOW,
sizeof(struct dri2_window_priv))) {
-#else
- if (!dixRequestPrivate(dri2_window_private_key,
- sizeof(struct dri2_window_priv))) {
-#endif
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Failed to get DRI2 window private\n");
return FALSE;
diff --git a/src/radeon_glamor.c b/src/radeon_glamor.c
index cc2b1f2..f94e0fd 100644
--- a/src/radeon_glamor.c
+++ b/src/radeon_glamor.c
@@ -34,11 +34,7 @@
#include "radeon_bo_helper.h"
#include "radeon_glamor.h"
-#if HAS_DEVPRIVATEKEYREC
DevPrivateKeyRec glamor_pixmap_index;
-#else
-int glamor_pixmap_index;
-#endif
void
radeon_glamor_exchange_buffers(PixmapPtr src,
@@ -370,11 +366,7 @@ radeon_glamor_init(ScreenPtr screen)
return FALSE;
}
-#if HAS_DIXREGISTERPRIVATEKEY
if (!dixRegisterPrivateKey(&glamor_pixmap_index, PRIVATE_PIXMAP, 0))
-#else
- if (!dixRequestPrivate(&glamor_pixmap_index, 0))
-#endif
return FALSE;
if (info->shadow_primary)
diff --git a/src/radeon_video.c b/src/radeon_video.c
index 48b06e2..e08d8e0 100644
--- a/src/radeon_video.c
+++ b/src/radeon_video.c
@@ -94,9 +94,7 @@ radeon_pick_best_crtc(ScrnInfoPtr pScrn, Bool consider_disabled,
best_coverage = 0;
/* Prefer the CRTC of the primary output */
-#ifdef HAS_DIXREGISTERPRIVATEKEY
if (dixPrivateKeyRegistered(rrPrivKey))
-#endif
{
primary_output = RRFirstOutput(pScrn->pScreen);
}
commit bde466e5d44cad64b4e4eceaa5de80fdbf86356e
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Wed Mar 23 18:16:42 2016 +0900
Fix build against older versions of xserver
Also slightly clean up the error handling in radeon_scanout_do_update.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94614
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index cb0b0a0..7ed8d6c 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -39,6 +39,7 @@
#include "radeon.h"
#include "radeon_bo_helper.h"
#include "radeon_glamor.h"
+#include "radeon_list.h"
#include "radeon_reg.h"
#ifdef RADEON_PIXMAP_SHARING
@@ -361,6 +362,8 @@ drmmode_crtc_dpms(xf86CrtcPtr crtc, int mode)
crtc->x, crtc->y);
}
+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 10
+
static PixmapPtr
create_pixmap_for_fbcon(drmmode_ptr drmmode,
ScrnInfoPtr pScrn, int fbcon_id)
@@ -424,8 +427,6 @@ destroy_pixmap_for_fbcon(ScrnInfoPtr pScrn)
info->fbcon_pixmap = NULL;
}
-#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 10
-
void drmmode_copy_fb(ScrnInfoPtr pScrn, drmmode_ptr drmmode)
{
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
@@ -627,16 +628,20 @@ drmmode_can_use_hw_cursor(xf86CrtcPtr crtc)
if (crtc->transformPresent)
return FALSE;
+#if XF86_CRTC_VERSION >= 4
/* Xorg doesn't correctly handle cursor position transform in the
* rotation case
*/
if (crtc->driverIsPerformingTransform &&
(crtc->rotation & 0xf) != RR_Rotate_0)
return FALSE;
+#endif
+#ifdef RADEON_PIXMAP_SHARING
/* HW cursor not supported yet with RandR 1.4 multihead */
if (!xorg_list_is_empty(&crtc->scrn->pScreen->pixmap_dirty_list))
return FALSE;
+#endif
return TRUE;
}
@@ -770,8 +775,11 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
drmmode_crtc_scanout_destroy(drmmode, &drmmode_crtc->scanout[0]);
drmmode_crtc_scanout_destroy(drmmode, &drmmode_crtc->scanout[1]);
- } else if (info->tear_free || info->shadow_primary ||
- crtc->driverIsPerformingTransform) {
+ } else if (info->tear_free ||
+#if XF86_CRTC_VERSION >= 4
+ crtc->driverIsPerformingTransform ||
+#endif
+ info->shadow_primary) {
for (i = 0; i < (info->tear_free ? 2 : 1); i++) {
drmmode_crtc_scanout_create(crtc,
&drmmode_crtc->scanout[i],
@@ -2570,7 +2578,12 @@ restart_destroy:
}
if (changed) {
+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,14,99,2,0)
RRSetChanged(xf86ScrnToScreen(scrn));
+#else
+ rrScrPrivPtr rrScrPriv = rrGetScrPriv(scrn->pScreen);
+ rrScrPriv->changed = TRUE;
+#endif
RRTellChanged(xf86ScrnToScreen(scrn));
}
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index d6a9aa9..3864281 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -393,6 +393,7 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
force = info->accel_state->force;
info->accel_state->force = TRUE;
+#if XF86_CRTC_VERSION >= 4
if (xf86_crtc->driverIsPerformingTransform) {
SourceValidateProcPtr SourceValidate = pScreen->SourceValidate;
PictFormatPtr format = PictureWindowFormat(pScreen->root);
@@ -415,14 +416,14 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
if (!dst) {
ErrorF("Failed to create destination picture for transformed scanout "
"update\n");
- goto out;
+ goto free_src;
}
error = SetPictureTransform(src, &xf86_crtc->crtc_to_framebuffer);
if (error) {
ErrorF("SetPictureTransform failed for transformed scanout "
"update\n");
- goto out;
+ goto free_dst;
}
if (xf86_crtc->filter)
@@ -443,9 +444,14 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
extents.y2 - extents.y1);
pScreen->SourceValidate = SourceValidate;
- FreePicture(src, None);
+ free_dst:
FreePicture(dst, None);
- } else {
+ free_src:
+ FreePicture(src, None);
+ } else
+ out:
+#endif /* XF86_CRTC_VERSION >= 4 */
+ {
GCPtr gc = GetScratchGC(pDraw->depth, pScreen);
ValidateGC(pDraw, gc);
@@ -459,7 +465,6 @@ radeon_scanout_do_update(xf86CrtcPtr xf86_crtc, int scanout_id)
radeon_cs_flush_indirect(scrn);
- out:
info->accel_state->force = force;
return TRUE;
@@ -607,8 +612,11 @@ static void RADEONBlockHandler_KMS(BLOCKHANDLER_ARGS_DECL)
for (c = 0; c < xf86_config->num_crtc; c++) {
if (info->tear_free)
radeon_scanout_flip(pScreen, info, xf86_config->crtc[c]);
- else if (info->shadow_primary ||
- xf86_config->crtc[c]->driverIsPerformingTransform)
+ else if (info->shadow_primary
+#if XF86_CRTC_VERSION >= 4
+ || xf86_config->crtc[c]->driverIsPerformingTransform
+#endif
+ )
radeon_scanout_update(xf86_config->crtc[c]);
}
diff --git a/src/radeon_list.h b/src/radeon_list.h
index 77f74af..a0038c9 100644
--- a/src/radeon_list.h
+++ b/src/radeon_list.h
@@ -30,6 +30,7 @@
#if !HAVE_XORG_LIST
#define xorg_list list
#define xorg_list_init list_init
+#define xorg_list_is_empty list_is_empty
#define xorg_list_add list_add
#define xorg_list_del list_del
#define xorg_list_for_each_entry list_for_each_entry
commit b2b079be0e7ef2704c3df9ee25fe46166e450e83
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Wed Mar 23 17:29:47 2016 +0900
Use radeon_alloc_pixmap_bo for allocating scanout BOs
This enables tiling for scanout BOs used for TearFree / ShadowPrimary,
and simplifies the code a little.
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
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) {
commit d21ac4669a8b2cdd4eec5e5a94d1950b7423b8b5
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Wed Mar 23 17:27:27 2016 +0900
DRI3 only works with acceleration
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94214
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index 27d9fed..d6a9aa9 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1713,13 +1713,16 @@ Bool RADEONScreenInit_KMS(SCREEN_INIT_ARGS_DECL)
value = FALSE;
from = X_DEFAULT;
- if (xf86GetOptValBool(info->Options, OPTION_DRI3, &value))
- from = X_CONFIG;
- if (xf86GetOptValInteger(info->Options, OPTION_DRI, &driLevel) &&
- (driLevel == 2 || driLevel == 3)) {
- from = X_CONFIG;
- value = driLevel == 3;
+ if (!info->r600_shadow_fb) {
+ if (xf86GetOptValBool(info->Options, OPTION_DRI3, &value))
+ from = X_CONFIG;
+
+ if (xf86GetOptValInteger(info->Options, OPTION_DRI, &driLevel) &&
+ (driLevel == 2 || driLevel == 3)) {
+ from = X_CONFIG;
+ value = driLevel == 3;
+ }
}
if (value) {
commit eb1a2c57e6c45d7ca57b2e2be643194243b7aae1
Author: Michel Dänzer <michel.daenzer at amd.com>
Date: Wed Mar 23 17:23:31 2016 +0900
TearFree can only work with acceleration
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
diff --git a/src/radeon_kms.c b/src/radeon_kms.c
index d89c376..27d9fed 100644
--- a/src/radeon_kms.c
+++ b/src/radeon_kms.c
@@ -1278,11 +1278,13 @@ Bool RADEONPreInit_KMS(ScrnInfoPtr pScrn, int flags)
}
#endif
- info->tear_free = xf86ReturnOptValBool(info->Options, OPTION_TEAR_FREE,
- FALSE);
+ if (!info->r600_shadow_fb) {
+ info->tear_free = xf86ReturnOptValBool(info->Options, OPTION_TEAR_FREE,
+ FALSE);
- if (info->tear_free)
- xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TearFree enabled\n");
+ if (info->tear_free)
+ xf86DrvMsg(pScrn->scrnIndex, X_CONFIG, "TearFree enabled\n");
+ }
if (info->dri2.pKernelDRMVersion->version_minor >= 8) {
Bool sw_cursor = xf86ReturnOptValBool(info->Options, OPTION_SW_CURSOR, FALSE);
More information about the xorg-commit
mailing list