diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ttmtest/AUTHORS | 1 | ||||
| -rw-r--r-- | tests/ttmtest/ChangeLog | 23 | ||||
| -rw-r--r-- | tests/ttmtest/Makefile.am | 1 | ||||
| -rw-r--r-- | tests/ttmtest/NEWS | 0 | ||||
| -rw-r--r-- | tests/ttmtest/README | 0 | ||||
| -rw-r--r-- | tests/ttmtest/configure.ac | 33 | ||||
| -rwxr-xr-x | tests/ttmtest/reconf | 2 | ||||
| -rw-r--r-- | tests/ttmtest/src/Makefile.am | 8 | ||||
| -rw-r--r-- | tests/ttmtest/src/ttmtest.c | 429 | ||||
| -rw-r--r-- | tests/ttmtest/src/xf86dri.c | 603 | ||||
| -rw-r--r-- | tests/ttmtest/src/xf86dri.h | 116 | ||||
| -rw-r--r-- | tests/ttmtest/src/xf86dristr.h | 390 | 
12 files changed, 1606 insertions, 0 deletions
| diff --git a/tests/ttmtest/AUTHORS b/tests/ttmtest/AUTHORS new file mode 100644 index 00000000..fa4a089d --- /dev/null +++ b/tests/ttmtest/AUTHORS @@ -0,0 +1 @@ +Thomas Hellström <thomas-at-tungstengraphics.com> and others. diff --git a/tests/ttmtest/ChangeLog b/tests/ttmtest/ChangeLog new file mode 100644 index 00000000..4588c8db --- /dev/null +++ b/tests/ttmtest/ChangeLog @@ -0,0 +1,23 @@ +2006-01-24  Thomas Hellström  <thomas-at-tungstengraphics.com> + +	* configure.ac: +	* src/ttmtest.c: + +	Fixed include path. + +2006-01-24  Thomas Hellström  <thomas-at-tungstengraphics.com> + +	* AUTHORS: +	* Makefile.am: +	* configure.ac: +	* reconf: +	* src/Makefile.am: +	* src/ttmtest.c: (fastrdtsc), (time_diff), (releaseContext), +	(testAGP), (main): +	* src/xf86dri.c: (uniDRIDestroyContext), (uniDRICreateDrawable), +	(uniDRIDestroyDrawable), (uniDRIGetDrawableInfo): +	* src/xf86dri.h: +	* src/xf86dristr.h: + +	Initial import of the ttmtest utility. +	
\ No newline at end of file diff --git a/tests/ttmtest/Makefile.am b/tests/ttmtest/Makefile.am new file mode 100644 index 00000000..af437a64 --- /dev/null +++ b/tests/ttmtest/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = src diff --git a/tests/ttmtest/NEWS b/tests/ttmtest/NEWS new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/ttmtest/NEWS diff --git a/tests/ttmtest/README b/tests/ttmtest/README new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/tests/ttmtest/README diff --git a/tests/ttmtest/configure.ac b/tests/ttmtest/configure.ac new file mode 100644 index 00000000..c41e91ac --- /dev/null +++ b/tests/ttmtest/configure.ac @@ -0,0 +1,33 @@ +AC_INIT +AC_PROG_CC +AC_PATH_X +if test "x$no_x" != "xyes"; then +  savecpp="$CPPFLAGS" +  CPPFLAGS="$CPPFLAGS -I$x_includes" +  AC_CHECK_HEADER($x_includes/X11/Xlib.h,,\ +	 [AC_MSG_ERROR(Could not find X installation.)]) +  CPPFLAGS="$savecpp" +  MDRIINC="-I$x_includes" +  LIBS="-L$x_libraries $LIBS" +else +  AC_MSG_ERROR(Could not find X installation. Aborting.) +fi +AC_ARG_WITH(libdrm, +            AC_HELP_STRING([--with-libdrm=DIR], +                           [Installation prefix of libdrm [[default=/usr]]]), +            [libdrmpref="$withval"], +            [libdrmpref="/usr"]) +savecpp="$CPPFLAGS" +MDRIINC="-I$libdrmpref/include -I$libdrmpref/include/drm -I$x_includes" +CPPFLAGS="$CPPFLAGS $MDRIINC" +AC_CHECK_HEADER(xf86drm.h,,\ +		 [AC_MSG_ERROR(Could not find libdrm installation. Use --with-libdrm=<libdrm_installation_prefix>)]) +AC_CHECK_HEADER(drm.h,,\ +		 [AC_MSG_ERROR(Could not find libdrm installation. Use --with-libdrm=<libdrm_installation_prefix>)]) +CPPFLAGS="$savecpp" +LIBS="-L$libdrmpref/lib64 -L$libdrmpref/lib $LIBS" +AC_SUBST(MDRIINC) +AC_SYS_LARGEFILE +AM_INIT_AUTOMAKE(minidri,0.1.0) +AM_CONFIG_HEADER(config.h) +AC_OUTPUT([Makefile src/Makefile]) diff --git a/tests/ttmtest/reconf b/tests/ttmtest/reconf new file mode 100755 index 00000000..e64d00ac --- /dev/null +++ b/tests/ttmtest/reconf @@ -0,0 +1,2 @@ +#!/bin/sh +autoreconf -v --install || exit 1
\ No newline at end of file diff --git a/tests/ttmtest/src/Makefile.am b/tests/ttmtest/src/Makefile.am new file mode 100644 index 00000000..b7ee8291 --- /dev/null +++ b/tests/ttmtest/src/Makefile.am @@ -0,0 +1,8 @@ +INCLUDES = @MDRIINC@ +bin_PROGRAMS = ttmtest +ttmtest_SOURCES = \ +	ttmtest.c \ +	xf86dri.c \ +	xf86dri.h \ +	xf86dristr.h  +ttmtest_LDADD = -ldrm -lXext -lX11 diff --git a/tests/ttmtest/src/ttmtest.c b/tests/ttmtest/src/ttmtest.c new file mode 100644 index 00000000..ae261e28 --- /dev/null +++ b/tests/ttmtest/src/ttmtest.c @@ -0,0 +1,429 @@ +/************************************************************************** + *  + * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, TX., USA + * 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 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 + * THE COPYRIGHT HOLDERS, AUTHORS 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. + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + *  + *  + **************************************************************************/ +/* + * Authors: Thomas Hellström <thomas-at-tungstengraphics-dot-com> + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#include <drm/drm.h> +#include "xf86dri.h" +#include "xf86drm.h" +#include "stdio.h" +#include "sys/types.h" +#include <unistd.h> +#include <string.h> +#include <errno.h> +#include <stdlib.h> +#include "sys/mman.h" + +typedef struct +{ +    enum +    { +	haveNothing, +	haveDisplay, +	haveConnection, +	haveDriverName, +	haveDeviceInfo, +	haveDRM, +	haveContext +    } +    state; + +    Display *display; +    int screen; +    drm_handle_t sAreaOffset; +    char *curBusID; +    char *driverName; +    int drmFD; +    XVisualInfo visualInfo; +    XID id; +    drm_context_t hwContext; +    void *driPriv; +    int driPrivSize; +    int fbSize; +    int fbOrigin; +    int fbStride; +    drm_handle_t fbHandle; +    int ddxDriverMajor; +    int ddxDriverMinor; +    int ddxDriverPatch; +} TinyDRIContext; + +#ifndef __x86_64__ +static unsigned +fastrdtsc(void) +{ +    unsigned eax; +    __asm__ volatile ("\t" +	"pushl  %%ebx\n\t" +	"cpuid\n\t" ".byte 0x0f, 0x31\n\t" "popl %%ebx\n":"=a" (eax) +	:"0"(0) +	:"ecx", "edx", "cc"); + +    return eax; +} +#else +static unsigned +fastrdtsc(void) +{ +    unsigned eax; +    __asm__ volatile ("\t" "cpuid\n\t" ".byte 0x0f, 0x31\n\t":"=a" (eax) +	:"0"(0) +	:"ecx", "edx", "ebx", "cc"); + +    return eax; +} +#endif + +void +bmError(int val, const char *file, const char *function, int line) +{ +    fprintf(stderr, "Fatal video memory manager error \"%s\".\n" +	"Check kernel logs or set the LIBGL_DEBUG\n" +	"environment variable to \"verbose\" for more info.\n" +	"Detected in file %s, line %d, function %s.\n", +	strerror(-val), file, line, function); +    abort(); +} + +#define BM_CKFATAL(val)					       \ +  do{							       \ +    int tstVal = (val);					       \ +    if (tstVal) 					       \ +      bmError(tstVal, __FILE__, __FUNCTION__, __LINE__);       \ +  } while(0); + +static unsigned +time_diff(unsigned t, unsigned t2) +{ +    return ((t < t2) ? t2 - t : 0xFFFFFFFFU - (t - t2 - 1)); +} + +static int +releaseContext(TinyDRIContext * ctx) +{ +    switch (ctx->state) { +    case haveContext: +	uniDRIDestroyContext(ctx->display, ctx->screen, ctx->id); +    case haveDRM: +	drmClose(ctx->drmFD); +    case haveDeviceInfo: +	XFree(ctx->driPriv); +    case haveDriverName: +	XFree(ctx->driverName); +    case haveConnection: +	XFree(ctx->curBusID); +	uniDRICloseConnection(ctx->display, ctx->screen); +    case haveDisplay: +	XCloseDisplay(ctx->display); +    default: +	break; +    } +    return -1; +} + +static void +readBuf(void *buf, unsigned long size) +{ +    volatile unsigned *buf32 = (unsigned *)buf; +    unsigned *end = (unsigned *)buf32 + size / sizeof(*buf32); + +    while (buf32 < end) { +	(void)*buf32++; +    } +} + +static int +benchmarkBuffer(TinyDRIContext * ctx, unsigned long size, +    unsigned long *ticks) +{ +    unsigned long curTime, oldTime; +    int ret; +    drmBO buf; +    void *virtual; + +    /* +     * Test system memory objects. +     */ + +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOCreate(ctx->drmFD, 0, size, 0, NULL, +	    drm_bo_type_dc, +	    DRM_BO_FLAG_READ | +	    DRM_BO_FLAG_WRITE | +	    DRM_BO_FLAG_MEM_LOCAL | DRM_BO_FLAG_NO_MOVE, 0, &buf)); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOMap(ctx->drmFD, &buf, +	    DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE, 0, &virtual)); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    memset(virtual, 0xF0, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    memset(virtual, 0x0F, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    readBuf(virtual, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOUnmap(ctx->drmFD, &buf)); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    /* +     * Test TT bound buffer objects. +     */ + +    BM_CKFATAL(drmGetLock(ctx->drmFD, ctx->hwContext, 0)); +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOValidate(ctx->drmFD, &buf, +	    DRM_BO_FLAG_MEM_TT, DRM_BO_MASK_MEM, DRM_BO_HINT_DONT_FENCE)); +    curTime = fastrdtsc(); +    BM_CKFATAL(drmUnlock(ctx->drmFD, ctx->hwContext)); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOMap(ctx->drmFD, &buf, +	    DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE, 0, &virtual)); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    memset(virtual, 0xF0, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    memset(virtual, 0x0F, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    readBuf(virtual, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    BM_CKFATAL(drmBOUnmap(ctx->drmFD, &buf)); + +    BM_CKFATAL(drmGetLock(ctx->drmFD, ctx->hwContext, 0)); +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOValidate(ctx->drmFD, &buf, +	    DRM_BO_FLAG_MEM_LOCAL, DRM_BO_MASK_MEM, DRM_BO_HINT_DONT_FENCE)); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    /* +     * Test cached buffers objects. +     */ + +    oldTime = fastrdtsc(); +    ret = drmBOValidate(ctx->drmFD, &buf, +	DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_BIND_CACHED, +	DRM_BO_MASK_MEM | DRM_BO_FLAG_BIND_CACHED, DRM_BO_HINT_DONT_FENCE); +    curTime = fastrdtsc(); +    drmUnlock(ctx->drmFD, ctx->hwContext); + +    if (ret) { +	printf("Couldn't bind cached. Probably no support\n"); +	BM_CKFATAL(drmBODestroy(ctx->drmFD, &buf)); +	return 1; +    } +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    BM_CKFATAL(drmBOMap(ctx->drmFD, &buf, +	    DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE, 0, &virtual)); + +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    memset(virtual, 0xF0, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    memset(virtual, 0x0F, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    oldTime = fastrdtsc(); +    readBuf(virtual, buf.size); +    curTime = fastrdtsc(); +    *ticks++ = time_diff(oldTime, curTime); + +    BM_CKFATAL(drmBOUnmap(ctx->drmFD, &buf)); +    BM_CKFATAL(drmBODestroy(ctx->drmFD, &buf)); + +    return 0; +} + +static void +testAGP(TinyDRIContext * ctx) +{ +    unsigned long ticks[128], *pTicks; +    unsigned long size = 4096 * 1024; +    int ret; + +    ret = benchmarkBuffer(ctx, size, ticks); +    if (ret < 0) { +	fprintf(stderr, "Buffer error %s\n", strerror(-ret)); +	return; +    } +    pTicks = ticks; + +    printf("Buffer size %d bytes\n", size); +    printf("System memory timings ********************************\n"); +    printf("Creation took            %12lu ticks\n", *pTicks++); +    printf("Mapping took             %12lu ticks\n", *pTicks++); +    printf("Writing took             %12lu ticks\n", *pTicks++); +    printf("Writing Again took       %12lu ticks\n", *pTicks++); +    printf("Reading took             %12lu ticks\n", *pTicks++); +    printf("Unmapping took           %12lu ticks\n", *pTicks++); + +    printf("\nTT Memory timings ************************************\n"); +    printf("Moving to TT took        %12lu ticks\n", *pTicks++); +    printf("Mapping in TT took       %12lu ticks\n", *pTicks++); +    printf("Writing to TT took       %12lu ticks\n", *pTicks++); +    printf("Writing again to TT took %12lu ticks\n", *pTicks++); +    printf("Reading from TT took     %12lu ticks\n", *pTicks++); +    printf("Moving to system took    %12lu ticks\n", *pTicks++); + +    if (ret == 1) +	return; + +    printf("\nCached TT Memory timings *****************************\n"); +    printf("Moving to CTT took       %12lu ticks\n", *pTicks++); +    printf("Mapping in CTT took      %12lu ticks\n", *pTicks++); +    printf("Writing to CTT took      %12lu ticks\n", *pTicks++); +    printf("Re-writing to CTT took   %12lu ticks\n", *pTicks++); +    printf("Reading from CTT took    %12lu ticks\n", *pTicks++); +    printf("\n\n"); +} + +int +main() +{ +    int ret, screen, isCapable; +    char *displayName = ":0"; +    TinyDRIContext ctx; +    unsigned magic; + +    ctx.screen = 0; +    ctx.state = haveNothing; +    ctx.display = XOpenDisplay(displayName); +    if (!ctx.display) { +	fprintf(stderr, "Could not open display\n"); +	return releaseContext(&ctx); +    } +    ctx.state = haveDisplay; + +    ret = +	uniDRIQueryDirectRenderingCapable(ctx.display, ctx.screen, +	&isCapable); +    if (!ret || !isCapable) { +	fprintf(stderr, "No DRI on this display:sceen\n"); +	return releaseContext(&ctx); +    } + +    if (!uniDRIOpenConnection(ctx.display, ctx.screen, &ctx.sAreaOffset, +	    &ctx.curBusID)) { +	fprintf(stderr, "Could not open DRI connection.\n"); +	return releaseContext(&ctx); +    } +    ctx.state = haveConnection; + +    if (!uniDRIGetClientDriverName(ctx.display, ctx.screen, +	    &ctx.ddxDriverMajor, &ctx.ddxDriverMinor, +	    &ctx.ddxDriverPatch, &ctx.driverName)) { +	fprintf(stderr, "Could not get DRI driver name.\n"); +	return releaseContext(&ctx); +    } +    ctx.state = haveDriverName; + +    if (!uniDRIGetDeviceInfo(ctx.display, ctx.screen, +	    &ctx.fbHandle, &ctx.fbOrigin, &ctx.fbSize, +	    &ctx.fbStride, &ctx.driPrivSize, &ctx.driPriv)) { +	fprintf(stderr, "Could not get DRI device info.\n"); +	return releaseContext(&ctx); +    } +    ctx.state = haveDriverName; + +    if ((ctx.drmFD = drmOpen(NULL, ctx.curBusID)) < 0) { +	perror("DRM Device could not be opened"); +	return releaseContext(&ctx); +    } +    ctx.state = haveDRM; + +    drmGetMagic(ctx.drmFD, &magic); +    if (!uniDRIAuthConnection(ctx.display, ctx.screen, magic)) { +	fprintf(stderr, "Could not get X server to authenticate us.\n"); +	return releaseContext(&ctx); +    } + +    ret = XMatchVisualInfo(ctx.display, ctx.screen, 24, TrueColor, +	&ctx.visualInfo); +    if (!ret) { +	ret = XMatchVisualInfo(ctx.display, ctx.screen, 16, TrueColor, +	    &ctx.visualInfo); +	if (!ret) { +	    fprintf(stderr, "Could not find a matching visual.\n"); +	    return releaseContext(&ctx); +	} +    } + +    if (!uniDRICreateContext(ctx.display, ctx.screen, ctx.visualInfo.visual, +	    &ctx.id, &ctx.hwContext)) { +	fprintf(stderr, "Could not create DRI context.\n"); +	return releaseContext(&ctx); +    } +    ctx.state = haveContext; + +    testAGP(&ctx); + +    releaseContext(&ctx); +    printf("Terminating normally\n"); +    return 0; +} diff --git a/tests/ttmtest/src/xf86dri.c b/tests/ttmtest/src/xf86dri.c new file mode 100644 index 00000000..ad92504e --- /dev/null +++ b/tests/ttmtest/src/xf86dri.c @@ -0,0 +1,603 @@ +/* $XFree86: xc/lib/GL/dri/XF86dri.c,v 1.13 2002/10/30 12:51:25 alanh Exp $ */ +/************************************************************************** + +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@valinux.com> + *   Jens Owen <jens@tungstengraphics.com> + *   Rickard E. (Rik) Faith <faith@valinux.com> + * + */ + +/* THIS IS NOT AN X CONSORTIUM STANDARD */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#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)  fprintf(stderr,"uniDRI%s\n", msg); +#else +#define TRACE(msg) +#endif +    Bool uniDRIQueryExtension(dpy, event_basep, error_basep) +    Display *dpy; +    int *event_basep, *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(dpy, majorVersion, minorVersion, patchVersion) +    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... return True"); +    return True; +} + +Bool +uniDRIQueryDirectRenderingCapable(dpy, screen, isCapable) +    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... return True"); +    return True; +} + +Bool +uniDRIOpenConnection(dpy, screen, hSAREA, busIdString) +    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... return True"); +    return True; +} + +Bool +uniDRIAuthConnection(dpy, screen, magic) +    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(dpy, screen) +    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(dpy, screen, ddxDriverMajorVersion, +    ddxDriverMinorVersion, ddxDriverPatchVersion, clientDriverName) +    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(dpy, screen, configID, context, hHWContext) +    Display *dpy; +    int screen; +    int configID; +    XID *context; +    drm_context_t *hHWContext; +{ +    XExtDisplayInfo *info = find_display(dpy); +    xXF86DRICreateContextReply rep; +    xXF86DRICreateContextReq *req; + +    TRACE("CreateContext..."); +    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; +    *context = XAllocID(dpy); +    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(dpy, screen, visual, context, hHWContext) +    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..."); +    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(dpy, screen, hFrameBuffer, +    fbOrigin, fbSize, fbStride, devPrivateSize, pDevPrivate) +    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/tests/ttmtest/src/xf86dri.h b/tests/ttmtest/src/xf86dri.h new file mode 100644 index 00000000..8fb78968 --- /dev/null +++ b/tests/ttmtest/src/xf86dri.h @@ -0,0 +1,116 @@ +/* $XFree86: xc/lib/GL/dri/xf86dri.h,v 1.8 2002/10/30 12:51:25 alanh Exp $ */ +/************************************************************************** + +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@valinux.com> + * \author Jens Owen <jens@tungstengraphics.com> + * \author Rickard E. (Rik) Faith <faith@valinux.com> + */ + +#ifndef _XF86DRI_H_ +#define _XF86DRI_H_ + +#include <X11/Xfuncproto.h> +#include <drm/drm.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 +    Bool uniDRIQueryExtension(Display * dpy, int *event_base, +    int *error_base); + +Bool uniDRIQueryVersion(Display * dpy, int *majorVersion, int *minorVersion, +    int *patchVersion); + +Bool uniDRIQueryDirectRenderingCapable(Display * dpy, int screen, +    Bool * isCapable); + +Bool uniDRIOpenConnection(Display * dpy, int screen, drm_handle_t * hSAREA, +    char **busIDString); + +Bool uniDRIAuthConnection(Display * dpy, int screen, drm_magic_t magic); + +Bool uniDRICloseConnection(Display * dpy, int screen); + +Bool uniDRIGetClientDriverName(Display * dpy, int screen, +    int *ddxDriverMajorVersion, int *ddxDriverMinorVersion, +    int *ddxDriverPatchVersion, char **clientDriverName); + +Bool uniDRICreateContext(Display * dpy, int screen, Visual * visual, +    XID * ptr_to_returned_context_id, drm_context_t * hHWContext); + +Bool uniDRICreateContextWithConfig(Display * dpy, int screen, int configID, +    XID * ptr_to_returned_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); + +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); + +Bool uniDRIGetDeviceInfo(Display * dpy, int screen, +    drm_handle_t * hFrameBuffer, int *fbOrigin, int *fbSize, +    int *fbStride, int *devPrivateSize, void **pDevPrivate); + +_XFUNCPROTOEND +#endif /* _XF86DRI_SERVER_ */ +#endif /* _XF86DRI_H_ */ diff --git a/tests/ttmtest/src/xf86dristr.h b/tests/ttmtest/src/xf86dristr.h new file mode 100644 index 00000000..3b43438e --- /dev/null +++ b/tests/ttmtest/src/xf86dristr.h @@ -0,0 +1,390 @@ +/* $XFree86: xc/lib/GL/dri/xf86dristr.h,v 1.10 2002/10/30 12:51:25 alanh Exp $ */ +/************************************************************************** + +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@valinux.com> + *   Jens Owen <jens@tungstengraphics.com> + *   Rickard E. (Rik) Fiath <faith@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_ */ | 
