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