File: egl_test_utils.c

package info (click to toggle)
libglvnd 1.7.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,476 kB
  • sloc: xml: 52,727; ansic: 49,924; python: 852; makefile: 752; cpp: 596; sh: 109
file content (108 lines) | stat: -rw-r--r-- 3,603 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "egl_test_utils.h"

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>

const char *DUMMY_VENDOR_NAMES[DUMMY_VENDOR_COUNT] = {
    DUMMY_VENDOR_NAME_0,
    DUMMY_VENDOR_NAME_1,
};

PFNEGLQUERYDEVICESEXTPROC ptr_eglQueryDevicesEXT;
PFNEGLDEBUGMESSAGECONTROLKHRPROC ptr_eglDebugMessageControlKHR;
PFNEGLQUERYDEBUGKHRPROC ptr_eglQueryDebugKHR;
PFNEGLLABELOBJECTKHRPROC ptr_eglLabelObjectKHR;
PFNEGLQUERYDEVICEATTRIBEXTPROC ptr_eglQueryDeviceAttribEXT;
PFNEGLQUERYDEVICESTRINGEXTPROC ptr_eglQueryDeviceStringEXT;
PFNEGLQUERYDISPLAYATTRIBEXTPROC ptr_eglQueryDisplayAttribEXT;

pfn_eglTestDispatchDisplay ptr_eglTestDispatchDisplay;
pfn_eglTestDispatchDevice ptr_eglTestDispatchDevice;
pfn_eglTestDispatchCurrent ptr_eglTestDispatchCurrent;
pfn_eglTestReturnDevice ptr_eglTestReturnDevice;

static void *dummyVendorHandles[DUMMY_VENDOR_COUNT] = {};
DummyVendorFunctions dummyFuncs[DUMMY_VENDOR_COUNT] = {};

__eglMustCastToProperFunctionPointerType loadEGLFunction(const char *name)
{
    __eglMustCastToProperFunctionPointerType ret = eglGetProcAddress(name);
    if (ret == NULL) {
        printf("Can't load function: %s\n", name);
        abort();
    }
    return ret;
}

void loadEGLExtensions(void)
{
    ptr_eglQueryDevicesEXT = (PFNEGLQUERYDEVICESEXTPROC)
        loadEGLFunction("eglQueryDevicesEXT");
    ptr_eglQueryDeviceAttribEXT = (PFNEGLQUERYDEVICEATTRIBEXTPROC)
        loadEGLFunction("eglQueryDeviceAttribEXT");
    ptr_eglQueryDeviceStringEXT = (PFNEGLQUERYDEVICESTRINGEXTPROC)
        loadEGLFunction("eglQueryDeviceStringEXT");
    ptr_eglQueryDisplayAttribEXT = (PFNEGLQUERYDISPLAYATTRIBEXTPROC)
        loadEGLFunction("eglQueryDisplayAttribEXT");
    ptr_eglDebugMessageControlKHR = (PFNEGLDEBUGMESSAGECONTROLKHRPROC)
        loadEGLFunction("eglDebugMessageControlKHR");
    ptr_eglQueryDebugKHR = (PFNEGLQUERYDEBUGKHRPROC)
        loadEGLFunction("eglQueryDebugKHR");
    ptr_eglLabelObjectKHR = (PFNEGLLABELOBJECTKHRPROC)
        loadEGLFunction("eglLabelObjectKHR");

    ptr_eglTestDispatchDisplay = (pfn_eglTestDispatchDisplay)
        loadEGLFunction("eglTestDispatchDisplay");
    ptr_eglTestDispatchDevice = (pfn_eglTestDispatchDevice)
        loadEGLFunction("eglTestDispatchDevice");
    ptr_eglTestDispatchCurrent = (pfn_eglTestDispatchCurrent)
        loadEGLFunction("eglTestDispatchCurrent");
    ptr_eglTestReturnDevice = (pfn_eglTestReturnDevice)
        loadEGLFunction("eglTestReturnDevice");
}

void loadDummyVendorExtensions(void)
{
    int i;

    for (i=0; i<DUMMY_VENDOR_COUNT; i++)
    {
        if (dummyVendorHandles[i] == NULL)
        {
            char filename[128];
            snprintf(filename, sizeof(filename), "libEGL_%s.so.0", DUMMY_VENDOR_NAMES[i]);
            dummyVendorHandles[i] = dlopen(filename, RTLD_LAZY | RTLD_LOCAL);
            if (dummyVendorHandles[i] == NULL)
            {
                printf("Failed to load %s: %s\n", filename, dlerror());
                abort();
            }

            dummyFuncs[i].SetDeviceCount = dlsym(dummyVendorHandles[i], "DummySetDeviceCount");
            if (dummyFuncs[i].SetDeviceCount == NULL)
            {
                printf("Can't load DummySetDeviceCount from %s\n", filename);
                abort();
            }
        }
    }
}

void cleanupDummyVendorExtensions(void)
{
    int i;

    for (i=0; i<DUMMY_VENDOR_COUNT; i++)
    {
        if (dummyVendorHandles[i] != NULL)
        {
            dlclose(dummyVendorHandles[i]);
            dummyVendorHandles[i] = NULL;
        }
    }

    memset(&dummyFuncs, 0, sizeof(dummyFuncs));
}