diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2022-09-10 21:46:03 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2022-09-10 21:46:03 +0200 |
| commit | cda4af34037a3cb982d8e69bc03c94d32fe6dd6c (patch) | |
| tree | 83810233b199c1fcc2043ef7e4d64122de4d0db4 /src/wrapped/wrappedvulkan.c | |
| parent | 93ea5bacb7f104b730980a957688c210175b41dd (diff) | |
| download | box64-cda4af34037a3cb982d8e69bc03c94d32fe6dd6c.tar.gz box64-cda4af34037a3cb982d8e69bc03c94d32fe6dd6c.zip | |
Added some more GL/GLES extensions
Diffstat (limited to 'src/wrapped/wrappedvulkan.c')
| -rwxr-xr-x | src/wrapped/wrappedvulkan.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/wrapped/wrappedvulkan.c b/src/wrapped/wrappedvulkan.c index 56868ac5..074082d8 100755 --- a/src/wrapped/wrappedvulkan.c +++ b/src/wrapped/wrappedvulkan.c @@ -139,6 +139,38 @@ EXPORT void* my_vkGetInstanceProcAddr(x64emu_t* emu, void* instance, void* name) return resolveSymbol(emu, symbol, rname); } +void* my_GetVkProcAddr(x64emu_t* emu, void* name, void*(*getaddr)(const char*)) +{ + khint_t k; + const char* rname = (const char*)name; + + printf_dlsym(LOG_DEBUG, "Calling my_GetVkProcAddr(\"%s\", %p) => ", rname, getaddr); + if(!emu->context->vkwrappers) + fillVulkanProcWrapper(emu->context); + // check if vkprocaddress is filled, and search for lib and fill it if needed + // get proc adress using actual glXGetProcAddress + k = kh_get(symbolmap, emu->context->vkmymap, rname); + int is_my = (k==kh_end(emu->context->vkmymap))?0:1; + void* symbol = getaddr(rname); + if(!symbol) { + printf_dlsym(LOG_DEBUG, "%p\n", NULL); + return NULL; // easy + } + if(is_my) { + // try again, by using custom "my_" now... + char tmp[200]; + strcpy(tmp, "my_"); + strcat(tmp, rname); + symbol = dlsym(emu->context->box64lib, tmp); + // need to update symbol link maybe + #define GO(A, W) if(!strcmp(rname, #A)) my->A = (W)getaddr(rname); + SUPER() + #undef GO + } + return resolveSymbol(emu, symbol, rname); +} + + #undef SUPER typedef struct my_VkAllocationCallbacks_s { |