Skip to content

Commit 90706e7

Browse files
committed
[BOX32][WRAPPER] Improved support for libGLX_nvidia.so and some small other libGL wrapping fixes
1 parent 3ac9592 commit 90706e7

15 files changed

+4754
-11
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,7 @@ if(BOX32)
858858
"${BOX64_ROOT}/src/wrapped32/wrappedcrashhandler.c"
859859
"${BOX64_ROOT}/src/wrapped32/wrappedlibgl.c"
860860
"${BOX64_ROOT}/src/wrapped32/wrappedlibglu.c"
861+
"${BOX64_ROOT}/src/wrapped32/wrappedlibglxnvidia.c"
861862
"${BOX64_ROOT}/src/wrapped32/wrappedsdl1.c"
862863
"${BOX64_ROOT}/src/wrapped32/wrappedsdl2.c"
863864
"${BOX64_ROOT}/src/wrapped32/wrappedsdl2image.c"

rebuild_wrappers_32.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -876,6 +876,7 @@ def add_symbol_name(symname: Optional[str], weak: bool = False, symsname: Dict[s
876876
or match("appindicator","appindicator3")\
877877
or match("libgl", "libegl") \
878878
or match("libgl", "libglx") \
879+
or match("libgl", "libglxnvidia")\
879880
\
880881
or match("libc", "tcmallocminimal") \
881882
or match("libc", "ldlinux") \

src/include/gltools.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ void freeGLProcWrapper(box64context_t* context);
1010
void* getGLProcAddress(x64emu_t* emu, const char* my, glprocaddress_t procaddr, const char* rname);
1111

1212
#ifdef BOX32
13-
void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname);
13+
void* getGLProcAddress32(x64emu_t* emu, const char* my, glprocaddress_t procaddr, const char* rname);
1414
#endif
1515

1616
#endif //__GL_TOOLS_H__

src/library_list_32.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ GO("ld-linux.so.2", ldlinux)
2727

2828
GO("libGL.so", libgl)
2929
GO("libGL.so.1", libgl)
30-
GO("libGLX_nvidia.so.0", libgl)
30+
GO("libGLX_nvidia.so.0", libglxnvidia)
3131
GO("libGLU.so.1", libglu)
3232
GO("libSDL-1.2.so.0", sdl1)
3333
GO("libSDL2-2.0.so.0", sdl2)

src/wrapped32/generated/functions_list.txt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2792,6 +2792,63 @@ wrappedlibglx:
27922792
- glXChooseFBConfig
27932793
- pFXppi:
27942794
- glXCreateContext
2795+
wrappedlibglxnvidia:
2796+
- iFi:
2797+
- glXSwapIntervalMESA
2798+
- pFp:
2799+
- glGetVkProcAddrNV
2800+
- glXGetProcAddress
2801+
- glXGetProcAddressARB
2802+
- vFip:
2803+
- glVDPAUMapSurfacesNV
2804+
- glVDPAUUnmapSurfacesNV
2805+
- vFpp:
2806+
- glDebugMessageCallback
2807+
- glDebugMessageCallbackAMD
2808+
- glDebugMessageCallbackARB
2809+
- glDebugMessageCallbackKHR
2810+
- iFpp:
2811+
- eglDebugMessageControlKHR
2812+
- pFXp:
2813+
- glXGetFBConfigFromVisualSGIX
2814+
- glXGetVisualFromFBConfig
2815+
- glXGetVisualFromFBConfigSGIX
2816+
- vFipp:
2817+
- glProgramCallbackMESA
2818+
- vFppp:
2819+
- eglSetBlobCacheFuncsANDROID
2820+
- vFXpi:
2821+
- glXSwapIntervalEXT
2822+
- uFuip:
2823+
- glCreateShaderProgramv
2824+
- pFXip:
2825+
- glXChooseVisual
2826+
- glXGetFBConfigs
2827+
- vFuipu:
2828+
- glTransformFeedbackVaryings
2829+
- glTransformFeedbackVaryingsEXT
2830+
- vFuipp:
2831+
- glCompileShaderIncludeARB
2832+
- glGetUniformIndices
2833+
- glShaderSource
2834+
- glShaderSourceARB
2835+
- pFXipp:
2836+
- glXChooseFBConfig
2837+
- glXChooseFBConfigSGIX
2838+
- pFXppi:
2839+
- glXCreateContext
2840+
- vFuippp:
2841+
- glBindVertexBuffers
2842+
- vFupupi:
2843+
- glMultiDrawElements
2844+
- glMultiDrawElementsEXT
2845+
- vFuuippp:
2846+
- glBindBuffersRange
2847+
- glVertexArrayVertexBuffers
2848+
- vFupupip:
2849+
- glMultiDrawElementsBaseVertex
2850+
- vFppupui:
2851+
- glMultiModeDrawElementsIBM
27952852
wrappedlibm:
27962853
- UEs:
27972854
- cacosf
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*********************************************************************
2+
* File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
3+
*********************************************************************/
4+
#ifndef __wrappedlibglxnvidiaDEFS32_H_
5+
#define __wrappedlibglxnvidiaDEFS32_H_
6+
7+
8+
#endif // __wrappedlibglxnvidiaDEFS32_H_
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*********************************************************************
2+
* File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
3+
*********************************************************************/
4+
#ifndef __wrappedlibglxnvidiaTYPES32_H_
5+
#define __wrappedlibglxnvidiaTYPES32_H_
6+
7+
#ifndef LIBNAME
8+
#error You should only #include this file inside a wrapped*.c file
9+
#endif
10+
#ifndef ADDED_FUNCTIONS
11+
#define ADDED_FUNCTIONS()
12+
#endif
13+
14+
typedef int32_t (*iFi_t)(int32_t);
15+
typedef void* (*pFp_t)(void*);
16+
typedef void (*vFip_t)(int32_t, void*);
17+
typedef void (*vFpp_t)(void*, void*);
18+
typedef int32_t (*iFpp_t)(void*, void*);
19+
typedef void* (*pFXp_t)(void*, void*);
20+
typedef void (*vFipp_t)(int32_t, void*, void*);
21+
typedef void (*vFppp_t)(void*, void*, void*);
22+
typedef void (*vFXpi_t)(void*, void*, int32_t);
23+
typedef uint32_t (*uFuip_t)(uint32_t, int32_t, void*);
24+
typedef void* (*pFXip_t)(void*, int32_t, void*);
25+
typedef void (*vFuipu_t)(uint32_t, int32_t, void*, uint32_t);
26+
typedef void (*vFuipp_t)(uint32_t, int32_t, void*, void*);
27+
typedef void* (*pFXipp_t)(void*, int32_t, void*, void*);
28+
typedef void* (*pFXppi_t)(void*, void*, void*, int32_t);
29+
typedef void (*vFuippp_t)(uint32_t, int32_t, void*, void*, void*);
30+
typedef void (*vFupupi_t)(uint32_t, void*, uint32_t, void*, int32_t);
31+
typedef void (*vFuuippp_t)(uint32_t, uint32_t, int32_t, void*, void*, void*);
32+
typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int32_t, void*);
33+
typedef void (*vFppupui_t)(void*, void*, uint32_t, void*, uint32_t, int32_t);
34+
35+
#define SUPER() ADDED_FUNCTIONS() \
36+
GO(glXSwapIntervalMESA, iFi_t) \
37+
GO(glGetVkProcAddrNV, pFp_t) \
38+
GO(glXGetProcAddress, pFp_t) \
39+
GO(glXGetProcAddressARB, pFp_t) \
40+
GO(glVDPAUMapSurfacesNV, vFip_t) \
41+
GO(glVDPAUUnmapSurfacesNV, vFip_t) \
42+
GO(glDebugMessageCallback, vFpp_t) \
43+
GO(glDebugMessageCallbackAMD, vFpp_t) \
44+
GO(glDebugMessageCallbackARB, vFpp_t) \
45+
GO(glDebugMessageCallbackKHR, vFpp_t) \
46+
GO(eglDebugMessageControlKHR, iFpp_t) \
47+
GO(glXGetFBConfigFromVisualSGIX, pFXp_t) \
48+
GO(glXGetVisualFromFBConfig, pFXp_t) \
49+
GO(glXGetVisualFromFBConfigSGIX, pFXp_t) \
50+
GO(glProgramCallbackMESA, vFipp_t) \
51+
GO(eglSetBlobCacheFuncsANDROID, vFppp_t) \
52+
GO(glXSwapIntervalEXT, vFXpi_t) \
53+
GO(glCreateShaderProgramv, uFuip_t) \
54+
GO(glXChooseVisual, pFXip_t) \
55+
GO(glXGetFBConfigs, pFXip_t) \
56+
GO(glTransformFeedbackVaryings, vFuipu_t) \
57+
GO(glTransformFeedbackVaryingsEXT, vFuipu_t) \
58+
GO(glCompileShaderIncludeARB, vFuipp_t) \
59+
GO(glGetUniformIndices, vFuipp_t) \
60+
GO(glShaderSource, vFuipp_t) \
61+
GO(glShaderSourceARB, vFuipp_t) \
62+
GO(glXChooseFBConfig, pFXipp_t) \
63+
GO(glXChooseFBConfigSGIX, pFXipp_t) \
64+
GO(glXCreateContext, pFXppi_t) \
65+
GO(glBindVertexBuffers, vFuippp_t) \
66+
GO(glMultiDrawElements, vFupupi_t) \
67+
GO(glMultiDrawElementsEXT, vFupupi_t) \
68+
GO(glBindBuffersRange, vFuuippp_t) \
69+
GO(glVertexArrayVertexBuffers, vFuuippp_t) \
70+
GO(glMultiDrawElementsBaseVertex, vFupupip_t) \
71+
GO(glMultiModeDrawElementsIBM, vFppupui_t)
72+
73+
#endif // __wrappedlibglxnvidiaTYPES32_H_
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*********************************************************************
2+
* File automatically generated by rebuild_wrappers_32.py (v0.0.2.2) *
3+
*********************************************************************/
4+
#ifndef __wrappedlibglxnvidiaUNDEFS32_H_
5+
#define __wrappedlibglxnvidiaUNDEFS32_H_
6+
7+
8+
#endif // __wrappedlibglxnvidiaUNDEFS32_H_

src/wrapped32/wrappedlibegl.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,11 @@ static const char* libeglName = "libEGL.so.1";
2424

2525
#include "wrappercallback32.h"
2626

27-
void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname);
2827
EXPORT void* my32_eglGetProcAddress(x64emu_t* emu, void* name)
2928
{
3029
khint_t k;
3130
const char* rname = (const char*)name;
32-
return getGLProcAddress32(emu, (glprocaddress_t)my->eglGetProcAddress, rname);
31+
return getGLProcAddress32(emu, NULL, (glprocaddress_t)my->eglGetProcAddress, rname);
3332
}
3433

3534
#include "wrappedlib_init32.h"

src/wrapped32/wrappedlibgl.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,13 @@ extern const char* libglName;
2828
void* getDisplay(void* d); // define in 32bits wrappedx11.c
2929

3030
// FIXME: old wrapped* type of file, cannot use generated/wrappedlibgltypes.h
31-
void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname);
3231
EXPORT void* my32_glXGetProcAddress(x64emu_t* emu, void* name)
3332
{
3433
pFp_t fnc = getBridgeFnc2((void*)R_RIP);
3534
if(!fnc) fnc=my->glXGetProcAddress;
3635
khint_t k;
3736
const char* rname = (const char*)name;
38-
return getGLProcAddress32(emu, (void*)fnc, rname);
37+
return getGLProcAddress32(emu, NULL, (void*)fnc, rname);
3938
}
4039
EXPORT void* my32_glXGetProcAddressARB(x64emu_t* emu, void* name) __attribute__((alias("my32_glXGetProcAddress")));
4140

@@ -541,8 +540,9 @@ gl_wrappers_t* getGLProcWrapper32(box64context_t* context, glprocaddress_t proca
541540
return wrappers;
542541
}
543542

544-
void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rname)
543+
void* getGLProcAddress32(x64emu_t* emu, const char* my, glprocaddress_t procaddr, const char* rname)
545544
{
545+
if(!my) my = "my32_";
546546
khint_t k;
547547
printf_dlsym(LOG_DEBUG, "Calling getGLProcAddress32[%p](\"%s\") => ", procaddr, rname);
548548
gl_wrappers_t* wrappers = getGLProcWrapper32(emu->context, procaddr);
@@ -555,7 +555,7 @@ void* getGLProcAddress32(x64emu_t* emu, glprocaddress_t procaddr, const char* rn
555555
if(is_my) {
556556
// try again, by using custom "my_" now...
557557
char tmp[200];
558-
strcpy(tmp, "my_");
558+
strcpy(tmp, my);
559559
strcat(tmp, rname);
560560
fnc = symbol;
561561
symbol = dlsym(emu->context->box64lib, tmp);

0 commit comments

Comments
 (0)