~mmach/netext73/mesa-haswell

« back to all changes in this revision

Viewing changes to src/glx/glxglvnd.c

  • Committer: mmach
  • Date: 2022-09-22 19:56:13 UTC
  • Revision ID: netbit73@gmail.com-20220922195613-wtik9mmy20tmor0i
2022-09-22 21:17:09

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
}