vndserver.h revision 1b5d61b8
11b5d61b8Smrg/*
21b5d61b8Smrg * Copyright (c) 2016, NVIDIA CORPORATION.
31b5d61b8Smrg *
41b5d61b8Smrg * Permission is hereby granted, free of charge, to any person obtaining a
51b5d61b8Smrg * copy of this software and/or associated documentation files (the
61b5d61b8Smrg * "Materials"), to deal in the Materials without restriction, including
71b5d61b8Smrg * without limitation the rights to use, copy, modify, merge, publish,
81b5d61b8Smrg * distribute, sublicense, and/or sell copies of the Materials, and to
91b5d61b8Smrg * permit persons to whom the Materials are furnished to do so, subject to
101b5d61b8Smrg * the following conditions:
111b5d61b8Smrg *
121b5d61b8Smrg * The above copyright notice and this permission notice shall be included
131b5d61b8Smrg * unaltered in all copies or substantial portions of the Materials.
141b5d61b8Smrg * Any additions, deletions, or changes to the original source files
151b5d61b8Smrg * must be clearly indicated in accompanying documentation.
161b5d61b8Smrg *
171b5d61b8Smrg * If only executable code is distributed, then the accompanying
181b5d61b8Smrg * documentation must state that "this software is based in part on the
191b5d61b8Smrg * work of the Khronos Group."
201b5d61b8Smrg *
211b5d61b8Smrg * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
221b5d61b8Smrg * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
231b5d61b8Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
241b5d61b8Smrg * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
251b5d61b8Smrg * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
261b5d61b8Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
271b5d61b8Smrg * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
281b5d61b8Smrg */
291b5d61b8Smrg
301b5d61b8Smrg#ifndef VNDSERVER_H
311b5d61b8Smrg#define VNDSERVER_H
321b5d61b8Smrg
331b5d61b8Smrg#include <dix-config.h>
341b5d61b8Smrg#include "glxvndabi.h"
351b5d61b8Smrg
361b5d61b8Smrg#define GLXContextID CARD32
371b5d61b8Smrg#define GLXDrawable CARD32
381b5d61b8Smrg
391b5d61b8Smrg#if defined(__cplusplus)
401b5d61b8Smrgextern "C" {
411b5d61b8Smrg#endif
421b5d61b8Smrg
431b5d61b8Smrgtypedef struct GlxScreenPrivRec {
441b5d61b8Smrg    GlxServerVendor *vendor;
451b5d61b8Smrg} GlxScreenPriv;
461b5d61b8Smrg
471b5d61b8Smrgtypedef struct GlxContextTagInfoRec {
481b5d61b8Smrg    GLXContextTag tag;
491b5d61b8Smrg    ClientPtr client;
501b5d61b8Smrg    GlxServerVendor *vendor;
511b5d61b8Smrg    void *data;
521b5d61b8Smrg    GLXContextID context;
531b5d61b8Smrg    GLXDrawable drawable;
541b5d61b8Smrg    GLXDrawable readdrawable;
551b5d61b8Smrg} GlxContextTagInfo;
561b5d61b8Smrg
571b5d61b8Smrgtypedef struct GlxClientPrivRec {
581b5d61b8Smrg    GlxContextTagInfo *contextTags;
591b5d61b8Smrg    unsigned int contextTagCount;
601b5d61b8Smrg} GlxClientPriv;
611b5d61b8Smrg
621b5d61b8Smrgextern int GlxErrorBase;
631b5d61b8Smrgextern RESTYPE idResource;
641b5d61b8Smrg
651b5d61b8Smrgextern ExtensionEntry *GlxExtensionEntry;
661b5d61b8SmrgBool GlxDispatchInit(void);
671b5d61b8Smrgvoid GlxDispatchReset(void);
681b5d61b8Smrg
691b5d61b8Smrg/**
701b5d61b8Smrg * Handles a request from the client.
711b5d61b8Smrg *
721b5d61b8Smrg * This function will look up the correct handler function and forward the
731b5d61b8Smrg * request to it.
741b5d61b8Smrg */
751b5d61b8Smrgint GlxDispatchRequest(ClientPtr client);
761b5d61b8Smrg
771b5d61b8Smrg/**
781b5d61b8Smrg * Looks up the GlxClientPriv struct for a client. If we don't have a
791b5d61b8Smrg * GlxClientPriv struct yet, then allocate one.
801b5d61b8Smrg */
811b5d61b8SmrgGlxClientPriv *GlxGetClientData(ClientPtr client);
821b5d61b8Smrg
831b5d61b8Smrg/**
841b5d61b8Smrg * Frees any data that's specific to a client. This should be called when a
851b5d61b8Smrg * client disconnects.
861b5d61b8Smrg */
871b5d61b8Smrgvoid GlxFreeClientData(ClientPtr client);
881b5d61b8Smrg
891b5d61b8SmrgBool GlxAddXIDMap(XID id, GlxServerVendor *vendor);
901b5d61b8SmrgGlxServerVendor * GlxGetXIDMap(XID id);
911b5d61b8Smrgvoid GlxRemoveXIDMap(XID id);
921b5d61b8Smrg
931b5d61b8SmrgGlxContextTagInfo *GlxAllocContextTag(ClientPtr client, GlxServerVendor *vendor);
941b5d61b8SmrgGlxContextTagInfo *GlxLookupContextTag(ClientPtr client, GLXContextTag tag);
951b5d61b8Smrgvoid GlxFreeContextTag(GlxContextTagInfo *tagInfo);
961b5d61b8Smrg
971b5d61b8SmrgBool GlxSetScreenVendor(ScreenPtr screen, GlxServerVendor *vendor);
981b5d61b8SmrgGlxScreenPriv *GlxGetScreen(ScreenPtr pScreen);
991b5d61b8SmrgGlxServerVendor *GlxGetVendorForScreen(ClientPtr client, ScreenPtr screen);
1001b5d61b8Smrg
1011b5d61b8Smrgstatic inline CARD32 GlxCheckSwap(ClientPtr client, CARD32 value)
1021b5d61b8Smrg{
1031b5d61b8Smrg    if (client->swapped)
1041b5d61b8Smrg    {
1051b5d61b8Smrg        value = ((value & 0XFF000000) >> 24) | ((value & 0X00FF0000) >>  8)
1061b5d61b8Smrg            | ((value & 0X0000FF00) <<  8) | ((value & 0X000000FF) << 24);
1071b5d61b8Smrg    }
1081b5d61b8Smrg    return value;
1091b5d61b8Smrg}
1101b5d61b8Smrg
1111b5d61b8Smrg#if defined(__cplusplus)
1121b5d61b8Smrg}
1131b5d61b8Smrg#endif
1141b5d61b8Smrg
1151b5d61b8Smrg_X_EXPORT const GlxServerExports *glvndGetExports(void);
1161b5d61b8Smrg
1171b5d61b8Smrg#endif // VNDSERVER_H
118