aboutsummaryrefslogtreecommitdiffstats
path: root/meta-emenlow/recipes-graphics/libva/libva-0.31.0/204_check_ATIFGLEXTENSION.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-emenlow/recipes-graphics/libva/libva-0.31.0/204_check_ATIFGLEXTENSION.patch')
-rw-r--r--meta-emenlow/recipes-graphics/libva/libva-0.31.0/204_check_ATIFGLEXTENSION.patch312
1 files changed, 312 insertions, 0 deletions
diff --git a/meta-emenlow/recipes-graphics/libva/libva-0.31.0/204_check_ATIFGLEXTENSION.patch b/meta-emenlow/recipes-graphics/libva/libva-0.31.0/204_check_ATIFGLEXTENSION.patch
new file mode 100644
index 00000000..02920a89
--- /dev/null
+++ b/meta-emenlow/recipes-graphics/libva/libva-0.31.0/204_check_ATIFGLEXTENSION.patch
@@ -0,0 +1,312 @@
+commit d91645f8b37aa43bafa76da3146dcdc9c17963ff
+Author: Gwenole Beauchesne <gbeauchesne@splitted-desktop.com>
+Date: Fri Nov 20 15:51:22 2009 +0000
+
+ Fix detection of fglrx.
+
+diff --git a/src/x11/Makefile.am b/src/x11/Makefile.am
+index b6916f2..0b61c33 100644
+--- a/src/x11/Makefile.am
++++ b/src/x11/Makefile.am
+@@ -25,6 +25,23 @@ noinst_LTLIBRARIES = libva_x11.la
+ libva_x11includedir = ${includedir}/va
+ libva_x11include_HEADERS = va_x11.h va_dri.h va_dri2.h va_dricommon.h
+
+-libva_x11_la_SOURCES = va_x11.c va_dri.c va_dri2.c va_dricommon.c dri2_util.c dri1_util.c va_nvctrl.c libdrm_glue.c
++libva_x11_la_SOURCES = \
++ dri1_util.c \
++ dri2_util.c \
++ libdrm_glue.c \
++ va_dri.c \
++ va_dri2.c \
++ va_dricommon.c \
++ va_fglext.c \
++ va_nvctrl.c \
++ va_x11.c \
++ $(NULL)
+
+-EXTRA_DIST = va_dristr.h va_dri2str.h va_dri2tokens.h va_nvctrl.h libdrm_glue.h
++EXTRA_DIST = \
++ libdrm_glue.h \
++ va_dri2str.h \
++ va_dri2tokens.h \
++ va_dristr.h \
++ va_fglext.h \
++ va_nvctrl.h \
++ $(NULL)
+diff --git a/src/x11/va_fglext.c b/src/x11/va_fglext.c
+new file mode 100644
+index 0000000..bc58e8b
+--- /dev/null
++++ b/src/x11/va_fglext.c
+@@ -0,0 +1,175 @@
++/*
++ * Copyright (C) 2009 Splitted-Desktop Systems. 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.
++ */
++
++#define _GNU_SOURCE 1
++#include <string.h>
++
++#define NEED_REPLIES
++#include <stdlib.h>
++#include <X11/Xlibint.h>
++#include <X11/Xutil.h>
++#include <X11/extensions/Xext.h>
++#include <X11/extensions/extutil.h>
++#include "va_fglext.h"
++
++#define ATIFGL_EXTENSION_NAME "ATIFGLEXTENSION"
++#define ATIFGL_EXTENSION_EVENTS 0
++
++typedef struct _FGLGetDriverData {
++ CARD8 reqType;
++ CARD8 fireglReqType;
++ CARD16 length B16;
++ CARD32 screen B32;
++ CARD16 size B16;
++ CARD16 pad1;
++} xFGLGetDriverDataReq;
++#define sz_xFGLGetDriverDataReq sizeof(xFGLGetDriverDataReq)
++
++typedef struct {
++ BYTE type;
++ BYTE pad1;
++ CARD16 sequenceNumber B16;
++ CARD32 length B32;
++ CARD8 majorVersion;
++ CARD8 minorVersion;
++ CARD8 patchlevel B16;
++ CARD8 BIOSVersionMajor;
++ CARD8 BIOSVersionMinor;
++ CARD8 HasSecondary;
++ CARD16 pad3 B16;
++ CARD32 pad4 B32;
++ CARD32 pad5 B32;
++ CARD32 pad6 B32;
++ CARD32 pad7 B32;
++ // ... there are more fields
++} xFGLGetDriverDataReply;
++#define sz_xFGLGetDriverDataReply sizeof(xFGLGetDriverDataReply)
++
++#define X_FGLGetDriverData 0
++
++static XExtensionInfo _fglext_ext_info_data;
++static XExtensionInfo *fglext_ext_info = &_fglext_ext_info_data;
++static /* const */ char *fglext_extension_name = ATIFGL_EXTENSION_NAME;
++
++#define xFGLCheckExtension(dpy,i,val) \
++ XextCheckExtension (dpy, i, fglext_extension_name, val)
++
++static int close_display();
++static /* const */ XExtensionHooks fglext_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, fglext_ext_info,
++ fglext_extension_name,
++ &fglext_extension_hooks,
++ ATIFGL_EXTENSION_EVENTS, NULL)
++
++static XEXT_GENERATE_CLOSE_DISPLAY (close_display, fglext_ext_info)
++
++Bool VA_FGLEXTQueryDirectRenderingCapable( Display *dpy, int screen,
++ Bool *isCapable )
++{
++ char **extensions;
++ int i, n_extensions, has_fglext = 0, has_fglrxdri = 0;
++
++ if (isCapable)
++ *isCapable = False;
++
++ extensions = XListExtensions(dpy, &n_extensions);
++ if (!extensions)
++ return False;
++
++ for (i = 0; i < n_extensions; i++) {
++ if (strcmp(extensions[i], ATIFGL_EXTENSION_NAME) == 0)
++ has_fglext = 1;
++ if (strcmp(extensions[i], "ATIFGLRXDRI") == 0)
++ has_fglrxdri = 1;
++ }
++ XFreeExtensionList(extensions);
++
++ if (!has_fglext)
++ return False;
++
++ if (isCapable)
++ *isCapable = has_fglrxdri;
++
++ return True;
++}
++
++Bool VA_FGLEXTGetClientDriverName( Display *dpy, int screen,
++ int *ddxDriverMajorVersion, int *ddxDriverMinorVersion,
++ int *ddxDriverPatchVersion, char **clientDriverName )
++{
++ XExtDisplayInfo *info = find_display (dpy);
++ xFGLGetDriverDataReply rep;
++ xFGLGetDriverDataReq *req;
++
++ if (ddxDriverMajorVersion)
++ *ddxDriverMajorVersion = 0;
++ if (ddxDriverMinorVersion)
++ *ddxDriverMinorVersion = 0;
++ if (ddxDriverPatchVersion)
++ *ddxDriverPatchVersion = 0;
++ if (clientDriverName)
++ *clientDriverName = NULL;
++
++ if(!XextHasExtension(info))
++ return False;
++
++ xFGLCheckExtension (dpy, info, False);
++
++ LockDisplay (dpy);
++ GetReq (FGLGetDriverData, req);
++ req->reqType = info->codes->major_opcode;
++ req->fireglReqType = X_FGLGetDriverData;
++ req->screen = screen;
++ if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) {
++ UnlockDisplay (dpy);
++ SyncHandle ();
++ return False;
++ }
++ UnlockDisplay (dpy);
++ SyncHandle ();
++
++ if (ddxDriverMajorVersion)
++ *ddxDriverMajorVersion = rep.majorVersion;
++ if (ddxDriverMinorVersion)
++ *ddxDriverMinorVersion = rep.minorVersion;
++ if (ddxDriverPatchVersion)
++ *ddxDriverPatchVersion = rep.patchlevel;
++ if (clientDriverName)
++ *clientDriverName = strdup("fglrx");
++
++ return True;
++}
+diff --git a/src/x11/va_fglext.h b/src/x11/va_fglext.h
+new file mode 100644
+index 0000000..f2d87c3
+--- /dev/null
++++ b/src/x11/va_fglext.h
+@@ -0,0 +1,37 @@
++/*
++ * Copyright (C) 2009 Splitted-Desktop Systems. 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.
++ */
++
++#ifndef VA_FGLEXTLIB_H
++#define VA_FGLEXTLIB_H
++
++#include <X11/Xlib.h>
++
++Bool VA_FGLEXTQueryDirectRenderingCapable( Display *dpy, int screen,
++ Bool *isCapable );
++
++Bool VA_FGLEXTGetClientDriverName( Display *dpy, int screen,
++ int *ddxDriverMajorVersion, int *ddxDriverMinorVersion,
++ int *ddxDriverPatchVersion, char **clientDriverName );
++
++#endif /* VA_FGLEXTLIB_H */
+diff --git a/src/x11/va_x11.c b/src/x11/va_x11.c
+index 414c261..0510e00 100644
+--- a/src/x11/va_x11.c
++++ b/src/x11/va_x11.c
+@@ -31,6 +31,7 @@
+ #include "va_dri2.h"
+ #include "va_dricommon.h"
+ #include "va_nvctrl.h"
++#include "va_fglext.h"
+ #include "libdrm_glue.h"
+ #include <stdio.h>
+ #include <stdarg.h>
+@@ -132,6 +133,29 @@ static VAStatus va_NVCTRL_GetDriverName (
+ return VA_STATUS_SUCCESS;
+ }
+
++static VAStatus va_FGLEXT_GetDriverName(
++ VADisplayContextP pDisplayContext,
++ char **driver_name
++)
++{
++ VADriverContextP ctx = pDisplayContext->pDriverContext;
++ int direct_capable, driver_major, driver_minor, driver_patch;
++ Bool result;
++
++ result = VA_FGLEXTQueryDirectRenderingCapable(ctx->x11_dpy, ctx->x11_screen,
++ &direct_capable);
++ if (!result || !direct_capable)
++ return VA_STATUS_ERROR_UNKNOWN;
++
++ result = VA_FGLEXTGetClientDriverName(ctx->x11_dpy, ctx->x11_screen,
++ &driver_major, &driver_minor,
++ &driver_patch, driver_name);
++ if (!result)
++ return VA_STATUS_ERROR_UNKNOWN;
++
++ return VA_STATUS_SUCCESS;
++}
++
+ static VAStatus va_DisplayContextGetDriverName (
+ VADisplayContextP pDisplayContext,
+ char **driver_name
+@@ -156,7 +180,8 @@ static VAStatus va_DisplayContextGetDriverName (
+ vaStatus = va_DRIGetDriverName(pDisplayContext, driver_name);
+ if (vaStatus != VA_STATUS_SUCCESS)
+ vaStatus = va_NVCTRL_GetDriverName(pDisplayContext, driver_name);
+-
++ if (vaStatus != VA_STATUS_SUCCESS)
++ vaStatus = va_FGLEXT_GetDriverName(pDisplayContext, driver_name);
+ return vaStatus;
+ }
+