Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/glx/glxglvnd.c
4558 views
1
#include <string.h>
2
#include <stdlib.h>
3
#include <X11/Xlib.h>
4
5
#include "glvnd/libglxabi.h"
6
7
#include "glxglvnd.h"
8
9
static Bool __glXGLVNDIsScreenSupported(Display *dpy, int screen)
10
{
11
/* TODO: Think of a better heuristic... */
12
return True;
13
}
14
15
static void *__glXGLVNDGetProcAddress(const GLubyte *procName)
16
{
17
return glXGetProcAddressARB(procName);
18
}
19
20
static int
21
compare(const void *l, const void *r)
22
{
23
const char *s = *(const char **)r;
24
return strcmp(l, s);
25
}
26
27
static unsigned FindGLXFunction(const GLubyte *name)
28
{
29
const char **match;
30
31
match = bsearch(name, __glXDispatchTableStrings, DI_FUNCTION_COUNT,
32
sizeof(const char *), compare);
33
34
if (match == NULL)
35
return DI_FUNCTION_COUNT;
36
37
return match - __glXDispatchTableStrings;
38
}
39
40
static void *__glXGLVNDGetDispatchAddress(const GLubyte *procName)
41
{
42
unsigned internalIndex = FindGLXFunction(procName);
43
44
return (void*)__glXDispatchFunctions[internalIndex];
45
}
46
47
static void __glXGLVNDSetDispatchIndex(const GLubyte *procName, int index)
48
{
49
unsigned internalIndex = FindGLXFunction(procName);
50
51
if (internalIndex == DI_FUNCTION_COUNT)
52
return; /* unknown or static dispatch */
53
54
__glXDispatchTableIndices[internalIndex] = index;
55
}
56
57
_X_EXPORT Bool __glx_Main(uint32_t version, const __GLXapiExports *exports,
58
__GLXvendorInfo *vendor, __GLXapiImports *imports)
59
{
60
static Bool initDone = False;
61
62
if (GLX_VENDOR_ABI_GET_MAJOR_VERSION(version) !=
63
GLX_VENDOR_ABI_MAJOR_VERSION ||
64
GLX_VENDOR_ABI_GET_MINOR_VERSION(version) <
65
GLX_VENDOR_ABI_MINOR_VERSION)
66
return False;
67
68
if (!initDone) {
69
initDone = True;
70
__glXGLVNDAPIExports = exports;
71
72
imports->isScreenSupported = __glXGLVNDIsScreenSupported;
73
imports->getProcAddress = __glXGLVNDGetProcAddress;
74
imports->getDispatchAddress = __glXGLVNDGetDispatchAddress;
75
imports->setDispatchIndex = __glXGLVNDSetDispatchIndex;
76
imports->notifyError = NULL;
77
imports->isPatchSupported = NULL;
78
imports->initiatePatch = NULL;
79
}
80
81
return True;
82
}
83
84