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));
}
|