From patchwork Mon Dec 17 02:09:18 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Peres X-Patchwork-Id: 1885861 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by patchwork2.kernel.org (Postfix) with ESMTP id 1FAA9DFAC4 for ; Mon, 17 Dec 2012 02:09:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id E50F9E6073 for ; Sun, 16 Dec 2012 18:09:38 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from ensi-bourges.fr (mail.ensi-bourges.fr [195.221.38.25]) by gabe.freedesktop.org (Postfix) with ESMTP id E211CE5C7A for ; Sun, 16 Dec 2012 18:09:27 -0800 (PST) Received: (qmail 5972 invoked from network); 17 Dec 2012 02:06:24 -0000 Received: from unknown (HELO cathaou.dartybox.com) (Authenticated?user?:martin.peres@[89.159.199.232]) (envelope-sender ) by mail.ensi-bourges.fr (qmail-ldap-1.03) with AES256-SHA encrypted SMTP for ; 17 Dec 2012 02:06:24 -0000 From: martin.peres@free.fr To: dri-devel@lists.freedesktop.org Subject: [PATCH] dri2: add support for render nodes Date: Mon, 17 Dec 2012 03:09:18 +0100 Message-Id: <1355710158-18049-1-git-send-email-martin.peres@free.fr> X-Mailer: git-send-email 1.8.0.2 In-Reply-To: <50CE7868.4040205@free.fr> References: <50CE7868.4040205@free.fr> Cc: Martin Peres X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org From: Martin Peres Signed-off-by: Martin Peres --- glx/glxdri2.c | 3 ++- hw/xfree86/dri2/dri2.c | 11 ++++++++++- hw/xfree86/dri2/dri2.h | 8 ++++++-- hw/xfree86/dri2/dri2ext.c | 8 ++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/glx/glxdri2.c b/glx/glxdri2.c index bce1bfa..ead24bc 100644 --- a/glx/glxdri2.c +++ b/glx/glxdri2.c @@ -929,6 +929,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen) __GLXDRIscreen *screen; size_t buffer_size; ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); + unsigned char devReqAuth; screen = calloc(1, sizeof *screen); if (screen == NULL) @@ -936,7 +937,7 @@ __glXDRIscreenProbe(ScreenPtr pScreen) if (!xf86LoaderCheckSymbol("DRI2Connect") || !DRI2Connect(serverClient, pScreen, DRI2DriverDRI, - &screen->fd, &driverName, &deviceName)) { + &screen->fd, &driverName, &deviceName, &devReqAuth)) { LogMessage(X_INFO, "AIGLX: Screen %d is not DRI2 capable\n", pScreen->myNum); return NULL; diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c index 40963c3..6238caa 100644 --- a/hw/xfree86/dri2/dri2.c +++ b/hw/xfree86/dri2/dri2.c @@ -115,6 +115,7 @@ typedef struct _DRI2Screen { int fd; unsigned int lastSequence; int prime_id; + unsigned int device_requires_auth; DRI2CreateBufferProcPtr CreateBuffer; DRI2DestroyBufferProcPtr DestroyBuffer; @@ -1317,7 +1318,8 @@ DRI2HasSwapControl(ScreenPtr pScreen) Bool DRI2Connect(ClientPtr client, ScreenPtr pScreen, unsigned int driverType, int *fd, - const char **driverName, const char **deviceName) + const char **driverName, const char **deviceName, + unsigned char *deviceRequiresAuth) { DRI2ScreenPtr ds; uint32_t prime_id = DRI2DriverPrimeId(driverType); @@ -1503,6 +1505,13 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) ds->DestroyBuffer2 = info->DestroyBuffer2; ds->CopyRegion2 = info->CopyRegion2; } + + if (info->version >= 10) { + ds->device_requires_auth = info->device_requires_auth; + xf86DrvMsg(pScreen->myNum, X_INFO, + "[DRI2] The device %s authentication\n", + info->device_requires_auth?"requires":"doesn't require"); + } /* * if the driver doesn't provide an AuthMagic function or the info struct diff --git a/hw/xfree86/dri2/dri2.h b/hw/xfree86/dri2/dri2.h index 1e7afdd..f855565 100644 --- a/hw/xfree86/dri2/dri2.h +++ b/hw/xfree86/dri2/dri2.h @@ -205,7 +205,7 @@ typedef int (*DRI2GetParamProcPtr) (ClientPtr client, /** * Version of the DRI2InfoRec structure defined in this header */ -#define DRI2INFOREC_VERSION 9 +#define DRI2INFOREC_VERSION 10 typedef struct { unsigned int version; /**< Version of this struct */ @@ -252,6 +252,9 @@ typedef struct { DRI2CreateBuffer2ProcPtr CreateBuffer2; DRI2DestroyBuffer2ProcPtr DestroyBuffer2; DRI2CopyRegion2ProcPtr CopyRegion2; + + /* added in version 10 */ + unsigned char device_requires_auth; } DRI2InfoRec, *DRI2InfoPtr; extern _X_EXPORT Bool DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info); @@ -264,7 +267,8 @@ extern _X_EXPORT Bool DRI2Connect(ClientPtr client, ScreenPtr pScreen, unsigned int driverType, int *fd, const char **driverName, - const char **deviceName); + const char **deviceName, + unsigned char *deviceRequiresAuth); extern _X_EXPORT Bool DRI2Authenticate(ClientPtr client, ScreenPtr pScreen, uint32_t magic); diff --git a/hw/xfree86/dri2/dri2ext.c b/hw/xfree86/dri2/dri2ext.c index e1decec..1a78916 100644 --- a/hw/xfree86/dri2/dri2ext.c +++ b/hw/xfree86/dri2/dri2ext.c @@ -107,12 +107,14 @@ ProcDRI2Connect(ClientPtr client) .sequenceNumber = client->sequence, .length = 0, .driverNameLength = 0, - .deviceNameLength = 0 + .deviceNameLength = 0, + .deviceRequiresAuth = 1 }; DrawablePtr pDraw; int fd, status; const char *driverName; const char *deviceName; + unsigned char deviceRequiresAuth; REQUEST_SIZE_MATCH(xDRI2ConnectReq); if (!validDrawable(client, stuff->window, DixGetAttrAccess, @@ -120,11 +122,13 @@ ProcDRI2Connect(ClientPtr client) return status; if (!DRI2Connect(client, pDraw->pScreen, - stuff->driverType, &fd, &driverName, &deviceName)) + stuff->driverType, &fd, &driverName, &deviceName, + &deviceRequiresAuth)) goto fail; rep.driverNameLength = strlen(driverName); rep.deviceNameLength = strlen(deviceName); + rep.deviceRequiresAuth = deviceRequiresAuth; rep.length = (rep.driverNameLength + 3) / 4 + (rep.deviceNameLength + 3) / 4;