[Intel-gfx] [PATCH] XvMC: enable XvMC on DRI2
Xiang, Haihao
haihao.xiang at intel.com
Wed May 6 03:22:26 CEST 2009
On Tue, 2009-05-05 at 18:00 +0800, David Amiel wrote:
> Hello,
>
> what is the difference/relation between your patch and the xvmc-vld branch ?
>
This patch just adds support for DRI2 and removes support for DRI1. Next
step is to use GEM for XvMC on master then merge xvmc-vld into
master(Shaohua is working on it).
Thanks.
Haihao
> regards,
>
> David
>
>
> Le Lun 4 mai 2009 09:15, Xiang, Haihao a écrit :
> > ---
> > configure.ac | 14 +-
> > src/i830_driver.c | 5 +-
> > src/i830_hwmc.c | 32 ++-
> > src/i830_hwmc.h | 1 -
> > src/i915_hwmc.c | 6 +-
> > src/i915_hwmc.h | 1 -
> > src/i915_video.c | 23 ++-
> > src/i965_hwmc.c | 2 -
> > src/xvmc/Makefile.am | 5 +-
> > src/xvmc/dri2.c | 301 ++++++++++++++++++++++++++
> > src/xvmc/dri2.h | 70 ++++++
> > src/xvmc/i915_xvmc.c | 17 +--
> > src/xvmc/i915_xvmc.h | 2 -
> > src/xvmc/intel_xvmc.c | 148 +++++--------
> > src/xvmc/intel_xvmc.h | 10 -
> > src/xvmc/xf86dri.c | 565
> > -------------------------------------------------
> > src/xvmc/xf86dri.h | 117 ----------
> > src/xvmc/xf86dristr.h | 389 ----------------------------------
> > 18 files changed, 482 insertions(+), 1226 deletions(-)
> > create mode 100644 src/xvmc/dri2.c
> > create mode 100644 src/xvmc/dri2.h
> > delete mode 100644 src/xvmc/xf86dri.c
> > delete mode 100644 src/xvmc/xf86dri.h
> > delete mode 100644 src/xvmc/xf86dristr.h
> >
> > diff --git a/configure.ac b/configure.ac
> > index 12fec79..e17d8ea 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -70,10 +70,10 @@ AC_ARG_ENABLE(video-debug,
> > AC_HELP_STRING([--enable-video-debug],
> > [VIDEO_DEBUG="$enableval"],
> > [VIDEO_DEBUG=no])
> >
> > -dnl AC_ARG_ENABLE(xvmc, AC_HELP_STRING([--disable-xvmc],
> > -dnl [Disable XvMC support
> > [[default=auto]]]),
> > -dnl [XVMC="$enableval"],
> > -dnl [XVMC=auto])
> > +AC_ARG_ENABLE(xvmc, AC_HELP_STRING([--disable-xvmc],
> > + [Disable XvMC support
> > [[default=yes]]]),
> > + [XVMC="$enableval"],
> > + [XVMC=yes])
> >
> > # Checks for extensions
> > XORG_DRIVER_CHECK_EXT(XINERAMA, xineramaproto)
> > @@ -142,12 +142,6 @@ if test "$VIDEO_DEBUG" = yes; then
> > AC_DEFINE(VIDEO_DEBUG,1,[Enable debug support])
> > fi
> >
> > -if test "$XVMC" = auto; then
> > - XVMC="$DRI"
> > -fi
> > -if test "$XVMC" = yes && test "$DRI" = no; then
> > - AC_MSG_ERROR([XvMC can't be enabled without DRI])
> > -fi
> > if test "$XVMC" = yes; then
> > PKG_CHECK_MODULES(XVMCLIB, [xvmc], [XVMC=yes], [XVMC=no])
> > PKG_CHECK_MODULES(XEXT, [xext])
> > diff --git a/src/i830_driver.c b/src/i830_driver.c
> > index 1887a51..a4f8716 100644
> > --- a/src/i830_driver.c
> > +++ b/src/i830_driver.c
> > @@ -2756,8 +2756,9 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int
> > argc, char **argv)
> >
> > #ifdef INTEL_XVMC
> > pI830->XvMCEnabled = FALSE;
> > - from = xf86GetOptValBool(pI830->Options, OPTION_XVMC,
> > - &pI830->XvMCEnabled) ? X_CONFIG : X_DEFAULT;
> > + from = ((pI830->directRenderingType == DRI_DRI2) &&
> > + xf86GetOptValBool(pI830->Options, OPTION_XVMC,
> > + &pI830->XvMCEnabled) ? X_CONFIG :
> > X_DEFAULT);
> > xf86DrvMsg(pScrn->scrnIndex, from, "Intel XvMC decoder %sabled\n",
> > pI830->XvMCEnabled ? "en" : "dis");
> > #endif
> > diff --git a/src/i830_hwmc.c b/src/i830_hwmc.c
> > index ecefb5b..10e3318 100644
> > --- a/src/i830_hwmc.c
> > +++ b/src/i830_hwmc.c
> > @@ -52,12 +52,6 @@ Bool intel_xvmc_probe(ScrnInfoPtr pScrn)
> > I830Ptr pI830 = I830PTR(pScrn);
> > Bool ret = FALSE;
> >
> > - /* Disable XvMC on DRI2 for now */
> > - if (pI830->directRenderingType == DRI_DRI2) {
> > - pI830->XvMCEnabled = FALSE;
> > - return FALSE;
> > - }
> > -
> > if (!pI830->XvMCEnabled)
> > return FALSE;
> >
> > @@ -83,6 +77,9 @@ void intel_xvmc_finish(ScrnInfoPtr pScrn)
> > Bool intel_xvmc_driver_init(ScreenPtr pScreen, XF86VideoAdaptorPtr
> > xv_adaptor)
> > {
> > ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
> > + I830Ptr pI830 = I830PTR(pScrn);
> > + struct drm_i915_setparam sp;
> > + int ret;
> >
> > if (!xvmc_driver) {
> > ErrorF("Failed to probe XvMC driver.\n");
> > @@ -93,14 +90,23 @@ Bool intel_xvmc_driver_init(ScreenPtr pScreen,
> > XF86VideoAdaptorPtr xv_adaptor)
> > ErrorF("XvMC driver initialize failed.\n");
> > return FALSE;
> > }
> > - return TRUE;
> > +
> > + /* Currently XvMC uses batchbuffer */
> > + sp.param = I915_SETPARAM_ALLOW_BATCHBUFFER;
> > + sp.value = 1;
> > + ret = drmCommandWrite(pI830->drmSubFD, DRM_I915_SETPARAM,
> > + &sp, sizeof(sp));
> > + if (ret == 0)
> > + return TRUE;
> > +
> > + return FALSE;
> > }
> >
> > Bool intel_xvmc_screen_init(ScreenPtr pScreen)
> > {
> > ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
> > I830Ptr pI830 = I830PTR(pScrn);
> > - DRIInfoPtr pDRIInfo = pI830->pDRIInfo;
> > + char buf[64];
> >
> > if (!xvmc_driver)
> > return FALSE;
> > @@ -117,9 +123,15 @@ Bool intel_xvmc_screen_init(ScreenPtr pScreen)
> > return FALSE;
> > }
> >
> > + sprintf(buf, "pci:%04x:%02x:%02x.%d",
> > + pI830->PciInfo->domain,
> > + pI830->PciInfo->bus,
> > + pI830->PciInfo->dev,
> > + pI830->PciInfo->func);
> > +
> > xf86XvMCRegisterDRInfo(pScreen, INTEL_XVMC_LIBNAME,
> > - pDRIInfo->busIdString,
> > - INTEL_XVMC_MAJOR, INTEL_XVMC_MINOR, INTEL_XVMC_PATCHLEVEL);
> > + buf,
> > + INTEL_XVMC_MAJOR, INTEL_XVMC_MINOR,
> > INTEL_XVMC_PATCHLEVEL);
> > return TRUE;
> > }
> >
> > diff --git a/src/i830_hwmc.h b/src/i830_hwmc.h
> > index 41f6441..2564151 100644
> > --- a/src/i830_hwmc.h
> > +++ b/src/i830_hwmc.h
> > @@ -65,7 +65,6 @@ struct hwmc_buffer
> >
> > struct _intel_xvmc_common {
> > unsigned int type;
> > - unsigned int sarea_size;
> > struct hwmc_buffer batchbuffer;
> > };
> >
> > diff --git a/src/i915_hwmc.c b/src/i915_hwmc.c
> > index 659638e..0723c80 100644
> > --- a/src/i915_hwmc.c
> > +++ b/src/i915_hwmc.c
> > @@ -416,8 +416,6 @@ static int i915_xvmc_create_context (ScrnInfoPtr
> > pScrn, XvMCContextPtr pContext,
> > int *num_priv, long **priv )
> > {
> > I830Ptr pI830 = I830PTR(pScrn);
> > - DRIInfoPtr pDRIInfo = pI830->pDRIInfo;
> > - I830DRIPtr pI830DRI = pDRIInfo->devPrivate;
> > I915XvMCCreateContextRec *contextRec = NULL;
> > I915XvMCPtr pXvMC = (I915XvMCPtr)xvmc_driver->devPrivate;
> > I915XvMCContextPriv *ctxpriv = NULL;
> > @@ -490,7 +488,6 @@ static int i915_xvmc_create_context (ScrnInfoPtr
> > pScrn, XvMCContextPtr pContext,
> >
> > /* common context items */
> > contextRec->comm.type = xvmc_driver->flag;
> > - contextRec->comm.sarea_size = pDRIInfo->SAREASize;
> > contextRec->comm.batchbuffer.offset = xvmc_driver->batch->offset;
> > contextRec->comm.batchbuffer.size = xvmc_driver->batch->size;
> > contextRec->comm.batchbuffer.handle = xvmc_driver->batch_handle;
> > @@ -515,8 +512,7 @@ static int i915_xvmc_create_context (ScrnInfoPtr
> > pScrn, XvMCContextPtr pContext,
> > contextRec->corrdata.handle = ctxpriv->corrdata_handle;
> > contextRec->corrdata.offset = ctxpriv->mcCorrdata->offset;
> > contextRec->corrdata.size = ctxpriv->mcCorrdata->size;
> > - contextRec->sarea_priv_offset = sizeof(XF86DRISAREARec);
> > - contextRec->deviceID = pI830DRI->deviceID;
> > + contextRec->deviceID = DEVICE_ID(pI830->PciInfo);
> >
> > if (IS_I915G(pI830) || IS_I915GM(pI830)) {
> > contextRec->sis.bus_addr = ctxpriv->mcStaticIndirectState->bus_addr;
> > diff --git a/src/i915_hwmc.h b/src/i915_hwmc.h
> > index 8f6557d..abd3171 100644
> > --- a/src/i915_hwmc.h
> > +++ b/src/i915_hwmc.h
> > @@ -49,7 +49,6 @@ typedef struct
> > struct hwmc_buffer psp;
> > struct hwmc_buffer psc;
> > struct hwmc_buffer corrdata;/* Correction Data Buffer */
> > - unsigned int sarea_priv_offset;
> > int deviceID;
> > } I915XvMCCreateContextRec;
> >
> > diff --git a/src/i915_video.c b/src/i915_video.c
> > index 150cf04..1ef58ac 100644
> > --- a/src/i915_video.c
> > +++ b/src/i915_video.c
> > @@ -172,7 +172,10 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn,
> > I830PortPrivPtr pPriv, int id,
> >
> > OUT_BATCH(_3DSTATE_MAP_STATE | 3);
> > OUT_BATCH(0x00000001); /* texture map #1 */
> > - OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->YBuf0offset);
> > + if (pPriv->buf)
> > + OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->YBuf0offset);
> > + else
> > + OUT_BATCH(pPriv->YBuf0offset);
> >
> > ms3 = MAPSURF_422 | MS3_USE_FENCE_REGS;
> > switch (id) {
> > @@ -281,7 +284,11 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn,
> > I830PortPrivPtr pPriv, int id,
> > OUT_BATCH(_3DSTATE_MAP_STATE | 9);
> > OUT_BATCH(0x00000007);
> >
> > - OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->YBuf0offset);
> > + if (pPriv->buf)
> > + OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->YBuf0offset);
> > + else
> > + OUT_BATCH(pPriv->YBuf0offset);
> > +
> > ms3 = MAPSURF_8BIT | MT_8BIT_I8 | MS3_USE_FENCE_REGS;
> > ms3 |= (height - 1) << MS3_HEIGHT_SHIFT;
> > ms3 |= (width - 1) << MS3_WIDTH_SHIFT;
> > @@ -294,14 +301,22 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn,
> > I830PortPrivPtr pPriv, int id,
> > else
> > OUT_BATCH(((video_pitch * 2 / 4) - 1) << MS4_PITCH_SHIFT);
> >
> > - OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->UBuf0offset);
> > + if (pPriv->buf)
> > + OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->UBuf0offset);
> > + else
> > + OUT_BATCH(pPriv->UBuf0offset);
> > +
> > ms3 = MAPSURF_8BIT | MT_8BIT_I8 | MS3_USE_FENCE_REGS;
> > ms3 |= (height / 2 - 1) << MS3_HEIGHT_SHIFT;
> > ms3 |= (width / 2 - 1) << MS3_WIDTH_SHIFT;
> > OUT_BATCH(ms3);
> > OUT_BATCH(((video_pitch / 4) - 1) << MS4_PITCH_SHIFT);
> >
> > - OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->VBuf0offset);
> > + if (pPriv->buf)
> > + OUT_RELOC(pPriv->buf, I915_GEM_DOMAIN_SAMPLER, 0,
> > pPriv->VBuf0offset);
> > + else
> > + OUT_BATCH(pPriv->VBuf0offset);
> > +
> > ms3 = MAPSURF_8BIT | MT_8BIT_I8 | MS3_USE_FENCE_REGS;
> > ms3 |= (height / 2 - 1) << MS3_HEIGHT_SHIFT;
> > ms3 |= (width / 2 - 1) << MS3_WIDTH_SHIFT;
> > diff --git a/src/i965_hwmc.c b/src/i965_hwmc.c
> > index d9b4f0d..b60b056 100644
> > --- a/src/i965_hwmc.c
> > +++ b/src/i965_hwmc.c
> > @@ -111,7 +111,6 @@ static int create_context(ScrnInfoPtr pScrn,
> > {
> > struct i965_xvmc_context *private_context, *context_dup;
> > I830Ptr I830 = I830PTR(pScrn);
> > - DRIInfoPtr driinfo = I830->pDRIInfo;
> >
> > unsigned int blocknum =
> > (((context->width + 15)/16)*((context->height+15)/16));
> > @@ -130,7 +129,6 @@ static int create_context(ScrnInfoPtr pScrn,
> > private_context->is_g4x = IS_G4X(I830);
> > private_context->is_965_q = IS_965_Q(I830);
> > private_context->comm.type = xvmc_driver->flag;
> > - private_context->comm.sarea_size = driinfo->SAREASize;
> > private_context->comm.batchbuffer.offset = xvmc_driver->batch->offset;
> > private_context->comm.batchbuffer.size = xvmc_driver->batch->size;
> > private_context->comm.batchbuffer.handle = xvmc_driver->batch_handle;
> > diff --git a/src/xvmc/Makefile.am b/src/xvmc/Makefile.am
> > index a376eb7..3d0b506 100644
> > --- a/src/xvmc/Makefile.am
> > +++ b/src/xvmc/Makefile.am
> > @@ -21,9 +21,8 @@ libIntelXvMC_la_SOURCES = intel_xvmc.c \
> > i965_xvmc.h \
> > intel_batchbuffer.c \
> > intel_batchbuffer.h \
> > - xf86dri.c \
> > - xf86dri.h \
> > - xf86dristr.h
> > + dri2.c \
> > + dri2.h
> >
> > libIntelXvMC_la_CFLAGS = @XORG_CFLAGS@ @DRM_CFLAGS@ @DRI_CFLAGS@ \
> > @XVMCLIB_CFLAGS@ -I$(top_srcdir)/src -DTRUE=1 -DFALSE=0
> > diff --git a/src/xvmc/dri2.c b/src/xvmc/dri2.c
> > new file mode 100644
> > index 0000000..f967432
> > --- /dev/null
> > +++ b/src/xvmc/dri2.c
> > @@ -0,0 +1,301 @@
> > +/*
> > + * Copyright ?? 2008 Red Hat, Inc.
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining
> > a
> > + * copy of this software and associated documentation files (the "Soft-
> > + * ware"), to deal in the Software without restriction, including without
> > + * limitation the rights to use, copy, modify, merge, publish,
> > distribute,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, provided that the above copyright
> > + * notice(s) and this permission notice appear in all copies of the Soft-
> > + * ware and that both the above copyright notice(s) and this permission
> > + * notice appear in supporting documentation.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > EXPRESS
> > + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABIL-
> > + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
> > PARTY
> > + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
> > + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
> > + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
> > USE,
> > + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
> > + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
> > PERFOR-
> > + * MANCE OF THIS SOFTWARE.
> > + *
> > + * Except as contained in this notice, the name of a copyright holder
> > shall
> > + * not be used in advertising or otherwise to promote the sale, use or
> > + * other dealings in this Software without prior written authorization of
> > + * the copyright holder.
> > + *
> > + * Authors:
> > + * Kristian H??gsberg (krh at redhat.com)
> > + */
> > +
> > +
> > +#define NEED_REPLIES
> > +#include <X11/Xlibint.h>
> > +#include <X11/extensions/Xext.h>
> > +#include <X11/extensions/extutil.h>
> > +#include <X11/extensions/dri2proto.h>
> > +#include "xf86drm.h"
> > +#include "dri2.h"
> > +
> > +static char dri2ExtensionName[] = DRI2_NAME;
> > +static XExtensionInfo *dri2Info;
> > +static XEXT_GENERATE_CLOSE_DISPLAY (DRI2CloseDisplay, dri2Info)
> > +static /* const */ XExtensionHooks dri2ExtensionHooks = {
> > + NULL, /* create_gc */
> > + NULL, /* copy_gc */
> > + NULL, /* flush_gc */
> > + NULL, /* free_gc */
> > + NULL, /* create_font */
> > + NULL, /* free_font */
> > + DRI2CloseDisplay, /* close_display */
> > + NULL, /* wire_to_event */
> > + NULL, /* event_to_wire */
> > + NULL, /* error */
> > + NULL, /* error_string */
> > +};
> > +
> > +static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay, dri2Info,
> > + dri2ExtensionName,
> > + &dri2ExtensionHooks,
> > + 0, NULL)
> > +
> > +Bool DRI2QueryExtension(Display *dpy, int *eventBase, int *errorBase)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > +
> > + if (XextHasExtension(info)) {
> > + *eventBase = info->codes->first_event;
> > + *errorBase = info->codes->first_error;
> > + return True;
> > + }
> > +
> > + return False;
> > +}
> > +
> > +Bool DRI2QueryVersion(Display *dpy, int *major, int *minor)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay (dpy);
> > + xDRI2QueryVersionReply rep;
> > + xDRI2QueryVersionReq *req;
> > +
> > + XextCheckExtension (dpy, info, dri2ExtensionName, False);
> > +
> > + LockDisplay(dpy);
> > + GetReq(DRI2QueryVersion, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2QueryVersion;
> > + req->majorVersion = DRI2_MAJOR;
> > + req->minorVersion = DRI2_MINOR;
> > + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return False;
> > + }
> > + *major = rep.majorVersion;
> > + *minor = rep.minorVersion;
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +
> > + return True;
> > +}
> > +
> > +Bool DRI2Connect(Display *dpy, XID window,
> > + char **driverName, char **deviceName)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > + xDRI2ConnectReply rep;
> > + xDRI2ConnectReq *req;
> > +
> > + XextCheckExtension (dpy, info, dri2ExtensionName, False);
> > +
> > + LockDisplay(dpy);
> > + GetReq(DRI2Connect, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2Connect;
> > + req->window = window;
> > + req->driverType = DRI2DriverDRI;
> > + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return False;
> > + }
> > +
> > + if (rep.driverNameLength == 0 && rep.deviceNameLength == 0) {
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return False;
> > + }
> > +
> > + *driverName = Xmalloc(rep.driverNameLength + 1);
> > + if (*driverName == NULL) {
> > + _XEatData(dpy,
> > + ((rep.driverNameLength + 3) & ~3) +
> > + ((rep.deviceNameLength + 3) & ~3));
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return False;
> > + }
> > + _XReadPad(dpy, *driverName, rep.driverNameLength);
> > + (*driverName)[rep.driverNameLength] = '\0';
> > +
> > + *deviceName = Xmalloc(rep.deviceNameLength + 1);
> > + if (*deviceName == NULL) {
> > + Xfree(*driverName);
> > + _XEatData(dpy, ((rep.deviceNameLength + 3) & ~3));
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return False;
> > + }
> > + _XReadPad(dpy, *deviceName, rep.deviceNameLength);
> > + (*deviceName)[rep.deviceNameLength] = '\0';
> > +
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +
> > + return True;
> > +}
> > +
> > +Bool DRI2Authenticate(Display *dpy, XID window, drm_magic_t magic)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > + xDRI2AuthenticateReq *req;
> > + xDRI2AuthenticateReply rep;
> > +
> > + XextCheckExtension (dpy, info, dri2ExtensionName, False);
> > +
> > + LockDisplay(dpy);
> > + GetReq(DRI2Authenticate, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2Authenticate;
> > + req->window = window;
> > + req->magic = magic;
> > +
> > + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return False;
> > + }
> > +
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +
> > + return rep.authenticated;
> > +}
> > +
> > +void DRI2CreateDrawable(Display *dpy, XID drawable)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > + xDRI2CreateDrawableReq *req;
> > +
> > + XextSimpleCheckExtension (dpy, info, dri2ExtensionName);
> > +
> > + LockDisplay(dpy);
> > + GetReq(DRI2CreateDrawable, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2CreateDrawable;
> > + req->drawable = drawable;
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +}
> > +
> > +void DRI2DestroyDrawable(Display *dpy, XID drawable)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > + xDRI2DestroyDrawableReq *req;
> > +
> > + XextSimpleCheckExtension (dpy, info, dri2ExtensionName);
> > +
> > + XSync(dpy, False);
> > +
> > + LockDisplay(dpy);
> > + GetReq(DRI2DestroyDrawable, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2DestroyDrawable;
> > + req->drawable = drawable;
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +}
> > +
> > +DRI2Buffer *DRI2GetBuffers(Display *dpy, XID drawable,
> > + int *width, int *height,
> > + unsigned int *attachments, int count,
> > + int *outCount)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > + xDRI2GetBuffersReply rep;
> > + xDRI2GetBuffersReq *req;
> > + DRI2Buffer *buffers;
> > + xDRI2Buffer repBuffer;
> > + CARD32 *p;
> > + int i;
> > +
> > + XextCheckExtension (dpy, info, dri2ExtensionName, False);
> > +
> > + LockDisplay(dpy);
> > + GetReqExtra(DRI2GetBuffers, count * 4, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2GetBuffers;
> > + req->drawable = drawable;
> > + req->count = count;
> > + p = (CARD32 *) &req[1];
> > + for (i = 0; i < count; i++)
> > + p[i] = attachments[i];
> > +
> > + if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return NULL;
> > + }
> > +
> > + *width = rep.width;
> > + *height = rep.height;
> > + *outCount = rep.count;
> > +
> > + buffers = Xmalloc(rep.count * sizeof buffers[0]);
> > + if (buffers == NULL) {
> > + _XEatData(dpy, rep.count * sizeof repBuffer);
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > + return NULL;
> > + }
> > +
> > + for (i = 0; i < rep.count; i++) {
> > + _XReadPad(dpy, (char *) &repBuffer, sizeof repBuffer);
> > + buffers[i].attachment = repBuffer.attachment;
> > + buffers[i].name = repBuffer.name;
> > + buffers[i].pitch = repBuffer.pitch;
> > + buffers[i].cpp = repBuffer.cpp;
> > + buffers[i].flags = repBuffer.flags;
> > + }
> > +
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +
> > + return buffers;
> > +}
> > +
> > +void DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region,
> > + CARD32 dest, CARD32 src)
> > +{
> > + XExtDisplayInfo *info = DRI2FindDisplay(dpy);
> > + xDRI2CopyRegionReq *req;
> > + xDRI2CopyRegionReply rep;
> > +
> > + XextSimpleCheckExtension (dpy, info, dri2ExtensionName);
> > +
> > + LockDisplay(dpy);
> > + GetReq(DRI2CopyRegion, req);
> > + req->reqType = info->codes->major_opcode;
> > + req->dri2ReqType = X_DRI2CopyRegion;
> > + req->drawable = drawable;
> > + req->region = region;
> > + req->dest = dest;
> > + req->src = src;
> > +
> > + _XReply(dpy, (xReply *)&rep, 0, xFalse);
> > +
> > + UnlockDisplay(dpy);
> > + SyncHandle();
> > +}
> > diff --git a/src/xvmc/dri2.h b/src/xvmc/dri2.h
> > new file mode 100644
> > index 0000000..356c6bc
> > --- /dev/null
> > +++ b/src/xvmc/dri2.h
> > @@ -0,0 +1,70 @@
> > +/*
> > + * Copyright ?? 2007,2008 Red Hat, Inc.
> > + *
> > + * Permission is hereby granted, free of charge, to any person obtaining
> > a
> > + * copy of this software and associated documentation files (the "Soft-
> > + * ware"), to deal in the Software without restriction, including without
> > + * limitation the rights to use, copy, modify, merge, publish,
> > distribute,
> > + * and/or sell copies of the Software, and to permit persons to whom the
> > + * Software is furnished to do so, provided that the above copyright
> > + * notice(s) and this permission notice appear in all copies of the Soft-
> > + * ware and that both the above copyright notice(s) and this permission
> > + * notice appear in supporting documentation.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > EXPRESS
> > + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > MERCHANTABIL-
> > + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD
> > PARTY
> > + * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
> > + * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
> > + * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
> > USE,
> > + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
> > + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
> > PERFOR-
> > + * MANCE OF THIS SOFTWARE.
> > + *
> > + * Except as contained in this notice, the name of a copyright holder
> > shall
> > + * not be used in advertising or otherwise to promote the sale, use or
> > + * other dealings in this Software without prior written authorization of
> > + * the copyright holder.
> > + *
> > + * Authors:
> > + * Kristian H??gsberg (krh at redhat.com)
> > + */
> > +
> > +#ifndef _DRI2_H_
> > +#define _DRI2_H_
> > +
> > +#include <X11/extensions/Xfixes.h>
> > +#include <X11/extensions/dri2tokens.h>
> > +
> > +typedef struct {
> > + unsigned int attachment;
> > + unsigned int name;
> > + unsigned int pitch;
> > + unsigned int cpp;
> > + unsigned int flags;
> > +} DRI2Buffer;
> > +
> > +extern Bool
> > +DRI2QueryExtension(Display *display, int *eventBase, int *errorBase);
> > +extern Bool
> > +DRI2QueryVersion(Display *display, int *major, int *minor);
> > +extern Bool
> > +DRI2Connect(Display *display, XID window,
> > + char **driverName, char **deviceName);
> > +extern Bool
> > +DRI2Authenticate(Display *display, XID window, drm_magic_t magic);
> > +extern void
> > +DRI2CreateDrawable(Display *display, XID drawable);
> > +extern void
> > +DRI2DestroyDrawable(Display *display, XID handle);
> > +extern DRI2Buffer *
> > +DRI2GetBuffers(Display *dpy, XID drawable,
> > + int *width, int *height,
> > + unsigned int *attachments, int count,
> > + int *outCount);
> > +
> > +extern void
> > +DRI2CopyRegion(Display *dpy, XID drawable, XserverRegion region,
> > + CARD32 dest, CARD32 src);
> > +
> > +#endif
> > diff --git a/src/xvmc/i915_xvmc.c b/src/xvmc/i915_xvmc.c
> > index c32073a..d6f7f01 100644
> > --- a/src/xvmc/i915_xvmc.c
> > +++ b/src/xvmc/i915_xvmc.c
> > @@ -1560,7 +1560,6 @@ static Status i915_xvmc_mc_create_context(Display
> > *display, XvMCContext *context
> > {
> > i915XvMCContext *pI915XvMC = NULL;
> > I915XvMCCreateContextRec *tmpComm = NULL;
> > - drm_sarea_t *pSAREA;
> >
> > XVMC_DBG("%s\n", __FUNCTION__);
> >
> > @@ -1612,15 +1611,11 @@ static Status i915_xvmc_mc_create_context(Display
> > *display, XvMCContext *context
> > pI915XvMC->corrdata.handle = tmpComm->corrdata.handle;
> > pI915XvMC->corrdata.offset = tmpComm->corrdata.offset;
> > pI915XvMC->corrdata.size = tmpComm->corrdata.size;
> > - pI915XvMC->sarea_priv_offset = tmpComm->sarea_priv_offset;
> >
> > /* Must free the private data we were passed from X */
> > XFree(priv_data);
> > priv_data = NULL;
> >
> > - pSAREA = (drm_sarea_t *)xvmc_driver->sarea_address;
> > - pI915XvMC->sarea = (drmI830Sarea*)((char*)pSAREA +
> > pI915XvMC->sarea_priv_offset);
> > -
> > if (i915_xvmc_map_buffers(pI915XvMC)) {
> > i915_xvmc_unmap_buffers(pI915XvMC);
> > free(pI915XvMC);
> > @@ -2042,11 +2037,6 @@ static int i915_xvmc_mc_get_surface_status(Display
> > *display,
> > }
> > }
> >
> > - if (pI915Surface->last_render &&
> > - (pI915Surface->last_render > pI915XvMC->sarea->last_dispatch)) {
> > - *stat |= XVMC_RENDERING;
> > - }
> > -
> > PPTHREAD_MUTEX_UNLOCK();
> > return 0;
> > }
> > @@ -2457,12 +2447,7 @@ Status i915_xvmc_get_subpict_status(Display
> > *display, XvMCSubpicture *subpicture
> > return XvMCBadSubpicture;
> >
> > PPTHREAD_MUTEX_LOCK();
> > - /* FIXME: */
> > - if (pI915Subpicture->last_render &&
> > - (pI915Subpicture->last_render > pI915XvMC->sarea->last_dispatch))
> > {
> > - *stat |= XVMC_RENDERING;
> > - }
> > -
> > +
> > PPTHREAD_MUTEX_UNLOCK();
> > return Success;
> > }
> > diff --git a/src/xvmc/i915_xvmc.h b/src/xvmc/i915_xvmc.h
> > index af0a77d..de9eb78 100644
> > --- a/src/xvmc/i915_xvmc.h
> > +++ b/src/xvmc/i915_xvmc.h
> > @@ -55,8 +55,6 @@ typedef struct _i915XvMCContext {
> > unsigned int yStride;
> > unsigned int uvStride;
> > unsigned short ref;
> > - volatile drmI830Sarea *sarea;
> > - unsigned int sarea_priv_offset; /* Offset in sarea to private
> > part */
> > unsigned int depth;
> > XvPortID port; /* Xv Port ID when displaying */
> > int haveXv; /* Have I initialized the Xv
> > diff --git a/src/xvmc/intel_xvmc.c b/src/xvmc/intel_xvmc.c
> > index 4b73caa..7910555 100644
> > --- a/src/xvmc/intel_xvmc.c
> > +++ b/src/xvmc/intel_xvmc.c
> > @@ -100,21 +100,12 @@ unsigned int mb_bytes_420[] = {
> >
> > int DEBUG;
> >
> > -static int error_base;
> > -static int event_base;
> > -
> > static void intel_xvmc_debug_init(void)
> > {
> > if (getenv("INTEL_XVMC_DEBUG"))
> > DEBUG = 1;
> > }
> >
> > -/* locking */
> > -static void intel_xvmc_try_heavy_lock(drm_context_t ctx)
> > -{
> > - drmGetLock(xvmc_driver->fd, ctx, 0);
> > -}
> > -
> > void LOCK_HARDWARE(drm_context_t ctx)
> > {
> > char __ret = 0;
> > @@ -122,19 +113,13 @@ void LOCK_HARDWARE(drm_context_t ctx)
> > PPTHREAD_MUTEX_LOCK();
> > assert(!xvmc_driver->locked);
> >
> > - DRM_CAS(xvmc_driver->driHwLock, ctx,
> > - (DRM_LOCK_HELD | ctx), __ret);
> > -
> > - if (__ret)
> > - intel_xvmc_try_heavy_lock(ctx);
> > -
> > xvmc_driver->locked = 1;
> > }
> >
> > void UNLOCK_HARDWARE(drm_context_t ctx)
> > {
> > xvmc_driver->locked = 0;
> > - DRM_UNLOCK(xvmc_driver->fd, xvmc_driver->driHwLock, ctx);
> > +
> > PPTHREAD_MUTEX_UNLOCK();
> > }
> >
> > @@ -269,17 +254,18 @@ _X_EXPORT Status XvMCCreateContext(Display *display,
> > XvPortID port,
> > int flags, XvMCContext *context)
> > {
> > Status ret;
> > - drm_sarea_t *pSAREA;
> > - char *curBusID;
> > CARD32 *priv_data = NULL;
> > struct _intel_xvmc_common *comm;
> > drm_magic_t magic;
> > int major, minor;
> > + int error_base;
> > + int event_base;
> > int priv_count;
> > int isCapable;
> > int screen = DefaultScreen(display);
> > intel_xvmc_context_ptr intel_ctx;
> > int fd;
> > + char *driverName = NULL, *deviceName = NULL;
> >
> > /* Verify Obvious things first */
> > if (!display || !context)
> > @@ -354,7 +340,6 @@ _X_EXPORT Status XvMCCreateContext(Display *display,
> > XvPortID port,
> >
> > XVMC_INFO("decoder type is %s",
> > intel_xvmc_decoder_string(comm->type));
> >
> > - xvmc_driver->sarea_size = comm->sarea_size;
> > xvmc_driver->batchbuffer.handle = comm->batchbuffer.handle;
> > xvmc_driver->batchbuffer.offset = comm->batchbuffer.offset;
> > xvmc_driver->batchbuffer.size = comm->batchbuffer.size;
> > @@ -367,70 +352,60 @@ _X_EXPORT Status XvMCCreateContext(Display *display,
> > XvPortID port,
> > }
> > intel_ctx->context = context;
> >
> > - ret = uniDRIQueryDirectRenderingCapable(display, screen,
> > - &isCapable);
> > - if (!ret || !isCapable) {
> > - XVMC_ERR("Direct Rendering is not available on this system!");
> > - XFree(priv_data);
> > - return BadValue;
> > - }
> > + /* check DRI2 */
> > + ret = Success;
> > + xvmc_driver->fd = -1;
> >
> > - if (!uniDRIOpenConnection(display, screen,
> > - &xvmc_driver->hsarea, &curBusID)) {
> > - XVMC_ERR("Could not open DRI connection to X server!");
> > - XFree(priv_data);
> > - return BadValue;
> > - }
> > + do {
> > + if (!DRI2QueryExtension(display, &event_base, &error_base)) {
> > + ret = BadValue;
> > + break;
> > + }
> > +
> > + if (!DRI2QueryVersion(display, &major, &minor)) {
> > + ret = BadValue;
> > + break;
> > + }
> > +
> > + if (!DRI2Connect(display, RootWindow(display, screen),
> > + &driverName, &deviceName)) {
> > + ret = BadValue;
> > + break;
> > + }
> > +
> > + xvmc_driver->fd = open(deviceName, O_RDWR);
> > +
> > + if (xvmc_driver->fd < 0) {
> > + XVMC_ERR("Failed to open drm device: %s\n", strerror(errno));
> > + ret = BadValue;
> > + break;
> > + }
> > +
> > + if (drmGetMagic(xvmc_driver->fd, &magic)) {
> > + XVMC_ERR("Failed to get magic\n");
> > + ret = BadValue;
> > + break;
> > + }
> > +
> > + if (!DRI2Authenticate(display, RootWindow(display, screen),
> > magic)) {
> > + XVMC_ERR("Failed to authenticate magic %d\n", magic);
> > + ret = BadValue;
> > + break;
> > + }
> > + } while (0);
> > +
> > + XFree(driverName);
> > + XFree(deviceName);
> >
> > - /* Open DRI Device */
> > - if((fd = drmOpen("i915", curBusID)) < 0) {
> > - XVMC_ERR("DRM Device could not be opened.");
> > + if (ret != Success) {
> > XFree(priv_data);
> > - XFree(curBusID);
> > - return BadValue;
> > - }
> > -
> > - xvmc_driver->fd = fd;
> > -
> > - strncpy(xvmc_driver->busID, curBusID, 20);
> > - xvmc_driver->busID[20] = '\0';
> > - XFree(curBusID);
> > -
> > - /* Get magic number */
> > - drmGetMagic(xvmc_driver->fd, &magic);
> > - // context->flags = (unsigned long)magic;
> > -
> > - if (!uniDRIAuthConnection(display, screen, magic)) {
> > - XVMC_ERR("[XvMC]: X server did not allow DRI. Check permissions.");
> > - xvmc_driver = NULL;
> > - XFree(priv_data);
> > - return BadAlloc;
> > - }
> > + context->privData = NULL;
> >
> > - /*
> > - * Map DRI Sarea. we always want it right?
> > - */
> > - if (drmMap(xvmc_driver->fd, xvmc_driver->hsarea,
> > - xvmc_driver->sarea_size, &xvmc_driver->sarea_address) < 0)
> > {
> > - XVMC_ERR("Unable to map DRI SAREA.\n");
> > - xvmc_driver = NULL;
> > - XFree(priv_data);
> > - return BadAlloc;
> > - }
> > - pSAREA = (drm_sarea_t *)xvmc_driver->sarea_address;
> > - xvmc_driver->driHwLock = (drmLock *)&pSAREA->lock;
> > - pthread_mutex_init(&xvmc_driver->ctxmutex, NULL);
> > + if (xvmc_driver->fd >= 0)
> > + close(xvmc_driver->fd);
> >
> > - /* context_id is alloc in _xvmc_create_context */
> > - if (!uniDRICreateContext(display, screen, DefaultVisual(display,
> > screen),
> > - context->context_id,
> > - &intel_ctx->hw_context)) {
> > - XVMC_ERR("Could not create DRI context for xvmc ctx %d.",
> > - (int)context->context_id);
> > - XFree(priv_data);
> > - context->privData = NULL;
> > - drmUnmap(xvmc_driver->sarea_address, xvmc_driver->sarea_size);
> > - return BadAlloc;
> > + xvmc_driver = NULL;
> > + return ret;
> > }
> >
> > /* call driver hook.
> > @@ -439,12 +414,13 @@ _X_EXPORT Status XvMCCreateContext(Display *display,
> > XvPortID port,
> > if (ret) {
> > XVMC_ERR("driver create context failed\n");
> > XFree(priv_data);
> > - drmUnmap(xvmc_driver->sarea_address, xvmc_driver->sarea_size);
> > + context->privData = NULL;
> > + xvmc_driver = NULL;
> > return ret;
> > }
> >
> > + pthread_mutex_init(&xvmc_driver->ctxmutex, NULL);
> > intelInitBatchBuffer();
> > -
> > intel_xvmc_dump_open();
> >
> > return Success;
> > @@ -473,7 +449,6 @@ _X_EXPORT Status XvMCDestroyContext(Display *display,
> > XvMCContext *context)
> > return ret;
> > }
> >
> > - uniDRIDestroyContext(display, screen, context->context_id);
> > intel_xvmc_free_context(context->context_id);
> >
> > ret = _xvmc_destroy_context(display, context);
> > @@ -483,18 +458,13 @@ _X_EXPORT Status XvMCDestroyContext(Display
> > *display, XvMCContext *context)
> > }
> >
> > if (xvmc_driver->num_ctx == 0) {
> > - uniDRICloseConnection(display, screen);
> > -
> > pthread_mutex_destroy(&xvmc_driver->ctxmutex);
> >
> > - drmUnmap(xvmc_driver->sarea_address, xvmc_driver->sarea_size);
> > -
> > if (xvmc_driver->fd >= 0)
> > - drmClose(xvmc_driver->fd);
> > + close(xvmc_driver->fd);
> > +
> > xvmc_driver->fd = -1;
> > -
> > intelFiniBatchBuffer();
> > -
> > intel_xvmc_dump_close();
> > }
> > return Success;
> > diff --git a/src/xvmc/intel_xvmc.h b/src/xvmc/intel_xvmc.h
> > index 9ef2121..a21bf70 100644
> > --- a/src/xvmc/intel_xvmc.h
> > +++ b/src/xvmc/intel_xvmc.h
> > @@ -51,9 +51,6 @@
> > #include <X11/extensions/Xvlib.h>
> > #include <X11/extensions/XvMC.h>
> > #include <X11/extensions/XvMClib.h>
> > -#include <drm_sarea.h>
> > -
> > -#include "xf86dri.h"
> >
> > #include "intel_batchbuffer.h"
> >
> > @@ -129,11 +126,6 @@ typedef struct _intel_xvmc_driver {
> > int screen; /* current screen num*/
> >
> > int fd; /* drm file handler */
> > - drm_handle_t hsarea; /* DRI open connect */
> > - char busID[32];
> > -
> > - unsigned int sarea_size;
> > - drmAddress sarea_address;
> >
> > struct {
> > unsigned int start_offset;
> > @@ -155,9 +147,7 @@ typedef struct _intel_xvmc_driver {
> >
> > sigset_t sa_mask;
> > pthread_mutex_t ctxmutex;
> > - int lock; /* Lightweight lock to avoid locking twice */
> > int locked;
> > - drmLock *driHwLock;
> >
> > int num_ctx;
> > intel_xvmc_context_ptr ctx_list;
> > diff --git a/src/xvmc/xf86dri.c b/src/xvmc/xf86dri.c
> > deleted file mode 100644
> > index 9ea919a..0000000
> > --- a/src/xvmc/xf86dri.c
> > +++ /dev/null
> > @@ -1,565 +0,0 @@
> > -/**************************************************************************
> > -
> > -Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
> > -Copyright 2000 VA Linux Systems, Inc.
> > -All Rights Reserved.
> > -
> > -Permission is hereby granted, free of charge, to any person obtaining a
> > -copy of this software and associated documentation files (the
> > -"Software"), to deal in the Software without restriction, including
> > -without limitation the rights to use, copy, modify, merge, publish,
> > -distribute, sub license, and/or sell copies of the Software, and to
> > -permit persons to whom the Software is furnished to do so, subject to
> > -the following conditions:
> > -
> > -The above copyright notice and this permission notice (including the
> > -next paragraph) shall be included in all copies or substantial portions
> > -of the Software.
> > -
> > -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> > -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> > -IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> > -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> > -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> > -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> > -
> > -**************************************************************************/
> > -
> > -/*
> > - * Authors:
> > - * Kevin E. Martin <martin at valinux.com>
> > - * Jens Owen <jens at tungstengraphics.com>
> > - * Rickard E. (Rik) Faith <faith at valinux.com>
> > - *
> > - */
> > -
> > -/* THIS IS NOT AN X CONSORTIUM STANDARD */
> > -
> > -#define NEED_REPLIES
> > -#include <X11/Xlibint.h>
> > -#include <X11/extensions/Xext.h>
> > -#include <X11/extensions/extutil.h>
> > -#include "xf86dristr.h"
> > -
> > -static XExtensionInfo _xf86dri_info_data;
> > -static XExtensionInfo *xf86dri_info = &_xf86dri_info_data;
> > -static char xf86dri_extension_name[] = XF86DRINAME;
> > -
> > -#define uniDRICheckExtension(dpy,i,val) \
> > - XextCheckExtension (dpy, i, xf86dri_extension_name, val)
> > -
> > -/*****************************************************************************
> > - *
> > *
> > - * private utility routines *
> > - *
> > *
> > -
> > *****************************************************************************/
> > -
> > -static int close_display(Display * dpy, XExtCodes * extCodes);
> > -static /* const */ XExtensionHooks xf86dri_extension_hooks = {
> > - NULL, /* create_gc */
> > - NULL, /* copy_gc */
> > - NULL, /* flush_gc */
> > - NULL, /* free_gc */
> > - NULL, /* create_font */
> > - NULL, /* free_font */
> > - close_display, /* close_display */
> > - NULL, /* wire_to_event */
> > - NULL, /* event_to_wire */
> > - NULL, /* error */
> > - NULL, /* error_string */
> > -};
> > -
> > -static
> > -XEXT_GENERATE_FIND_DISPLAY(find_display, xf86dri_info,
> > - xf86dri_extension_name, &xf86dri_extension_hooks, 0, NULL)
> > -
> > - static XEXT_GENERATE_CLOSE_DISPLAY(close_display, xf86dri_info)
> > -
> > -/*****************************************************************************
> > - *
> > *
> > - * public XFree86-DRI Extension routines *
> > - *
> > *
> > -
> > *****************************************************************************/
> > -#if 0
> > -#include <stdio.h>
> > -#define TRACE(msg, arg...) fprintf(stderr,"uniDRI" msg "\n", ##arg);
> > -#else
> > -#define TRACE(msg, arg...)
> > -#endif
> > -Bool
> > -uniDRIQueryExtension(Display *dpy, int *event_basep, int *error_basep)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > -
> > - TRACE("QueryExtension...");
> > - if (XextHasExtension(info)) {
> > - *event_basep = info->codes->first_event;
> > - *error_basep = info->codes->first_error;
> > - TRACE("QueryExtension... return True");
> > - return True;
> > - } else {
> > - TRACE("QueryExtension... return False");
> > - return False;
> > - }
> > -}
> > -
> > -Bool
> > -uniDRIQueryVersion(Display *dpy, int *majorVersion, int *minorVersion,
> > - int *patchVersion)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIQueryVersionReply rep;
> > - xXF86DRIQueryVersionReq *req;
> > -
> > - TRACE("QueryVersion...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIQueryVersion, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIQueryVersion;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("QueryVersion... return False");
> > - return False;
> > - }
> > - *majorVersion = rep.majorVersion;
> > - *minorVersion = rep.minorVersion;
> > - *patchVersion = rep.patchVersion;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("QueryVersion... %d.%d.%d return True", rep.majorVersion,
> > - rep.minorVersion, rep.patchVersion);
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIQueryDirectRenderingCapable(Display *dpy, int screen, Bool
> > *isCapable)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIQueryDirectRenderingCapableReply rep;
> > - xXF86DRIQueryDirectRenderingCapableReq *req;
> > -
> > - TRACE("QueryDirectRenderingCapable...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIQueryDirectRenderingCapable, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIQueryDirectRenderingCapable;
> > - req->screen = screen;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("QueryDirectRenderingCapable... return False");
> > - return False;
> > - }
> > - *isCapable = rep.isCapable;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("QueryDirectRenderingCapable... %s return True",
> > - rep.isCapable ? "true" : "false");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIOpenConnection(Display *dpy, int screen,
> > - drm_handle_t *hSAREA, char **busIdString)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIOpenConnectionReply rep;
> > - xXF86DRIOpenConnectionReq *req;
> > -
> > - TRACE("OpenConnection...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIOpenConnection, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIOpenConnection;
> > - req->screen = screen;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("OpenConnection... return False");
> > - return False;
> > - }
> > -
> > - *hSAREA = rep.hSAREALow;
> > -#ifdef LONG64
> > - if (sizeof(drm_handle_t) == 8) {
> > - *hSAREA |= ((unsigned long)rep.hSAREAHigh) << 32;
> > - }
> > -#endif
> > - if (rep.length) {
> > - if (!(*busIdString = (char *)Xcalloc(rep.busIdStringLength + 1, 1))) {
> > - _XEatData(dpy, ((rep.busIdStringLength + 3) & ~3));
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("OpenConnection... return False");
> > - return False;
> > - }
> > - _XReadPad(dpy, *busIdString, rep.busIdStringLength);
> > - } else {
> > - *busIdString = NULL;
> > - }
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("OpenConnection... busid %s return True",
> > - *busIdString ? *busIdString : "null");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIAuthConnection(Display *dpy, int screen, drm_magic_t magic)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIAuthConnectionReq *req;
> > - xXF86DRIAuthConnectionReply rep;
> > -
> > - TRACE("AuthConnection...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIAuthConnection, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIAuthConnection;
> > - req->screen = screen;
> > - req->magic = magic;
> > - rep.authenticated = 0;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse) || !rep.authenticated)
> > {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("AuthConnection... return False");
> > - return False;
> > - }
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("AuthConnection... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRICloseConnection(Display *dpy, int screen)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRICloseConnectionReq *req;
> > -
> > - TRACE("CloseConnection...");
> > -
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRICloseConnection, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRICloseConnection;
> > - req->screen = screen;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("CloseConnection... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIGetClientDriverName(Display *dpy, int screen, int
> > *ddxDriverMajorVersion,
> > - int *ddxDriverMinorVersion, int *ddxDriverPatchVersion,
> > - char **clientDriverName)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIGetClientDriverNameReply rep;
> > - xXF86DRIGetClientDriverNameReq *req;
> > -
> > - TRACE("GetClientDriverName...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIGetClientDriverName, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIGetClientDriverName;
> > - req->screen = screen;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetClientDriverName... return False");
> > - return False;
> > - }
> > -
> > - *ddxDriverMajorVersion = rep.ddxDriverMajorVersion;
> > - *ddxDriverMinorVersion = rep.ddxDriverMinorVersion;
> > - *ddxDriverPatchVersion = rep.ddxDriverPatchVersion;
> > -
> > - if (rep.length) {
> > - if (!(*clientDriverName =
> > - (char *)Xcalloc(rep.clientDriverNameLength + 1, 1))) {
> > - _XEatData(dpy, ((rep.clientDriverNameLength + 3) & ~3));
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetClientDriverName... return False");
> > - return False;
> > - }
> > - _XReadPad(dpy, *clientDriverName, rep.clientDriverNameLength);
> > - } else {
> > - *clientDriverName = NULL;
> > - }
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetClientDriverName... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRICreateContextWithConfig(Display *dpy, int screen, int configID,
> > - XID context, drm_context_t *hHWContext)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRICreateContextReply rep;
> > - xXF86DRICreateContextReq *req;
> > -
> > - TRACE("CreateContext... id %d", context);
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRICreateContext, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRICreateContext;
> > - req->visual = configID;
> > - req->screen = screen;
> > - req->context = context;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("CreateContext... return False");
> > - return False;
> > - }
> > - *hHWContext = rep.hHWContext;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("CreateContext... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRICreateContext(Display *dpy, int screen, Visual *visual,
> > - XID context, drm_context_t *hHWContext)
> > -{
> > - return uniDRICreateContextWithConfig(dpy, screen,
> > - visual->visualid, context, hHWContext);
> > -}
> > -
> > -Bool
> > -uniDRIDestroyContext(Display * ndpy, int screen, XID context)
> > -{
> > - Display *const dpy = (Display *) ndpy;
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIDestroyContextReq *req;
> > -
> > - TRACE("DestroyContext... id %d", context);
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIDestroyContext, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIDestroyContext;
> > - req->screen = screen;
> > - req->context = context;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("DestroyContext... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRICreateDrawable(Display * ndpy, int screen,
> > - Drawable drawable, drm_drawable_t * hHWDrawable)
> > -{
> > - Display *const dpy = (Display *) ndpy;
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRICreateDrawableReply rep;
> > - xXF86DRICreateDrawableReq *req;
> > -
> > - TRACE("CreateDrawable...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRICreateDrawable, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRICreateDrawable;
> > - req->screen = screen;
> > - req->drawable = drawable;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("CreateDrawable... return False");
> > - return False;
> > - }
> > - *hHWDrawable = rep.hHWDrawable;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("CreateDrawable... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIDestroyDrawable(Display * ndpy, int screen, Drawable drawable)
> > -{
> > - Display *const dpy = (Display *) ndpy;
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIDestroyDrawableReq *req;
> > -
> > - TRACE("DestroyDrawable...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIDestroyDrawable, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIDestroyDrawable;
> > - req->screen = screen;
> > - req->drawable = drawable;
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("DestroyDrawable... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIGetDrawableInfo(Display * dpy, int screen, Drawable drawable,
> > - unsigned int *index, unsigned int *stamp,
> > - int *X, int *Y, int *W, int *H,
> > - int *numClipRects, drm_clip_rect_t ** pClipRects,
> > - int *backX, int *backY,
> > - int *numBackClipRects, drm_clip_rect_t ** pBackClipRects)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIGetDrawableInfoReply rep;
> > - xXF86DRIGetDrawableInfoReq *req;
> > - int total_rects;
> > -
> > - TRACE("GetDrawableInfo...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIGetDrawableInfo, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIGetDrawableInfo;
> > - req->screen = screen;
> > - req->drawable = drawable;
> > -
> > - if (!_XReply(dpy, (xReply *) & rep, 1, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetDrawableInfo... return False");
> > - return False;
> > - }
> > - *index = rep.drawableTableIndex;
> > - *stamp = rep.drawableTableStamp;
> > - *X = (int)rep.drawableX;
> > - *Y = (int)rep.drawableY;
> > - *W = (int)rep.drawableWidth;
> > - *H = (int)rep.drawableHeight;
> > - *numClipRects = rep.numClipRects;
> > - total_rects = *numClipRects;
> > -
> > - *backX = rep.backX;
> > - *backY = rep.backY;
> > - *numBackClipRects = rep.numBackClipRects;
> > - total_rects += *numBackClipRects;
> > -
> > -#if 0
> > - /* Because of the fix in Xserver/GL/dri/xf86dri.c, this check breaks
> > - * backwards compatibility (Because of the >> 2 shift) but the fix
> > - * enables multi-threaded apps to work.
> > - */
> > - if (rep.length != ((((SIZEOF(xXF86DRIGetDrawableInfoReply) -
> > - SIZEOF(xGenericReply) +
> > - total_rects * sizeof(drm_clip_rect_t)) +
> > - 3) & ~3) >> 2)) {
> > - _XEatData(dpy, rep.length);
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetDrawableInfo... return False");
> > - return False;
> > - }
> > -#endif
> > -
> > - if (*numClipRects) {
> > - int len = sizeof(drm_clip_rect_t) * (*numClipRects);
> > -
> > - *pClipRects = (drm_clip_rect_t *) Xcalloc(len, 1);
> > - if (*pClipRects)
> > - _XRead(dpy, (char *)*pClipRects, len);
> > - } else {
> > - *pClipRects = NULL;
> > - }
> > -
> > - if (*numBackClipRects) {
> > - int len = sizeof(drm_clip_rect_t) * (*numBackClipRects);
> > -
> > - *pBackClipRects = (drm_clip_rect_t *) Xcalloc(len, 1);
> > - if (*pBackClipRects)
> > - _XRead(dpy, (char *)*pBackClipRects, len);
> > - } else {
> > - *pBackClipRects = NULL;
> > - }
> > -
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetDrawableInfo... return True");
> > - return True;
> > -}
> > -
> > -Bool
> > -uniDRIGetDeviceInfo(Display *dpy, int screen, drm_handle_t *hFrameBuffer,
> > - int *fbOrigin, int *fbSize, int *fbStride,
> > - int *devPrivateSize, void **pDevPrivate)
> > -{
> > - XExtDisplayInfo *info = find_display(dpy);
> > - xXF86DRIGetDeviceInfoReply rep;
> > - xXF86DRIGetDeviceInfoReq *req;
> > -
> > - TRACE("GetDeviceInfo...");
> > - uniDRICheckExtension(dpy, info, False);
> > -
> > - LockDisplay(dpy);
> > - GetReq(XF86DRIGetDeviceInfo, req);
> > - req->reqType = info->codes->major_opcode;
> > - req->driReqType = X_XF86DRIGetDeviceInfo;
> > - req->screen = screen;
> > - if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetDeviceInfo... return False");
> > - return False;
> > - }
> > -
> > - *hFrameBuffer = rep.hFrameBufferLow;
> > -#ifdef LONG64
> > - if (sizeof(drm_handle_t) == 8) {
> > - *hFrameBuffer |= ((unsigned long)rep.hFrameBufferHigh) << 32;
> > - }
> > -#endif
> > -
> > - *fbOrigin = rep.framebufferOrigin;
> > - *fbSize = rep.framebufferSize;
> > - *fbStride = rep.framebufferStride;
> > - *devPrivateSize = rep.devPrivateSize;
> > -
> > - if (rep.length) {
> > - if (!(*pDevPrivate = (void *)Xcalloc(rep.devPrivateSize, 1))) {
> > - _XEatData(dpy, ((rep.devPrivateSize + 3) & ~3));
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetDeviceInfo... return False");
> > - return False;
> > - }
> > - _XRead(dpy, (char *)*pDevPrivate, rep.devPrivateSize);
> > - } else {
> > - *pDevPrivate = NULL;
> > - }
> > -
> > - UnlockDisplay(dpy);
> > - SyncHandle();
> > - TRACE("GetDeviceInfo... return True");
> > - return True;
> > -}
> > diff --git a/src/xvmc/xf86dri.h b/src/xvmc/xf86dri.h
> > deleted file mode 100644
> > index 5b8655d..0000000
> > --- a/src/xvmc/xf86dri.h
> > +++ /dev/null
> > @@ -1,117 +0,0 @@
> > -/**************************************************************************
> > -
> > -Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
> > -Copyright 2000 VA Linux Systems, Inc.
> > -All Rights Reserved.
> > -
> > -Permission is hereby granted, free of charge, to any person obtaining a
> > -copy of this software and associated documentation files (the
> > -"Software"), to deal in the Software without restriction, including
> > -without limitation the rights to use, copy, modify, merge, publish,
> > -distribute, sub license, and/or sell copies of the Software, and to
> > -permit persons to whom the Software is furnished to do so, subject to
> > -the following conditions:
> > -
> > -The above copyright notice and this permission notice (including the
> > -next paragraph) shall be included in all copies or substantial portions
> > -of the Software.
> > -
> > -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> > -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> > -IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> > -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> > -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> > -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> > -
> > -**************************************************************************/
> > -
> > -/**
> > - * \file xf86dri.h
> > - * Protocol numbers and function prototypes for DRI X protocol.
> > - *
> > - * \author Kevin E. Martin <martin at valinux.com>
> > - * \author Jens Owen <jens at tungstengraphics.com>
> > - * \author Rickard E. (Rik) Faith <faith at valinux.com>
> > - */
> > -
> > -#ifndef _XF86DRI_H_
> > -#define _XF86DRI_H_
> > -
> > -#include <X11/Xfuncproto.h>
> > -#include <xf86drm.h>
> > -
> > -#define X_XF86DRIQueryVersion 0
> > -#define X_XF86DRIQueryDirectRenderingCapable 1
> > -#define X_XF86DRIOpenConnection 2
> > -#define X_XF86DRICloseConnection 3
> > -#define X_XF86DRIGetClientDriverName 4
> > -#define X_XF86DRICreateContext 5
> > -#define X_XF86DRIDestroyContext 6
> > -#define X_XF86DRICreateDrawable 7
> > -#define X_XF86DRIDestroyDrawable 8
> > -#define X_XF86DRIGetDrawableInfo 9
> > -#define X_XF86DRIGetDeviceInfo 10
> > -#define X_XF86DRIAuthConnection 11
> > -#define X_XF86DRIOpenFullScreen 12 /* Deprecated */
> > -#define X_XF86DRICloseFullScreen 13 /* Deprecated */
> > -
> > -#define XF86DRINumberEvents 0
> > -
> > -#define XF86DRIClientNotLocal 0
> > -#define XF86DRIOperationNotSupported 1
> > -#define XF86DRINumberErrors (XF86DRIOperationNotSupported + 1)
> > -
> > -#ifndef _XF86DRI_SERVER_
> > -
> > -_XFUNCPROTOBEGIN
> > -extern Bool uniDRIQueryExtension(Display * dpy, int *event_base,
> > - int *error_base);
> > -
> > -extern Bool uniDRIQueryVersion(Display * dpy, int *majorVersion,
> > - int *minorVersion, int *patchVersion);
> > -
> > -extern Bool uniDRIQueryDirectRenderingCapable(Display * dpy, int screen,
> > - Bool * isCapable);
> > -
> > -extern Bool uniDRIOpenConnection(Display * dpy, int screen, drm_handle_t
> > * hSAREA,
> > - char **busIDString);
> > -
> > -extern Bool uniDRIAuthConnection(Display * dpy, int screen, drm_magic_t
> > magic);
> > -
> > -extern Bool uniDRICloseConnection(Display * dpy, int screen);
> > -
> > -extern Bool uniDRIGetClientDriverName(Display * dpy, int screen,
> > - int *ddxDriverMajorVersion, int *ddxDriverMinorVersion,
> > - int *ddxDriverPatchVersion, char **clientDriverName);
> > -
> > -/* XvMC context XID is alloced in _xvmc_create_context, so
> > - * don't recreate here */
> > -extern Bool uniDRICreateContext(Display * dpy, int screen, Visual *
> > visual,
> > - XID context_id, drm_context_t * hHWContext);
> > -
> > -extern Bool uniDRICreateContextWithConfig(Display * dpy, int screen,
> > - int configID, XID context_id, drm_context_t * hHWContext);
> > -
> > -extern Bool uniDRIDestroyContext(Display * dpy, int screen, XID
> > context_id);
> > -
> > -extern Bool uniDRICreateDrawable(Display * dpy, int screen,
> > - Drawable drawable, drm_drawable_t * hHWDrawable);
> > -
> > -extern Bool uniDRIDestroyDrawable(Display * dpy, int screen,
> > - Drawable drawable);
> > -
> > -extern Bool uniDRIGetDeviceInfo(Display * dpy, int screen,
> > - drm_handle_t * hFrameBuffer, int *fbOrigin, int *fbSize,
> > - int *fbStride, int *devPrivateSize, void **pDevPrivate);
> > -
> > -extern Bool uniDRIGetDrawableInfo(Display * dpy, int screen,
> > - Drawable drawable, unsigned int *index, unsigned int *stamp,
> > - int *X, int *Y, int *W, int *H,
> > - int *numClipRects, drm_clip_rect_t ** pClipRects,
> > - int *backX, int *backY,
> > - int *numBackClipRects, drm_clip_rect_t ** pBackClipRects);
> > -
> > -_XFUNCPROTOEND
> > -#endif /* _XF86DRI_SERVER_ */
> > -#endif /* _XF86DRI_H_ */
> > diff --git a/src/xvmc/xf86dristr.h b/src/xvmc/xf86dristr.h
> > deleted file mode 100644
> > index d898996..0000000
> > --- a/src/xvmc/xf86dristr.h
> > +++ /dev/null
> > @@ -1,389 +0,0 @@
> > -/**************************************************************************
> > -
> > -Copyright 1998-1999 Precision Insight, Inc., Cedar Park, Texas.
> > -Copyright 2000 VA Linux Systems, Inc.
> > -All Rights Reserved.
> > -
> > -Permission is hereby granted, free of charge, to any person obtaining a
> > -copy of this software and associated documentation files (the
> > -"Software"), to deal in the Software without restriction, including
> > -without limitation the rights to use, copy, modify, merge, publish,
> > -distribute, sub license, and/or sell copies of the Software, and to
> > -permit persons to whom the Software is furnished to do so, subject to
> > -the following conditions:
> > -
> > -The above copyright notice and this permission notice (including the
> > -next paragraph) shall be included in all copies or substantial portions
> > -of the Software.
> > -
> > -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
> > -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
> > -IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
> > -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
> > -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
> > -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> > -
> > -**************************************************************************/
> > -
> > -/*
> > - * Authors:
> > - * Kevin E. Martin <martin at valinux.com>
> > - * Jens Owen <jens at tungstengraphics.com>
> > - * Rickard E. (Rik) Fiath <faith at valinux.com>
> > - *
> > - */
> > -
> > -#ifndef _XF86DRISTR_H_
> > -#define _XF86DRISTR_H_
> > -
> > -#include "xf86dri.h"
> > -
> > -#define XF86DRINAME "XFree86-DRI"
> > -
> > -/* The DRI version number. This was originally set to be the same of the
> > - * XFree86 version number. However, this version is really indepedent of
> > - * the XFree86 version.
> > - *
> > - * Version History:
> > - * 4.0.0: Original
> > - * 4.0.1: Patch to bump clipstamp when windows are destroyed, 28 May
> > 02
> > - * 4.1.0: Add transition from single to multi in DRMInfo rec, 24 Jun
> > 02
> > - */
> > -#define XF86DRI_MAJOR_VERSION 4
> > -#define XF86DRI_MINOR_VERSION 1
> > -#define XF86DRI_PATCH_VERSION 0
> > -
> > -typedef struct _XF86DRIQueryVersion
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIQueryVersion */
> > - CARD16 length B16;
> > -} xXF86DRIQueryVersionReq;
> > -
> > -#define sz_xXF86DRIQueryVersionReq 4
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD16 majorVersion B16; /* major version of DRI protocol */
> > - CARD16 minorVersion B16; /* minor version of DRI protocol */
> > - CARD32 patchVersion B32; /* patch version of DRI protocol */
> > - CARD32 pad3 B32;
> > - CARD32 pad4 B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > -} xXF86DRIQueryVersionReply;
> > -
> > -#define sz_xXF86DRIQueryVersionReply 32
> > -
> > -typedef struct _XF86DRIQueryDirectRenderingCapable
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* X_DRIQueryDirectRenderingCapable */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > -} xXF86DRIQueryDirectRenderingCapableReq;
> > -
> > -#define sz_xXF86DRIQueryDirectRenderingCapableReq 8
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - BOOL isCapable;
> > - BOOL pad2;
> > - BOOL pad3;
> > - BOOL pad4;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > - CARD32 pad7 B32;
> > - CARD32 pad8 B32;
> > - CARD32 pad9 B32;
> > -} xXF86DRIQueryDirectRenderingCapableReply;
> > -
> > -#define sz_xXF86DRIQueryDirectRenderingCapableReply 32
> > -
> > -typedef struct _XF86DRIOpenConnection
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIOpenConnection */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > -} xXF86DRIOpenConnectionReq;
> > -
> > -#define sz_xXF86DRIOpenConnectionReq 8
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 hSAREALow B32;
> > - CARD32 hSAREAHigh B32;
> > - CARD32 busIdStringLength B32;
> > - CARD32 pad6 B32;
> > - CARD32 pad7 B32;
> > - CARD32 pad8 B32;
> > -} xXF86DRIOpenConnectionReply;
> > -
> > -#define sz_xXF86DRIOpenConnectionReply 32
> > -
> > -typedef struct _XF86DRIAuthConnection
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRICloseConnection */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 magic B32;
> > -} xXF86DRIAuthConnectionReq;
> > -
> > -#define sz_xXF86DRIAuthConnectionReq 12
> > -
> > -typedef struct
> > -{
> > - BYTE type;
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 authenticated B32;
> > - CARD32 pad2 B32;
> > - CARD32 pad3 B32;
> > - CARD32 pad4 B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > -} xXF86DRIAuthConnectionReply;
> > -
> > -#define zx_xXF86DRIAuthConnectionReply 32
> > -
> > -typedef struct _XF86DRICloseConnection
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRICloseConnection */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > -} xXF86DRICloseConnectionReq;
> > -
> > -#define sz_xXF86DRICloseConnectionReq 8
> > -
> > -typedef struct _XF86DRIGetClientDriverName
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIGetClientDriverName */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > -} xXF86DRIGetClientDriverNameReq;
> > -
> > -#define sz_xXF86DRIGetClientDriverNameReq 8
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 ddxDriverMajorVersion B32;
> > - CARD32 ddxDriverMinorVersion B32;
> > - CARD32 ddxDriverPatchVersion B32;
> > - CARD32 clientDriverNameLength B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > -} xXF86DRIGetClientDriverNameReply;
> > -
> > -#define sz_xXF86DRIGetClientDriverNameReply 32
> > -
> > -typedef struct _XF86DRICreateContext
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRICreateContext */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 visual B32;
> > - CARD32 context B32;
> > -} xXF86DRICreateContextReq;
> > -
> > -#define sz_xXF86DRICreateContextReq 16
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 hHWContext B32;
> > - CARD32 pad2 B32;
> > - CARD32 pad3 B32;
> > - CARD32 pad4 B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > -} xXF86DRICreateContextReply;
> > -
> > -#define sz_xXF86DRICreateContextReply 32
> > -
> > -typedef struct _XF86DRIDestroyContext
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIDestroyContext */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 context B32;
> > -} xXF86DRIDestroyContextReq;
> > -
> > -#define sz_xXF86DRIDestroyContextReq 12
> > -
> > -typedef struct _XF86DRICreateDrawable
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRICreateDrawable */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 drawable B32;
> > -} xXF86DRICreateDrawableReq;
> > -
> > -#define sz_xXF86DRICreateDrawableReq 12
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 hHWDrawable B32;
> > - CARD32 pad2 B32;
> > - CARD32 pad3 B32;
> > - CARD32 pad4 B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > -} xXF86DRICreateDrawableReply;
> > -
> > -#define sz_xXF86DRICreateDrawableReply 32
> > -
> > -typedef struct _XF86DRIDestroyDrawable
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIDestroyDrawable */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 drawable B32;
> > -} xXF86DRIDestroyDrawableReq;
> > -
> > -#define sz_xXF86DRIDestroyDrawableReq 12
> > -
> > -typedef struct _XF86DRIGetDrawableInfo
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIGetDrawableInfo */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 drawable B32;
> > -} xXF86DRIGetDrawableInfoReq;
> > -
> > -#define sz_xXF86DRIGetDrawableInfoReq 12
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 drawableTableIndex B32;
> > - CARD32 drawableTableStamp B32;
> > - INT16 drawableX B16;
> > - INT16 drawableY B16;
> > - INT16 drawableWidth B16;
> > - INT16 drawableHeight B16;
> > - CARD32 numClipRects B32;
> > - INT16 backX B16;
> > - INT16 backY B16;
> > - CARD32 numBackClipRects B32;
> > -} xXF86DRIGetDrawableInfoReply;
> > -
> > -#define sz_xXF86DRIGetDrawableInfoReply 36
> > -
> > -typedef struct _XF86DRIGetDeviceInfo
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIGetDeviceInfo */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > -} xXF86DRIGetDeviceInfoReq;
> > -
> > -#define sz_xXF86DRIGetDeviceInfoReq 8
> > -
> > -typedef struct
> > -{
> > - BYTE type; /* X_Reply */
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 hFrameBufferLow B32;
> > - CARD32 hFrameBufferHigh B32;
> > - CARD32 framebufferOrigin B32;
> > - CARD32 framebufferSize B32;
> > - CARD32 framebufferStride B32;
> > - CARD32 devPrivateSize B32;
> > -} xXF86DRIGetDeviceInfoReply;
> > -
> > -#define sz_xXF86DRIGetDeviceInfoReply 32
> > -
> > -typedef struct _XF86DRIOpenFullScreen
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRIOpenFullScreen */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 drawable B32;
> > -} xXF86DRIOpenFullScreenReq;
> > -
> > -#define sz_xXF86DRIOpenFullScreenReq 12
> > -
> > -typedef struct
> > -{
> > - BYTE type;
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 isFullScreen B32;
> > - CARD32 pad2 B32;
> > - CARD32 pad3 B32;
> > - CARD32 pad4 B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > -} xXF86DRIOpenFullScreenReply;
> > -
> > -#define sz_xXF86DRIOpenFullScreenReply 32
> > -
> > -typedef struct _XF86DRICloseFullScreen
> > -{
> > - CARD8 reqType; /* always DRIReqCode */
> > - CARD8 driReqType; /* always X_DRICloseFullScreen */
> > - CARD16 length B16;
> > - CARD32 screen B32;
> > - CARD32 drawable B32;
> > -} xXF86DRICloseFullScreenReq;
> > -
> > -#define sz_xXF86DRICloseFullScreenReq 12
> > -
> > -typedef struct
> > -{
> > - BYTE type;
> > - BOOL pad1;
> > - CARD16 sequenceNumber B16;
> > - CARD32 length B32;
> > - CARD32 pad2 B32;
> > - CARD32 pad3 B32;
> > - CARD32 pad4 B32;
> > - CARD32 pad5 B32;
> > - CARD32 pad6 B32;
> > - CARD32 pad7 B32;
> > -} xXF86DRICloseFullScreenReply;
> > -
> > -#define sz_xXF86DRICloseFullScreenReply 32
> > -
> > -#endif /* _XF86DRISTR_H_ */
> > --
> > 1.5.6.3
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> >
>
>
More information about the Intel-gfx
mailing list