1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008) 3*61046927SAndroid Build Coastguard Worker * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved. 4*61046927SAndroid Build Coastguard Worker * 5*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: SGI-B-2.0 6*61046927SAndroid Build Coastguard Worker */ 7*61046927SAndroid Build Coastguard Worker 8*61046927SAndroid Build Coastguard Worker /** 9*61046927SAndroid Build Coastguard Worker * \file glxclient.h 10*61046927SAndroid Build Coastguard Worker * Direct rendering support added by Precision Insight, Inc. 11*61046927SAndroid Build Coastguard Worker * 12*61046927SAndroid Build Coastguard Worker * \author Kevin E. Martin <[email protected]> 13*61046927SAndroid Build Coastguard Worker */ 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Worker #ifndef _GLX_client_h_ 16*61046927SAndroid Build Coastguard Worker #define _GLX_client_h_ 17*61046927SAndroid Build Coastguard Worker #include <X11/Xproto.h> 18*61046927SAndroid Build Coastguard Worker #include <X11/Xlibint.h> 19*61046927SAndroid Build Coastguard Worker #include <X11/Xfuncproto.h> 20*61046927SAndroid Build Coastguard Worker #include <X11/extensions/extutil.h> 21*61046927SAndroid Build Coastguard Worker #define GLX_GLXEXT_PROTOTYPES 22*61046927SAndroid Build Coastguard Worker #include <GL/glx.h> 23*61046927SAndroid Build Coastguard Worker #include <GL/glxext.h> 24*61046927SAndroid Build Coastguard Worker #include <string.h> 25*61046927SAndroid Build Coastguard Worker #include <stdlib.h> 26*61046927SAndroid Build Coastguard Worker #include <stdio.h> 27*61046927SAndroid Build Coastguard Worker #include <stdint.h> 28*61046927SAndroid Build Coastguard Worker #include <pthread.h> 29*61046927SAndroid Build Coastguard Worker #include "GL/glxproto.h" 30*61046927SAndroid Build Coastguard Worker #include "glxconfig.h" 31*61046927SAndroid Build Coastguard Worker #include "glxhash.h" 32*61046927SAndroid Build Coastguard Worker #include "util/macros.h" 33*61046927SAndroid Build Coastguard Worker #include "util/u_thread.h" 34*61046927SAndroid Build Coastguard Worker #include "util/set.h" 35*61046927SAndroid Build Coastguard Worker #include "loader.h" 36*61046927SAndroid Build Coastguard Worker #include "glxextensions.h" 37*61046927SAndroid Build Coastguard Worker 38*61046927SAndroid Build Coastguard Worker /* bits */ 39*61046927SAndroid Build Coastguard Worker enum glx_driver { 40*61046927SAndroid Build Coastguard Worker GLX_DRIVER_NONE = 0, 41*61046927SAndroid Build Coastguard Worker GLX_DRIVER_ZINK_INFER = (1<<0), 42*61046927SAndroid Build Coastguard Worker GLX_DRIVER_SW = (1<<1), 43*61046927SAndroid Build Coastguard Worker GLX_DRIVER_DRI2 = (1<<2), 44*61046927SAndroid Build Coastguard Worker GLX_DRIVER_DRI3 = (1<<3), 45*61046927SAndroid Build Coastguard Worker GLX_DRIVER_WINDOWS = (1<<4), 46*61046927SAndroid Build Coastguard Worker GLX_DRIVER_ZINK_YES = (1<<5), 47*61046927SAndroid Build Coastguard Worker }; 48*61046927SAndroid Build Coastguard Worker 49*61046927SAndroid Build Coastguard Worker #if USE_LIBGLVND 50*61046927SAndroid Build Coastguard Worker #define _GLX_PUBLIC _X_HIDDEN 51*61046927SAndroid Build Coastguard Worker #else 52*61046927SAndroid Build Coastguard Worker #define _GLX_PUBLIC _X_EXPORT 53*61046927SAndroid Build Coastguard Worker #endif 54*61046927SAndroid Build Coastguard Worker 55*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 56*61046927SAndroid Build Coastguard Worker extern "C" { 57*61046927SAndroid Build Coastguard Worker #endif 58*61046927SAndroid Build Coastguard Worker 59*61046927SAndroid Build Coastguard Worker extern void glx_message(int level, const char *f, ...) PRINTFLIKE(2, 3); 60*61046927SAndroid Build Coastguard Worker 61*61046927SAndroid Build Coastguard Worker #define DebugMessageF(...) glx_message(_LOADER_DEBUG, __VA_ARGS__) 62*61046927SAndroid Build Coastguard Worker #define InfoMessageF(...) glx_message(_LOADER_INFO, __VA_ARGS__) 63*61046927SAndroid Build Coastguard Worker #define ErrorMessageF(...) glx_message(_LOADER_WARNING, __VA_ARGS__) 64*61046927SAndroid Build Coastguard Worker #define CriticalErrorMessageF(...) glx_message(_LOADER_FATAL, __VA_ARGS__) 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker 67*61046927SAndroid Build Coastguard Worker #define GLX_MAJOR_VERSION 1 /* current version numbers */ 68*61046927SAndroid Build Coastguard Worker #define GLX_MINOR_VERSION 4 69*61046927SAndroid Build Coastguard Worker 70*61046927SAndroid Build Coastguard Worker struct glx_display; 71*61046927SAndroid Build Coastguard Worker struct glx_context; 72*61046927SAndroid Build Coastguard Worker 73*61046927SAndroid Build Coastguard Worker /************************************************************************/ 74*61046927SAndroid Build Coastguard Worker 75*61046927SAndroid Build Coastguard Worker #ifdef GLX_DIRECT_RENDERING 76*61046927SAndroid Build Coastguard Worker 77*61046927SAndroid Build Coastguard Worker extern void DRI_glXUseXFont(struct glx_context *ctx, 78*61046927SAndroid Build Coastguard Worker Font font, int first, int count, int listbase); 79*61046927SAndroid Build Coastguard Worker 80*61046927SAndroid Build Coastguard Worker #endif 81*61046927SAndroid Build Coastguard Worker 82*61046927SAndroid Build Coastguard Worker #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) 83*61046927SAndroid Build Coastguard Worker 84*61046927SAndroid Build Coastguard Worker /** 85*61046927SAndroid Build Coastguard Worker * Display dependent methods. This structure is initialized during the 86*61046927SAndroid Build Coastguard Worker * \c driCreateDisplay call. 87*61046927SAndroid Build Coastguard Worker */ 88*61046927SAndroid Build Coastguard Worker typedef struct __GLXDRIdisplay __GLXDRIdisplay; 89*61046927SAndroid Build Coastguard Worker typedef struct __GLXDRIscreenRec __GLXDRIscreen; 90*61046927SAndroid Build Coastguard Worker typedef struct __GLXDRIdrawableRec __GLXDRIdrawable; 91*61046927SAndroid Build Coastguard Worker 92*61046927SAndroid Build Coastguard Worker struct __GLXDRIscreenRec { 93*61046927SAndroid Build Coastguard Worker 94*61046927SAndroid Build Coastguard Worker void (*deinitScreen)(struct glx_screen *psc); 95*61046927SAndroid Build Coastguard Worker 96*61046927SAndroid Build Coastguard Worker __GLXDRIdrawable *(*createDrawable)(struct glx_screen *psc, 97*61046927SAndroid Build Coastguard Worker XID drawable, 98*61046927SAndroid Build Coastguard Worker GLXDrawable glxDrawable, 99*61046927SAndroid Build Coastguard Worker int type, 100*61046927SAndroid Build Coastguard Worker struct glx_config *config); 101*61046927SAndroid Build Coastguard Worker 102*61046927SAndroid Build Coastguard Worker int64_t (*swapBuffers)(__GLXDRIdrawable *pdraw, int64_t target_msc, 103*61046927SAndroid Build Coastguard Worker int64_t divisor, int64_t remainder, Bool flush); 104*61046927SAndroid Build Coastguard Worker void (*copySubBuffer)(__GLXDRIdrawable *pdraw, 105*61046927SAndroid Build Coastguard Worker int x, int y, int width, int height, Bool flush); 106*61046927SAndroid Build Coastguard Worker int (*getDrawableMSC)(struct glx_screen *psc, __GLXDRIdrawable *pdraw, 107*61046927SAndroid Build Coastguard Worker int64_t *ust, int64_t *msc, int64_t *sbc); 108*61046927SAndroid Build Coastguard Worker int (*waitForMSC)(__GLXDRIdrawable *pdraw, int64_t target_msc, 109*61046927SAndroid Build Coastguard Worker int64_t divisor, int64_t remainder, int64_t *ust, 110*61046927SAndroid Build Coastguard Worker int64_t *msc, int64_t *sbc); 111*61046927SAndroid Build Coastguard Worker int (*waitForSBC)(__GLXDRIdrawable *pdraw, int64_t target_sbc, int64_t *ust, 112*61046927SAndroid Build Coastguard Worker int64_t *msc, int64_t *sbc); 113*61046927SAndroid Build Coastguard Worker int (*setSwapInterval)(__GLXDRIdrawable *pdraw, int interval); 114*61046927SAndroid Build Coastguard Worker int (*getSwapInterval)(__GLXDRIdrawable *pdraw); 115*61046927SAndroid Build Coastguard Worker void (*bindTexImage)(__GLXDRIdrawable *pdraw, int buffer, const int *attribs); 116*61046927SAndroid Build Coastguard Worker 117*61046927SAndroid Build Coastguard Worker int maxSwapInterval; 118*61046927SAndroid Build Coastguard Worker }; 119*61046927SAndroid Build Coastguard Worker 120*61046927SAndroid Build Coastguard Worker struct __GLXDRIdrawableRec 121*61046927SAndroid Build Coastguard Worker { 122*61046927SAndroid Build Coastguard Worker void (*destroyDrawable) (__GLXDRIdrawable * drawable); 123*61046927SAndroid Build Coastguard Worker 124*61046927SAndroid Build Coastguard Worker XID xDrawable; 125*61046927SAndroid Build Coastguard Worker XID drawable; 126*61046927SAndroid Build Coastguard Worker struct glx_screen *psc; 127*61046927SAndroid Build Coastguard Worker GLenum textureTarget; 128*61046927SAndroid Build Coastguard Worker GLenum textureFormat; /* EXT_texture_from_pixmap support */ 129*61046927SAndroid Build Coastguard Worker unsigned long eventMask; 130*61046927SAndroid Build Coastguard Worker int refcount; 131*61046927SAndroid Build Coastguard Worker 132*61046927SAndroid Build Coastguard Worker __DRIdrawable *dri_drawable; 133*61046927SAndroid Build Coastguard Worker }; 134*61046927SAndroid Build Coastguard Worker 135*61046927SAndroid Build Coastguard Worker /* 136*61046927SAndroid Build Coastguard Worker ** Function to create and DRI display data and initialize the display 137*61046927SAndroid Build Coastguard Worker ** dependent methods. 138*61046927SAndroid Build Coastguard Worker */ 139*61046927SAndroid Build Coastguard Worker extern __GLXDRIdisplay *driswCreateDisplay(Display * dpy, enum glx_driver glx_driver); 140*61046927SAndroid Build Coastguard Worker extern __GLXDRIdisplay *dri2CreateDisplay(Display * dpy); 141*61046927SAndroid Build Coastguard Worker extern __GLXDRIdisplay *dri3_create_display(Display * dpy); 142*61046927SAndroid Build Coastguard Worker extern __GLXDRIdisplay *driwindowsCreateDisplay(Display * dpy); 143*61046927SAndroid Build Coastguard Worker 144*61046927SAndroid Build Coastguard Worker 145*61046927SAndroid Build Coastguard Worker #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) 146*61046927SAndroid Build Coastguard Worker #ifdef HAVE_LIBDRM 147*61046927SAndroid Build Coastguard Worker struct glx_screen *dri3_create_screen(int screen, struct glx_display * priv, bool driver_name_is_inferred, bool *return_zink); 148*61046927SAndroid Build Coastguard Worker void dri3_destroy_display(__GLXDRIdisplay * dpy); 149*61046927SAndroid Build Coastguard Worker #endif 150*61046927SAndroid Build Coastguard Worker 151*61046927SAndroid Build Coastguard Worker bool dri2CheckSupport(Display *dpy); 152*61046927SAndroid Build Coastguard Worker struct glx_screen *dri2CreateScreen(int screen, struct glx_display * priv, bool driver_name_is_inferred); 153*61046927SAndroid Build Coastguard Worker void dri2DestroyDisplay(__GLXDRIdisplay * dpy); 154*61046927SAndroid Build Coastguard Worker 155*61046927SAndroid Build Coastguard Worker struct glx_screen *driswCreateScreen(int screen, struct glx_display *priv, enum glx_driver driver, bool driver_name_is_inferred); 156*61046927SAndroid Build Coastguard Worker void driswDestroyDisplay(__GLXDRIdisplay * dpy); 157*61046927SAndroid Build Coastguard Worker #endif 158*61046927SAndroid Build Coastguard Worker 159*61046927SAndroid Build Coastguard Worker #ifdef GLX_USE_WINDOWSGL 160*61046927SAndroid Build Coastguard Worker struct glx_screen *driwindowsCreateScreen(int screen, struct glx_display *priv, bool driver_name_is_inferred); 161*61046927SAndroid Build Coastguard Worker void driwindowsDestroyDisplay(__GLXDRIdisplay * dpy); 162*61046927SAndroid Build Coastguard Worker #endif 163*61046927SAndroid Build Coastguard Worker /* 164*61046927SAndroid Build Coastguard Worker ** 165*61046927SAndroid Build Coastguard Worker */ 166*61046927SAndroid Build Coastguard Worker extern void dri2InvalidateBuffers(Display *dpy, XID drawable); 167*61046927SAndroid Build Coastguard Worker extern unsigned dri2GetSwapEventType(Display *dpy, XID drawable); 168*61046927SAndroid Build Coastguard Worker 169*61046927SAndroid Build Coastguard Worker /* 170*61046927SAndroid Build Coastguard Worker ** Functions to obtain driver configuration information from a direct 171*61046927SAndroid Build Coastguard Worker ** rendering client application 172*61046927SAndroid Build Coastguard Worker */ 173*61046927SAndroid Build Coastguard Worker extern const char *glXGetScreenDriver(Display * dpy, int scrNum); 174*61046927SAndroid Build Coastguard Worker 175*61046927SAndroid Build Coastguard Worker extern const char *glXGetDriverConfig(const char *driverName); 176*61046927SAndroid Build Coastguard Worker 177*61046927SAndroid Build Coastguard Worker #endif 178*61046927SAndroid Build Coastguard Worker 179*61046927SAndroid Build Coastguard Worker /************************************************************************/ 180*61046927SAndroid Build Coastguard Worker 181*61046927SAndroid Build Coastguard Worker #define __GL_CLIENT_ATTRIB_STACK_DEPTH 16 182*61046927SAndroid Build Coastguard Worker 183*61046927SAndroid Build Coastguard Worker typedef struct __GLXpixelStoreModeRec 184*61046927SAndroid Build Coastguard Worker { 185*61046927SAndroid Build Coastguard Worker GLboolean swapEndian; 186*61046927SAndroid Build Coastguard Worker GLboolean lsbFirst; 187*61046927SAndroid Build Coastguard Worker GLuint rowLength; 188*61046927SAndroid Build Coastguard Worker GLuint imageHeight; 189*61046927SAndroid Build Coastguard Worker GLuint imageDepth; 190*61046927SAndroid Build Coastguard Worker GLuint skipRows; 191*61046927SAndroid Build Coastguard Worker GLuint skipPixels; 192*61046927SAndroid Build Coastguard Worker GLuint skipImages; 193*61046927SAndroid Build Coastguard Worker GLuint alignment; 194*61046927SAndroid Build Coastguard Worker } __GLXpixelStoreMode; 195*61046927SAndroid Build Coastguard Worker 196*61046927SAndroid Build Coastguard Worker 197*61046927SAndroid Build Coastguard Worker typedef struct __GLXattributeRec 198*61046927SAndroid Build Coastguard Worker { 199*61046927SAndroid Build Coastguard Worker GLuint mask; 200*61046927SAndroid Build Coastguard Worker 201*61046927SAndroid Build Coastguard Worker /** 202*61046927SAndroid Build Coastguard Worker * Pixel storage state. Most of the pixel store mode state is kept 203*61046927SAndroid Build Coastguard Worker * here and used by the client code to manage the packing and 204*61046927SAndroid Build Coastguard Worker * unpacking of data sent to/received from the server. 205*61046927SAndroid Build Coastguard Worker */ 206*61046927SAndroid Build Coastguard Worker __GLXpixelStoreMode storePack, storeUnpack; 207*61046927SAndroid Build Coastguard Worker 208*61046927SAndroid Build Coastguard Worker /** 209*61046927SAndroid Build Coastguard Worker * Is EXT_vertex_array / GL 1.1 DrawArrays protocol specifically 210*61046927SAndroid Build Coastguard Worker * disabled? 211*61046927SAndroid Build Coastguard Worker */ 212*61046927SAndroid Build Coastguard Worker GLboolean NoDrawArraysProtocol; 213*61046927SAndroid Build Coastguard Worker 214*61046927SAndroid Build Coastguard Worker /** 215*61046927SAndroid Build Coastguard Worker * Vertex Array storage state. The vertex array component 216*61046927SAndroid Build Coastguard Worker * state is stored here and is used to manage the packing of 217*61046927SAndroid Build Coastguard Worker * DrawArrays data sent to the server. 218*61046927SAndroid Build Coastguard Worker */ 219*61046927SAndroid Build Coastguard Worker struct array_state_vector *array_state; 220*61046927SAndroid Build Coastguard Worker } __GLXattribute; 221*61046927SAndroid Build Coastguard Worker 222*61046927SAndroid Build Coastguard Worker typedef struct __GLXattributeMachineRec 223*61046927SAndroid Build Coastguard Worker { 224*61046927SAndroid Build Coastguard Worker __GLXattribute *stack[__GL_CLIENT_ATTRIB_STACK_DEPTH]; 225*61046927SAndroid Build Coastguard Worker __GLXattribute **stackPointer; 226*61046927SAndroid Build Coastguard Worker } __GLXattributeMachine; 227*61046927SAndroid Build Coastguard Worker 228*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_device_info; 229*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_in; 230*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_export_out; 231*61046927SAndroid Build Coastguard Worker struct mesa_glinterop_flush_out; 232*61046927SAndroid Build Coastguard Worker 233*61046927SAndroid Build Coastguard Worker struct glx_context_vtable { 234*61046927SAndroid Build Coastguard Worker void (*destroy)(struct glx_context *ctx); 235*61046927SAndroid Build Coastguard Worker int (*bind)(struct glx_context *context, GLXDrawable draw, GLXDrawable read); 236*61046927SAndroid Build Coastguard Worker void (*unbind)(struct glx_context *context); 237*61046927SAndroid Build Coastguard Worker void (*wait_gl)(struct glx_context *ctx); 238*61046927SAndroid Build Coastguard Worker void (*wait_x)(struct glx_context *ctx); 239*61046927SAndroid Build Coastguard Worker }; 240*61046927SAndroid Build Coastguard Worker 241*61046927SAndroid Build Coastguard Worker /** 242*61046927SAndroid Build Coastguard Worker * GLX state that needs to be kept on the client. One of these records 243*61046927SAndroid Build Coastguard Worker * exist for each context that has been made current by this client. 244*61046927SAndroid Build Coastguard Worker */ 245*61046927SAndroid Build Coastguard Worker struct glx_context 246*61046927SAndroid Build Coastguard Worker { 247*61046927SAndroid Build Coastguard Worker /** 248*61046927SAndroid Build Coastguard Worker * \name Drawing command buffer. 249*61046927SAndroid Build Coastguard Worker * 250*61046927SAndroid Build Coastguard Worker * Drawing commands are packed into this buffer before being sent as a 251*61046927SAndroid Build Coastguard Worker * single GLX protocol request. The buffer is sent when it overflows or 252*61046927SAndroid Build Coastguard Worker * is flushed by \c __glXFlushRenderBuffer. \c pc is the next location 253*61046927SAndroid Build Coastguard Worker * in the buffer to be filled. \c limit is described above in the buffer 254*61046927SAndroid Build Coastguard Worker * slop discussion. 255*61046927SAndroid Build Coastguard Worker * 256*61046927SAndroid Build Coastguard Worker * Commands that require large amounts of data to be transferred will 257*61046927SAndroid Build Coastguard Worker * also use this buffer to hold a header that describes the large 258*61046927SAndroid Build Coastguard Worker * command. 259*61046927SAndroid Build Coastguard Worker * 260*61046927SAndroid Build Coastguard Worker * These must be the first 6 fields since they are static initialized 261*61046927SAndroid Build Coastguard Worker * in the dummy context in glxext.c 262*61046927SAndroid Build Coastguard Worker */ 263*61046927SAndroid Build Coastguard Worker /*@{ */ 264*61046927SAndroid Build Coastguard Worker GLubyte *buf; 265*61046927SAndroid Build Coastguard Worker GLubyte *pc; 266*61046927SAndroid Build Coastguard Worker GLubyte *limit; 267*61046927SAndroid Build Coastguard Worker GLubyte *bufEnd; 268*61046927SAndroid Build Coastguard Worker GLint bufSize; 269*61046927SAndroid Build Coastguard Worker /*@} */ 270*61046927SAndroid Build Coastguard Worker 271*61046927SAndroid Build Coastguard Worker const struct glx_context_vtable *vtable; 272*61046927SAndroid Build Coastguard Worker 273*61046927SAndroid Build Coastguard Worker /** 274*61046927SAndroid Build Coastguard Worker * The XID of this rendering context. When the context is created a 275*61046927SAndroid Build Coastguard Worker * new XID is allocated. This is set to None when the context is 276*61046927SAndroid Build Coastguard Worker * destroyed but is still current to some thread. In this case the 277*61046927SAndroid Build Coastguard Worker * context will be freed on next MakeCurrent. 278*61046927SAndroid Build Coastguard Worker */ 279*61046927SAndroid Build Coastguard Worker XID xid; 280*61046927SAndroid Build Coastguard Worker 281*61046927SAndroid Build Coastguard Worker /** 282*61046927SAndroid Build Coastguard Worker * The XID of the \c shareList context. 283*61046927SAndroid Build Coastguard Worker */ 284*61046927SAndroid Build Coastguard Worker XID share_xid; 285*61046927SAndroid Build Coastguard Worker 286*61046927SAndroid Build Coastguard Worker struct glx_screen *psc; 287*61046927SAndroid Build Coastguard Worker 288*61046927SAndroid Build Coastguard Worker /** 289*61046927SAndroid Build Coastguard Worker * \c GL_TRUE if the context was created with ImportContext, which 290*61046927SAndroid Build Coastguard Worker * means the server-side context was created by another X client. 291*61046927SAndroid Build Coastguard Worker */ 292*61046927SAndroid Build Coastguard Worker GLboolean imported; 293*61046927SAndroid Build Coastguard Worker 294*61046927SAndroid Build Coastguard Worker /** 295*61046927SAndroid Build Coastguard Worker * The context tag returned by MakeCurrent when this context is made 296*61046927SAndroid Build Coastguard Worker * current. This tag is used to identify the context that a thread has 297*61046927SAndroid Build Coastguard Worker * current so that proper server context management can be done. It is 298*61046927SAndroid Build Coastguard Worker * used for all context specific commands (i.e., \c Render, \c RenderLarge, 299*61046927SAndroid Build Coastguard Worker * \c WaitX, \c WaitGL, \c UseXFont, and \c MakeCurrent (for the old 300*61046927SAndroid Build Coastguard Worker * context)). 301*61046927SAndroid Build Coastguard Worker */ 302*61046927SAndroid Build Coastguard Worker GLXContextTag currentContextTag; 303*61046927SAndroid Build Coastguard Worker 304*61046927SAndroid Build Coastguard Worker /** 305*61046927SAndroid Build Coastguard Worker * \name Rendering mode 306*61046927SAndroid Build Coastguard Worker * 307*61046927SAndroid Build Coastguard Worker * The rendering mode is kept on the client as well as the server. 308*61046927SAndroid Build Coastguard Worker * When \c glRenderMode is called, the buffer associated with the 309*61046927SAndroid Build Coastguard Worker * previous rendering mode (feedback or select) is filled. 310*61046927SAndroid Build Coastguard Worker */ 311*61046927SAndroid Build Coastguard Worker /*@{ */ 312*61046927SAndroid Build Coastguard Worker GLenum renderMode; 313*61046927SAndroid Build Coastguard Worker GLfloat *feedbackBuf; 314*61046927SAndroid Build Coastguard Worker GLuint *selectBuf; 315*61046927SAndroid Build Coastguard Worker /*@} */ 316*61046927SAndroid Build Coastguard Worker 317*61046927SAndroid Build Coastguard Worker /** 318*61046927SAndroid Build Coastguard Worker * Client side attribs. 319*61046927SAndroid Build Coastguard Worker */ 320*61046927SAndroid Build Coastguard Worker __GLXattributeMachine attributes; 321*61046927SAndroid Build Coastguard Worker 322*61046927SAndroid Build Coastguard Worker /** 323*61046927SAndroid Build Coastguard Worker * Client side error code. This is set when client side gl API 324*61046927SAndroid Build Coastguard Worker * routines need to set an error because of a bad enumerant or 325*61046927SAndroid Build Coastguard Worker * running out of memory, etc. 326*61046927SAndroid Build Coastguard Worker */ 327*61046927SAndroid Build Coastguard Worker GLenum error; 328*61046927SAndroid Build Coastguard Worker 329*61046927SAndroid Build Coastguard Worker /** 330*61046927SAndroid Build Coastguard Worker * Whether this context does direct rendering. 331*61046927SAndroid Build Coastguard Worker */ 332*61046927SAndroid Build Coastguard Worker Bool isDirect; 333*61046927SAndroid Build Coastguard Worker 334*61046927SAndroid Build Coastguard Worker /* Backend private state for the context */ 335*61046927SAndroid Build Coastguard Worker void *driContext; 336*61046927SAndroid Build Coastguard Worker 337*61046927SAndroid Build Coastguard Worker /** 338*61046927SAndroid Build Coastguard Worker * \c dpy of current display for this context. Will be \c NULL if not 339*61046927SAndroid Build Coastguard Worker * current to any display, or if this is the "dummy context". 340*61046927SAndroid Build Coastguard Worker */ 341*61046927SAndroid Build Coastguard Worker Display *currentDpy; 342*61046927SAndroid Build Coastguard Worker 343*61046927SAndroid Build Coastguard Worker /** 344*61046927SAndroid Build Coastguard Worker * The current drawable for this context. Will be None if this 345*61046927SAndroid Build Coastguard Worker * context is not current to any drawable. currentReadable is below. 346*61046927SAndroid Build Coastguard Worker */ 347*61046927SAndroid Build Coastguard Worker GLXDrawable currentDrawable; 348*61046927SAndroid Build Coastguard Worker 349*61046927SAndroid Build Coastguard Worker /** 350*61046927SAndroid Build Coastguard Worker * \name GL Constant Strings 351*61046927SAndroid Build Coastguard Worker * 352*61046927SAndroid Build Coastguard Worker * Constant strings that describe the server implementation 353*61046927SAndroid Build Coastguard Worker * These pertain to GL attributes, not to be confused with 354*61046927SAndroid Build Coastguard Worker * GLX versioning attributes. 355*61046927SAndroid Build Coastguard Worker */ 356*61046927SAndroid Build Coastguard Worker /*@{ */ 357*61046927SAndroid Build Coastguard Worker GLubyte *vendor; 358*61046927SAndroid Build Coastguard Worker GLubyte *renderer; 359*61046927SAndroid Build Coastguard Worker GLubyte *version; 360*61046927SAndroid Build Coastguard Worker GLubyte *extensions; 361*61046927SAndroid Build Coastguard Worker /*@} */ 362*61046927SAndroid Build Coastguard Worker 363*61046927SAndroid Build Coastguard Worker /** 364*61046927SAndroid Build Coastguard Worker * Maximum small render command size. This is the smaller of 64k and 365*61046927SAndroid Build Coastguard Worker * the size of the above buffer. 366*61046927SAndroid Build Coastguard Worker */ 367*61046927SAndroid Build Coastguard Worker GLint maxSmallRenderCommandSize; 368*61046927SAndroid Build Coastguard Worker 369*61046927SAndroid Build Coastguard Worker /** 370*61046927SAndroid Build Coastguard Worker * Major opcode for the extension. Copied here so a lookup isn't 371*61046927SAndroid Build Coastguard Worker * needed. 372*61046927SAndroid Build Coastguard Worker */ 373*61046927SAndroid Build Coastguard Worker GLint majorOpcode; 374*61046927SAndroid Build Coastguard Worker 375*61046927SAndroid Build Coastguard Worker /** 376*61046927SAndroid Build Coastguard Worker * Pointer to the config used to create this context. 377*61046927SAndroid Build Coastguard Worker */ 378*61046927SAndroid Build Coastguard Worker struct glx_config *config; 379*61046927SAndroid Build Coastguard Worker 380*61046927SAndroid Build Coastguard Worker /** 381*61046927SAndroid Build Coastguard Worker * The current read-drawable for this context. Will be None if this 382*61046927SAndroid Build Coastguard Worker * context is not current to any drawable. 383*61046927SAndroid Build Coastguard Worker * 384*61046927SAndroid Build Coastguard Worker * \since Internal API version 20030606. 385*61046927SAndroid Build Coastguard Worker */ 386*61046927SAndroid Build Coastguard Worker GLXDrawable currentReadable; 387*61046927SAndroid Build Coastguard Worker 388*61046927SAndroid Build Coastguard Worker /** 389*61046927SAndroid Build Coastguard Worker * Pointer to client-state data that is private to libGL. This is only 390*61046927SAndroid Build Coastguard Worker * used for indirect rendering contexts. 391*61046927SAndroid Build Coastguard Worker * 392*61046927SAndroid Build Coastguard Worker * No internal API version change was made for this change. Client-side 393*61046927SAndroid Build Coastguard Worker * drivers should NEVER use this data or even care that it exists. 394*61046927SAndroid Build Coastguard Worker */ 395*61046927SAndroid Build Coastguard Worker void *client_state_private; 396*61046927SAndroid Build Coastguard Worker 397*61046927SAndroid Build Coastguard Worker /** 398*61046927SAndroid Build Coastguard Worker * Stored value for \c glXQueryContext attribute \c GLX_RENDER_TYPE. 399*61046927SAndroid Build Coastguard Worker */ 400*61046927SAndroid Build Coastguard Worker int renderType; 401*61046927SAndroid Build Coastguard Worker 402*61046927SAndroid Build Coastguard Worker /** 403*61046927SAndroid Build Coastguard Worker * \name Raw server GL version 404*61046927SAndroid Build Coastguard Worker * 405*61046927SAndroid Build Coastguard Worker * True core GL version supported by the server. This is the raw value 406*61046927SAndroid Build Coastguard Worker * returned by the server, and it may not reflect what is actually 407*61046927SAndroid Build Coastguard Worker * supported (or reported) by the client-side library. 408*61046927SAndroid Build Coastguard Worker */ 409*61046927SAndroid Build Coastguard Worker /*@{ */ 410*61046927SAndroid Build Coastguard Worker int server_major; /**< Major version number. */ 411*61046927SAndroid Build Coastguard Worker int server_minor; /**< Minor version number. */ 412*61046927SAndroid Build Coastguard Worker /*@} */ 413*61046927SAndroid Build Coastguard Worker 414*61046927SAndroid Build Coastguard Worker /** 415*61046927SAndroid Build Coastguard Worker * GLX_ARB_create_context_no_error setting for this context. 416*61046927SAndroid Build Coastguard Worker * This needs to be kept here to enforce shared context rules. 417*61046927SAndroid Build Coastguard Worker */ 418*61046927SAndroid Build Coastguard Worker Bool noError; 419*61046927SAndroid Build Coastguard Worker 420*61046927SAndroid Build Coastguard Worker char gl_extension_bits[__GL_EXT_BYTES]; 421*61046927SAndroid Build Coastguard Worker }; 422*61046927SAndroid Build Coastguard Worker 423*61046927SAndroid Build Coastguard Worker extern Bool 424*61046927SAndroid Build Coastguard Worker glx_context_init(struct glx_context *gc, 425*61046927SAndroid Build Coastguard Worker struct glx_screen *psc, struct glx_config *fbconfig); 426*61046927SAndroid Build Coastguard Worker 427*61046927SAndroid Build Coastguard Worker #define __glXSetError(gc,code) \ 428*61046927SAndroid Build Coastguard Worker if (!(gc)->error) { \ 429*61046927SAndroid Build Coastguard Worker (gc)->error = code; \ 430*61046927SAndroid Build Coastguard Worker } 431*61046927SAndroid Build Coastguard Worker 432*61046927SAndroid Build Coastguard Worker /************************************************************************/ 433*61046927SAndroid Build Coastguard Worker 434*61046927SAndroid Build Coastguard Worker /** 435*61046927SAndroid Build Coastguard Worker * The size of the largest drawing command known to the implementation 436*61046927SAndroid Build Coastguard Worker * that will use the GLXRender GLX command. In this case it is 437*61046927SAndroid Build Coastguard Worker * \c glPolygonStipple. 438*61046927SAndroid Build Coastguard Worker */ 439*61046927SAndroid Build Coastguard Worker #define __GLX_MAX_SMALL_RENDER_CMD_SIZE 156 440*61046927SAndroid Build Coastguard Worker 441*61046927SAndroid Build Coastguard Worker /** 442*61046927SAndroid Build Coastguard Worker * To keep the implementation fast, the code uses a "limit" pointer 443*61046927SAndroid Build Coastguard Worker * to determine when the drawing command buffer is too full to hold 444*61046927SAndroid Build Coastguard Worker * another fixed size command. This constant defines the amount of 445*61046927SAndroid Build Coastguard Worker * space that must always be available in the drawing command buffer 446*61046927SAndroid Build Coastguard Worker * at all times for the implementation to work. It is important that 447*61046927SAndroid Build Coastguard Worker * the number be just large enough, but not so large as to reduce the 448*61046927SAndroid Build Coastguard Worker * efficacy of the buffer. The "+32" is just to keep the code working 449*61046927SAndroid Build Coastguard Worker * in case somebody counts wrong. 450*61046927SAndroid Build Coastguard Worker */ 451*61046927SAndroid Build Coastguard Worker #define __GLX_BUFFER_LIMIT_SIZE (__GLX_MAX_SMALL_RENDER_CMD_SIZE + 32) 452*61046927SAndroid Build Coastguard Worker 453*61046927SAndroid Build Coastguard Worker /** 454*61046927SAndroid Build Coastguard Worker * This implementation uses a smaller threshold for switching 455*61046927SAndroid Build Coastguard Worker * to the RenderLarge protocol than the protocol requires so that 456*61046927SAndroid Build Coastguard Worker * large copies don't occur. 457*61046927SAndroid Build Coastguard Worker */ 458*61046927SAndroid Build Coastguard Worker #define __GLX_RENDER_CMD_SIZE_LIMIT 4096 459*61046927SAndroid Build Coastguard Worker 460*61046927SAndroid Build Coastguard Worker /** 461*61046927SAndroid Build Coastguard Worker * One of these records exists per screen of the display. It contains 462*61046927SAndroid Build Coastguard Worker * a pointer to the config data for that screen (if the screen supports GL). 463*61046927SAndroid Build Coastguard Worker */ 464*61046927SAndroid Build Coastguard Worker struct glx_screen_vtable { 465*61046927SAndroid Build Coastguard Worker struct glx_context *(*create_context)(struct glx_screen *psc, 466*61046927SAndroid Build Coastguard Worker struct glx_config *config, 467*61046927SAndroid Build Coastguard Worker struct glx_context *shareList, 468*61046927SAndroid Build Coastguard Worker int renderType); 469*61046927SAndroid Build Coastguard Worker 470*61046927SAndroid Build Coastguard Worker /* The error outparameter abuses the fact that the only possible errors are 471*61046927SAndroid Build Coastguard Worker * GLXBadContext (0), GLXBadFBConfig (9), GLXBadProfileARB (13), BadValue 472*61046927SAndroid Build Coastguard Worker * (2), BadMatch (8), and BadAlloc (11). Since those don't collide we just 473*61046927SAndroid Build Coastguard Worker * use them directly rather than try to offset or use a sign convention. 474*61046927SAndroid Build Coastguard Worker */ 475*61046927SAndroid Build Coastguard Worker struct glx_context *(*create_context_attribs)(struct glx_screen *psc, 476*61046927SAndroid Build Coastguard Worker struct glx_config *config, 477*61046927SAndroid Build Coastguard Worker struct glx_context *shareList, 478*61046927SAndroid Build Coastguard Worker unsigned num_attrib, 479*61046927SAndroid Build Coastguard Worker const uint32_t *attribs, 480*61046927SAndroid Build Coastguard Worker unsigned *error); 481*61046927SAndroid Build Coastguard Worker int (*query_renderer_integer)(struct glx_screen *psc, 482*61046927SAndroid Build Coastguard Worker int attribute, 483*61046927SAndroid Build Coastguard Worker unsigned int *value); 484*61046927SAndroid Build Coastguard Worker int (*query_renderer_string)(struct glx_screen *psc, 485*61046927SAndroid Build Coastguard Worker int attribute, 486*61046927SAndroid Build Coastguard Worker const char **value); 487*61046927SAndroid Build Coastguard Worker 488*61046927SAndroid Build Coastguard Worker char *(*get_driver_name)(struct glx_screen *psc); 489*61046927SAndroid Build Coastguard Worker }; 490*61046927SAndroid Build Coastguard Worker 491*61046927SAndroid Build Coastguard Worker struct glx_screen 492*61046927SAndroid Build Coastguard Worker { 493*61046927SAndroid Build Coastguard Worker const struct glx_screen_vtable *vtable; 494*61046927SAndroid Build Coastguard Worker const struct glx_context_vtable *context_vtable; 495*61046927SAndroid Build Coastguard Worker 496*61046927SAndroid Build Coastguard Worker /** 497*61046927SAndroid Build Coastguard Worker * \name Storage for the GLX vendor, version, and extension strings 498*61046927SAndroid Build Coastguard Worker */ 499*61046927SAndroid Build Coastguard Worker /*@{ */ 500*61046927SAndroid Build Coastguard Worker const char *serverGLXexts; 501*61046927SAndroid Build Coastguard Worker const char *serverGLXvendor; 502*61046927SAndroid Build Coastguard Worker const char *serverGLXversion; 503*61046927SAndroid Build Coastguard Worker /*@} */ 504*61046927SAndroid Build Coastguard Worker 505*61046927SAndroid Build Coastguard Worker /** 506*61046927SAndroid Build Coastguard Worker * GLX extension string to be reported to applications. This is the 507*61046927SAndroid Build Coastguard Worker * set of extensions that the application can actually use. 508*61046927SAndroid Build Coastguard Worker */ 509*61046927SAndroid Build Coastguard Worker char *effectiveGLXexts; 510*61046927SAndroid Build Coastguard Worker 511*61046927SAndroid Build Coastguard Worker struct glx_display *display; 512*61046927SAndroid Build Coastguard Worker 513*61046927SAndroid Build Coastguard Worker Display *dpy; 514*61046927SAndroid Build Coastguard Worker int scr; 515*61046927SAndroid Build Coastguard Worker bool force_direct_context; 516*61046927SAndroid Build Coastguard Worker bool allow_invalid_glx_destroy_window; 517*61046927SAndroid Build Coastguard Worker bool keep_native_window_glx_drawable; 518*61046927SAndroid Build Coastguard Worker bool can_EXT_texture_from_pixmap; 519*61046927SAndroid Build Coastguard Worker 520*61046927SAndroid Build Coastguard Worker char *driverName; 521*61046927SAndroid Build Coastguard Worker 522*61046927SAndroid Build Coastguard Worker #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) 523*61046927SAndroid Build Coastguard Worker /** 524*61046927SAndroid Build Coastguard Worker * Per screen direct rendering interface functions and data. 525*61046927SAndroid Build Coastguard Worker */ 526*61046927SAndroid Build Coastguard Worker __GLXDRIscreen driScreen; 527*61046927SAndroid Build Coastguard Worker __DRIscreen *frontend_screen; 528*61046927SAndroid Build Coastguard Worker const __DRIconfig **driver_configs; 529*61046927SAndroid Build Coastguard Worker #endif 530*61046927SAndroid Build Coastguard Worker 531*61046927SAndroid Build Coastguard Worker /** 532*61046927SAndroid Build Coastguard Worker * Linked list of glx visuals and fbconfigs for this screen. 533*61046927SAndroid Build Coastguard Worker */ 534*61046927SAndroid Build Coastguard Worker struct glx_config *visuals, *configs; 535*61046927SAndroid Build Coastguard Worker 536*61046927SAndroid Build Coastguard Worker /** 537*61046927SAndroid Build Coastguard Worker * Per-screen dynamic GLX extension tracking. The \c direct_support 538*61046927SAndroid Build Coastguard Worker * field only contains enough bits for 64 extensions. Should libGL 539*61046927SAndroid Build Coastguard Worker * ever need to track more than 64 GLX extensions, we can safely grow 540*61046927SAndroid Build Coastguard Worker * this field. The \c struct glx_screen structure is not used outside 541*61046927SAndroid Build Coastguard Worker * libGL. 542*61046927SAndroid Build Coastguard Worker */ 543*61046927SAndroid Build Coastguard Worker /*@{ */ 544*61046927SAndroid Build Coastguard Worker unsigned char direct_support[__GLX_EXT_BYTES]; 545*61046927SAndroid Build Coastguard Worker GLboolean ext_list_first_time; 546*61046927SAndroid Build Coastguard Worker 547*61046927SAndroid Build Coastguard Worker unsigned char glx_force_enabled[__GLX_EXT_BYTES]; 548*61046927SAndroid Build Coastguard Worker unsigned char glx_force_disabled[__GLX_EXT_BYTES]; 549*61046927SAndroid Build Coastguard Worker 550*61046927SAndroid Build Coastguard Worker unsigned char gl_force_enabled[__GL_EXT_BYTES]; 551*61046927SAndroid Build Coastguard Worker unsigned char gl_force_disabled[__GL_EXT_BYTES]; 552*61046927SAndroid Build Coastguard Worker /*@} */ 553*61046927SAndroid Build Coastguard Worker 554*61046927SAndroid Build Coastguard Worker }; 555*61046927SAndroid Build Coastguard Worker 556*61046927SAndroid Build Coastguard Worker /** 557*61046927SAndroid Build Coastguard Worker * Per display private data. One of these records exists for each display 558*61046927SAndroid Build Coastguard Worker * that is using the OpenGL (GLX) extension. 559*61046927SAndroid Build Coastguard Worker */ 560*61046927SAndroid Build Coastguard Worker struct glx_display 561*61046927SAndroid Build Coastguard Worker { 562*61046927SAndroid Build Coastguard Worker struct glx_display *next; 563*61046927SAndroid Build Coastguard Worker 564*61046927SAndroid Build Coastguard Worker enum glx_driver driver; 565*61046927SAndroid Build Coastguard Worker 566*61046927SAndroid Build Coastguard Worker /* The extension protocol codes */ 567*61046927SAndroid Build Coastguard Worker XExtCodes codes; 568*61046927SAndroid Build Coastguard Worker 569*61046927SAndroid Build Coastguard Worker /** 570*61046927SAndroid Build Coastguard Worker * Back pointer to the display 571*61046927SAndroid Build Coastguard Worker */ 572*61046927SAndroid Build Coastguard Worker Display *dpy; 573*61046927SAndroid Build Coastguard Worker 574*61046927SAndroid Build Coastguard Worker /** 575*61046927SAndroid Build Coastguard Worker * \name Minor Version 576*61046927SAndroid Build Coastguard Worker * 577*61046927SAndroid Build Coastguard Worker * Minor version returned by the server during initialization. The major 578*61046927SAndroid Build Coastguard Worker * version is asserted to be 1 during extension setup. 579*61046927SAndroid Build Coastguard Worker */ 580*61046927SAndroid Build Coastguard Worker /*@{ */ 581*61046927SAndroid Build Coastguard Worker int minorVersion; 582*61046927SAndroid Build Coastguard Worker /*@} */ 583*61046927SAndroid Build Coastguard Worker 584*61046927SAndroid Build Coastguard Worker /** 585*61046927SAndroid Build Coastguard Worker * Configurations of visuals for all screens on this display. 586*61046927SAndroid Build Coastguard Worker * Also, per screen data which now includes the server \c GLX_EXTENSION 587*61046927SAndroid Build Coastguard Worker * string. 588*61046927SAndroid Build Coastguard Worker */ 589*61046927SAndroid Build Coastguard Worker struct glx_screen **screens; 590*61046927SAndroid Build Coastguard Worker 591*61046927SAndroid Build Coastguard Worker __glxHashTable *glXDrawHash; 592*61046927SAndroid Build Coastguard Worker 593*61046927SAndroid Build Coastguard Worker #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) 594*61046927SAndroid Build Coastguard Worker __glxHashTable *drawHash; 595*61046927SAndroid Build Coastguard Worker 596*61046927SAndroid Build Coastguard Worker /** 597*61046927SAndroid Build Coastguard Worker * GLXDrawable created from native window and about to be released. 598*61046927SAndroid Build Coastguard Worker */ 599*61046927SAndroid Build Coastguard Worker struct set *zombieGLXDrawable; 600*61046927SAndroid Build Coastguard Worker 601*61046927SAndroid Build Coastguard Worker __glxHashTable *dri2Hash; 602*61046927SAndroid Build Coastguard Worker bool has_multibuffer; 603*61046927SAndroid Build Coastguard Worker bool has_explicit_modifiers; 604*61046927SAndroid Build Coastguard Worker #endif 605*61046927SAndroid Build Coastguard Worker #ifdef GLX_USE_WINDOWSGL 606*61046927SAndroid Build Coastguard Worker __GLXDRIdisplay *windowsdriDisplay; 607*61046927SAndroid Build Coastguard Worker #endif 608*61046927SAndroid Build Coastguard Worker }; 609*61046927SAndroid Build Coastguard Worker 610*61046927SAndroid Build Coastguard Worker struct glx_drawable { 611*61046927SAndroid Build Coastguard Worker XID xDrawable; 612*61046927SAndroid Build Coastguard Worker XID drawable; 613*61046927SAndroid Build Coastguard Worker 614*61046927SAndroid Build Coastguard Worker uint32_t lastEventSbc; 615*61046927SAndroid Build Coastguard Worker int64_t eventSbcWrap; 616*61046927SAndroid Build Coastguard Worker }; 617*61046927SAndroid Build Coastguard Worker 618*61046927SAndroid Build Coastguard Worker extern int 619*61046927SAndroid Build Coastguard Worker glx_screen_init(struct glx_screen *psc, 620*61046927SAndroid Build Coastguard Worker int screen, struct glx_display * priv); 621*61046927SAndroid Build Coastguard Worker extern void 622*61046927SAndroid Build Coastguard Worker glx_screen_cleanup(struct glx_screen *psc); 623*61046927SAndroid Build Coastguard Worker 624*61046927SAndroid Build Coastguard Worker #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) 625*61046927SAndroid Build Coastguard Worker extern __GLXDRIdrawable * 626*61046927SAndroid Build Coastguard Worker dri2GetGlxDrawableFromXDrawableId(Display *dpy, XID id); 627*61046927SAndroid Build Coastguard Worker #endif 628*61046927SAndroid Build Coastguard Worker 629*61046927SAndroid Build Coastguard Worker extern GLubyte *__glXFlushRenderBuffer(struct glx_context *, GLubyte *); 630*61046927SAndroid Build Coastguard Worker 631*61046927SAndroid Build Coastguard Worker extern void __glXSendLargeChunk(struct glx_context * gc, GLint requestNumber, 632*61046927SAndroid Build Coastguard Worker GLint totalRequests, 633*61046927SAndroid Build Coastguard Worker const GLvoid * data, GLint dataLen); 634*61046927SAndroid Build Coastguard Worker 635*61046927SAndroid Build Coastguard Worker extern void __glXSendLargeCommand(struct glx_context *, const GLvoid *, GLint, 636*61046927SAndroid Build Coastguard Worker const GLvoid *, GLint); 637*61046927SAndroid Build Coastguard Worker 638*61046927SAndroid Build Coastguard Worker /* Initialize the GLX extension for dpy */ 639*61046927SAndroid Build Coastguard Worker extern struct glx_display *__glXInitialize(Display *); 640*61046927SAndroid Build Coastguard Worker 641*61046927SAndroid Build Coastguard Worker /************************************************************************/ 642*61046927SAndroid Build Coastguard Worker 643*61046927SAndroid Build Coastguard Worker extern int __glXDebug; 644*61046927SAndroid Build Coastguard Worker 645*61046927SAndroid Build Coastguard Worker /* This is per-thread storage in an MT environment */ 646*61046927SAndroid Build Coastguard Worker 647*61046927SAndroid Build Coastguard Worker extern void __glXSetCurrentContext(struct glx_context * c); 648*61046927SAndroid Build Coastguard Worker 649*61046927SAndroid Build Coastguard Worker extern __THREAD_INITIAL_EXEC void *__glX_tls_Context; 650*61046927SAndroid Build Coastguard Worker 651*61046927SAndroid Build Coastguard Worker # define __glXGetCurrentContext() __glX_tls_Context 652*61046927SAndroid Build Coastguard Worker 653*61046927SAndroid Build Coastguard Worker extern void __glXSetCurrentContextNull(void); 654*61046927SAndroid Build Coastguard Worker 655*61046927SAndroid Build Coastguard Worker 656*61046927SAndroid Build Coastguard Worker /* 657*61046927SAndroid Build Coastguard Worker ** Global lock for all threads in this address space using the GLX 658*61046927SAndroid Build Coastguard Worker ** extension 659*61046927SAndroid Build Coastguard Worker */ 660*61046927SAndroid Build Coastguard Worker extern pthread_mutex_t __glXmutex; 661*61046927SAndroid Build Coastguard Worker #define __glXLock() pthread_mutex_lock(&__glXmutex) 662*61046927SAndroid Build Coastguard Worker #define __glXUnlock() pthread_mutex_unlock(&__glXmutex) 663*61046927SAndroid Build Coastguard Worker 664*61046927SAndroid Build Coastguard Worker /* 665*61046927SAndroid Build Coastguard Worker ** Setup for a command. Initialize the extension for dpy if necessary. 666*61046927SAndroid Build Coastguard Worker */ 667*61046927SAndroid Build Coastguard Worker extern CARD8 __glXSetupForCommand(Display * dpy); 668*61046927SAndroid Build Coastguard Worker 669*61046927SAndroid Build Coastguard Worker /************************************************************************/ 670*61046927SAndroid Build Coastguard Worker 671*61046927SAndroid Build Coastguard Worker /* 672*61046927SAndroid Build Coastguard Worker ** Data conversion and packing support. 673*61046927SAndroid Build Coastguard Worker */ 674*61046927SAndroid Build Coastguard Worker 675*61046927SAndroid Build Coastguard Worker extern const GLuint __glXDefaultPixelStore[9]; 676*61046927SAndroid Build Coastguard Worker 677*61046927SAndroid Build Coastguard Worker /* Send an image to the server using RenderLarge. */ 678*61046927SAndroid Build Coastguard Worker extern void __glXSendLargeImage(struct glx_context * gc, GLint compsize, GLint dim, 679*61046927SAndroid Build Coastguard Worker GLint width, GLint height, GLint depth, 680*61046927SAndroid Build Coastguard Worker GLenum format, GLenum type, 681*61046927SAndroid Build Coastguard Worker const GLvoid * src, GLubyte * pc, 682*61046927SAndroid Build Coastguard Worker GLubyte * modes); 683*61046927SAndroid Build Coastguard Worker 684*61046927SAndroid Build Coastguard Worker /* Return the size, in bytes, of some pixel data */ 685*61046927SAndroid Build Coastguard Worker extern GLint __glImageSize(GLint, GLint, GLint, GLenum, GLenum, GLenum); 686*61046927SAndroid Build Coastguard Worker 687*61046927SAndroid Build Coastguard Worker /* Return the number of elements per group of a specified format*/ 688*61046927SAndroid Build Coastguard Worker extern GLint __glElementsPerGroup(GLenum format, GLenum type); 689*61046927SAndroid Build Coastguard Worker 690*61046927SAndroid Build Coastguard Worker /* Return the number of bytes per element, based on the element type (other 691*61046927SAndroid Build Coastguard Worker ** than GL_BITMAP). 692*61046927SAndroid Build Coastguard Worker */ 693*61046927SAndroid Build Coastguard Worker extern GLint __glBytesPerElement(GLenum type); 694*61046927SAndroid Build Coastguard Worker 695*61046927SAndroid Build Coastguard Worker /* 696*61046927SAndroid Build Coastguard Worker ** Fill the transport buffer with the data from the users buffer, 697*61046927SAndroid Build Coastguard Worker ** applying some of the pixel store modes (unpack modes) to the data 698*61046927SAndroid Build Coastguard Worker ** first. As a side effect of this call, the "modes" field is 699*61046927SAndroid Build Coastguard Worker ** updated to contain the modes needed by the server to decode the 700*61046927SAndroid Build Coastguard Worker ** sent data. 701*61046927SAndroid Build Coastguard Worker */ 702*61046927SAndroid Build Coastguard Worker extern void __glFillImage(struct glx_context *, GLint, GLint, GLint, GLint, GLenum, 703*61046927SAndroid Build Coastguard Worker GLenum, const GLvoid *, GLubyte *, GLubyte *); 704*61046927SAndroid Build Coastguard Worker 705*61046927SAndroid Build Coastguard Worker /* Copy map data with a stride into a packed buffer */ 706*61046927SAndroid Build Coastguard Worker extern void __glFillMap1f(GLint, GLint, GLint, const GLfloat *, GLubyte *); 707*61046927SAndroid Build Coastguard Worker extern void __glFillMap1d(GLint, GLint, GLint, const GLdouble *, GLubyte *); 708*61046927SAndroid Build Coastguard Worker extern void __glFillMap2f(GLint, GLint, GLint, GLint, GLint, 709*61046927SAndroid Build Coastguard Worker const GLfloat *, GLfloat *); 710*61046927SAndroid Build Coastguard Worker extern void __glFillMap2d(GLint, GLint, GLint, GLint, GLint, 711*61046927SAndroid Build Coastguard Worker const GLdouble *, GLdouble *); 712*61046927SAndroid Build Coastguard Worker 713*61046927SAndroid Build Coastguard Worker /* 714*61046927SAndroid Build Coastguard Worker ** Empty an image out of the reply buffer into the clients memory applying 715*61046927SAndroid Build Coastguard Worker ** the pack modes to pack back into the clients requested format. 716*61046927SAndroid Build Coastguard Worker */ 717*61046927SAndroid Build Coastguard Worker extern void __glEmptyImage(struct glx_context *, GLint, GLint, GLint, GLint, GLenum, 718*61046927SAndroid Build Coastguard Worker GLenum, const GLubyte *, GLvoid *); 719*61046927SAndroid Build Coastguard Worker 720*61046927SAndroid Build Coastguard Worker 721*61046927SAndroid Build Coastguard Worker /* 722*61046927SAndroid Build Coastguard Worker ** Allocate and Initialize Vertex Array client state, and free. 723*61046927SAndroid Build Coastguard Worker */ 724*61046927SAndroid Build Coastguard Worker extern void __glXInitVertexArrayState(struct glx_context *); 725*61046927SAndroid Build Coastguard Worker extern void __glXFreeVertexArrayState(struct glx_context *); 726*61046927SAndroid Build Coastguard Worker 727*61046927SAndroid Build Coastguard Worker extern void glxSendClientInfo(struct glx_display *glx_dpy, int screen); 728*61046927SAndroid Build Coastguard Worker 729*61046927SAndroid Build Coastguard Worker /************************************************************************/ 730*61046927SAndroid Build Coastguard Worker 731*61046927SAndroid Build Coastguard Worker extern void __glXInitializeVisualConfigFromTags(struct glx_config * config, 732*61046927SAndroid Build Coastguard Worker int count, const INT32 * bp, 733*61046927SAndroid Build Coastguard Worker Bool tagged_only, 734*61046927SAndroid Build Coastguard Worker Bool fbconfig_style_tags); 735*61046927SAndroid Build Coastguard Worker 736*61046927SAndroid Build Coastguard Worker extern char *__glXQueryServerString(Display *dpy, CARD32 screen, CARD32 name); 737*61046927SAndroid Build Coastguard Worker extern char *__glXGetString(Display *dpy, CARD32 screen, CARD32 name); 738*61046927SAndroid Build Coastguard Worker 739*61046927SAndroid Build Coastguard Worker extern GLboolean __glXGetMscRateOML(Display * dpy, GLXDrawable drawable, 740*61046927SAndroid Build Coastguard Worker int32_t * numerator, 741*61046927SAndroid Build Coastguard Worker int32_t * denominator); 742*61046927SAndroid Build Coastguard Worker 743*61046927SAndroid Build Coastguard Worker #if defined(GLX_DIRECT_RENDERING) && (!defined(GLX_USE_APPLEGL) || defined(GLX_USE_APPLE)) 744*61046927SAndroid Build Coastguard Worker extern GLboolean 745*61046927SAndroid Build Coastguard Worker __glxGetMscRate(struct glx_screen *psc, 746*61046927SAndroid Build Coastguard Worker int32_t * numerator, int32_t * denominator); 747*61046927SAndroid Build Coastguard Worker 748*61046927SAndroid Build Coastguard Worker /* So that dri2.c:DRI2WireToEvent() can access 749*61046927SAndroid Build Coastguard Worker * glx_info->codes->first_event */ 750*61046927SAndroid Build Coastguard Worker XExtDisplayInfo *__glXFindDisplay (Display *dpy); 751*61046927SAndroid Build Coastguard Worker 752*61046927SAndroid Build Coastguard Worker extern __GLXDRIdrawable * 753*61046927SAndroid Build Coastguard Worker GetGLXDRIDrawable(Display *dpy, GLXDrawable drawable); 754*61046927SAndroid Build Coastguard Worker #endif 755*61046927SAndroid Build Coastguard Worker 756*61046927SAndroid Build Coastguard Worker extern struct glx_screen *GetGLXScreenConfigs(Display * dpy, int scrn); 757*61046927SAndroid Build Coastguard Worker 758*61046927SAndroid Build Coastguard Worker #ifdef GLX_USE_APPLEGL 759*61046927SAndroid Build Coastguard Worker extern struct glx_screen * 760*61046927SAndroid Build Coastguard Worker applegl_create_screen(int screen, struct glx_display * priv); 761*61046927SAndroid Build Coastguard Worker 762*61046927SAndroid Build Coastguard Worker extern struct glx_context * 763*61046927SAndroid Build Coastguard Worker applegl_create_context(struct glx_screen *psc, 764*61046927SAndroid Build Coastguard Worker struct glx_config *mode, 765*61046927SAndroid Build Coastguard Worker struct glx_context *shareList, int renderType); 766*61046927SAndroid Build Coastguard Worker 767*61046927SAndroid Build Coastguard Worker extern int 768*61046927SAndroid Build Coastguard Worker applegl_create_display(struct glx_display *display); 769*61046927SAndroid Build Coastguard Worker 770*61046927SAndroid Build Coastguard Worker extern void * 771*61046927SAndroid Build Coastguard Worker applegl_get_proc_address(const char *symbol); 772*61046927SAndroid Build Coastguard Worker #endif 773*61046927SAndroid Build Coastguard Worker 774*61046927SAndroid Build Coastguard Worker extern Bool validate_renderType_against_config(const struct glx_config *config, 775*61046927SAndroid Build Coastguard Worker int renderType); 776*61046927SAndroid Build Coastguard Worker 777*61046927SAndroid Build Coastguard Worker 778*61046927SAndroid Build Coastguard Worker extern struct glx_drawable *GetGLXDrawable(Display *dpy, GLXDrawable drawable); 779*61046927SAndroid Build Coastguard Worker extern int InitGLXDrawable(Display *dpy, struct glx_drawable *glxDraw, 780*61046927SAndroid Build Coastguard Worker XID xDrawable, GLXDrawable drawable); 781*61046927SAndroid Build Coastguard Worker extern void DestroyGLXDrawable(Display *dpy, GLXDrawable drawable); 782*61046927SAndroid Build Coastguard Worker 783*61046927SAndroid Build Coastguard Worker extern struct glx_context dummyContext; 784*61046927SAndroid Build Coastguard Worker 785*61046927SAndroid Build Coastguard Worker extern struct glx_screen * 786*61046927SAndroid Build Coastguard Worker indirect_create_screen(int screen, struct glx_display * priv); 787*61046927SAndroid Build Coastguard Worker extern struct glx_context * 788*61046927SAndroid Build Coastguard Worker indirect_create_context(struct glx_screen *psc, 789*61046927SAndroid Build Coastguard Worker struct glx_config *mode, 790*61046927SAndroid Build Coastguard Worker struct glx_context *shareList, int renderType); 791*61046927SAndroid Build Coastguard Worker extern struct glx_context * 792*61046927SAndroid Build Coastguard Worker indirect_create_context_attribs(struct glx_screen *base, 793*61046927SAndroid Build Coastguard Worker struct glx_config *config_base, 794*61046927SAndroid Build Coastguard Worker struct glx_context *shareList, 795*61046927SAndroid Build Coastguard Worker unsigned num_attribs, 796*61046927SAndroid Build Coastguard Worker const uint32_t *attribs, 797*61046927SAndroid Build Coastguard Worker unsigned *error); 798*61046927SAndroid Build Coastguard Worker 799*61046927SAndroid Build Coastguard Worker 800*61046927SAndroid Build Coastguard Worker extern int __glXGetDrawableAttribute(Display * dpy, GLXDrawable drawable, 801*61046927SAndroid Build Coastguard Worker int attribute, unsigned int *value); 802*61046927SAndroid Build Coastguard Worker 803*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 804*61046927SAndroid Build Coastguard Worker } 805*61046927SAndroid Build Coastguard Worker #endif 806*61046927SAndroid Build Coastguard Worker 807*61046927SAndroid Build Coastguard Worker #endif /* !__GLX_client_h__ */ 808