From fd78464091f2b7fe4640f9c84dd2bc693cbe69cd Mon Sep 17 00:00:00 2001 From: Maxim Levitsky Date: Fri, 21 Mar 2008 22:06:35 +0200 Subject: [PATCH] Add a option to prefer overlay over textured video in intel driver --- man/intel.man | 5 +++++ src/i830.h | 1 + src/i830_driver.c | 4 ++++ src/i830_video.c | 12 ++++++++++-- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/man/intel.man b/man/intel.man index c26264f..dc92931 100644 --- a/man/intel.man +++ b/man/intel.man @@ -124,6 +124,11 @@ other drivers. Disable or enable XVideo support. Default: XVideo is enabled for configurations where it is supported. .TP +.BI "Option \*qXvPreferOverlay\*q \*q" boolean \*q +Make hardware overlay be first XV adapter. +Some applications assume only one XV adapter present thus use first one. +Default: Textured video adapter is first and overlay second. +.TP .BI "Option \*qLegacy3D\*q \*q" boolean \*q Enable support for the legacy i915_dri.so 3D driver. This will, among other things, make the 2D driver tell libGL to diff --git a/src/i830.h b/src/i830.h index 1319c6a..6a37d2e 100644 --- a/src/i830.h +++ b/src/i830.h @@ -512,6 +512,7 @@ typedef struct _I830Rec { Bool XvDisabled; /* Xv disabled in PreInit. */ Bool XvEnabled; /* Xv enabled for this generation. */ + Bool XvPreferOverlay; #ifdef I830_XV int colorKey; diff --git a/src/i830_driver.c b/src/i830_driver.c index 98f4261..6f67f85 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -307,6 +307,7 @@ typedef enum { #ifdef INTEL_XVMC OPTION_XVMC, #endif + OPTION_PREFER_OVERLAY } I830Opts; static OptionInfoRec I830Options[] = { @@ -333,6 +334,7 @@ static OptionInfoRec I830Options[] = { #ifdef INTEL_XVMC {OPTION_XVMC, "XvMC", OPTV_BOOLEAN, {0}, TRUE}, #endif + {OPTION_PREFER_OVERLAY, "XvPreferOverlay", OPTV_BOOLEAN, {0}, TRUE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; /* *INDENT-ON* */ @@ -1593,6 +1595,8 @@ I830PreInit(ScrnInfoPtr pScrn, int flags) pI830->XvDisabled = !xf86ReturnOptValBool(pI830->Options, OPTION_XVIDEO, TRUE); + pI830->XvPreferOverlay = xf86ReturnOptValBool(pI830->Options, OPTION_PREFER_OVERLAY, FALSE); + #ifdef I830_XV if (xf86GetOptValInteger(pI830->Options, OPTION_VIDEO_KEY, &(pI830->colorKey))) { diff --git a/src/i830_video.c b/src/i830_video.c index 14d48af..5819256 100644 --- a/src/i830_video.c +++ b/src/i830_video.c @@ -604,7 +604,6 @@ I830InitVideo(ScreenPtr pScreen) { texturedAdaptor = I830SetupImageVideoTextured(pScreen); if (texturedAdaptor != NULL) { - adaptors[num_adaptors++] = texturedAdaptor; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Set up textured video\n"); } else { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -617,7 +616,6 @@ I830InitVideo(ScreenPtr pScreen) { overlayAdaptor = I830SetupImageVideoOverlay(pScreen); if (overlayAdaptor != NULL) { - adaptors[num_adaptors++] = overlayAdaptor; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Set up overlay video\n"); } else { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, @@ -625,6 +623,16 @@ I830InitVideo(ScreenPtr pScreen) } I830InitOffscreenImages(pScreen); } + + if (overlayAdaptor && pI830->XvPreferOverlay) + adaptors[num_adaptors++] = overlayAdaptor; + + if (texturedAdaptor) + adaptors[num_adaptors++] = texturedAdaptor; + + if (overlayAdaptor && !pI830->XvPreferOverlay) + adaptors[num_adaptors++] = overlayAdaptor; + #ifdef INTEL_XVMC Bool ret = FALSE; if (intel_xvmc_probe(pScrn)) { -- 1.5.4.3 _______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg