diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-09-10 10:24:24 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-09-10 10:24:24 +0200 |
| commit | 7862e8a3d55e201d2410edc68f1abad6bc586cbd (patch) | |
| tree | af8cf3f5eaea48fc510db7d880ec9cb2ecf0d22e | |
| parent | 7acdd87198ac42e95f97fe943dafab9c73a22fc3 (diff) | |
| download | box64-7862e8a3d55e201d2410edc68f1abad6bc586cbd.tar.gz box64-7862e8a3d55e201d2410edc68f1abad6bc586cbd.zip | |
[BOX32][WRAPPING] Wrapped 2 more functions on libGL (for #2826)
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibgltypes32.h | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.c | 4 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrapper32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibgl.c | 40 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibgl_private.h | 4 |
6 files changed, 55 insertions, 3 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt index 89f0c777..47c2df6f 100644 --- a/src/wrapped32/generated/functions_list.txt +++ b/src/wrapped32/generated/functions_list.txt @@ -1671,6 +1671,7 @@ #() vFXLiiiL -> vFXLiiiL #() vFXLiipi -> vFXLiipi #() vFXLpppi -> vFXLpppi +#() vFXpiiii -> vFXpiiii #() iEEiippi -> iEEiippi #() iEEiLLLL -> iEEiLLLL #() iEEipiup -> iEEipiup @@ -1798,6 +1799,7 @@ #() iFpbpu_bpu_bpu_bpu_bpu_ -> iFpBBBBB #() vFEuuippp -> vFEuuippp #() vFEupupip -> vFEupupip +#() vFEppupui -> vFEppupui #() vFiiiiiip -> vFiiiiiip #() vFiiiiuup -> vFiiiiuup #() vFiiuilil -> vFiiuilil @@ -2694,6 +2696,8 @@ wrappedlibgl: - glVertexArrayVertexBuffers - vFupupip: - glMultiDrawElementsBaseVertex +- vFppupui: + - glMultiModeDrawElementsIBM wrappedlibglu: - vFpup: - gluNurbsCallback diff --git a/src/wrapped32/generated/wrappedlibgltypes32.h b/src/wrapped32/generated/wrappedlibgltypes32.h index 114bcc46..f39e8295 100644 --- a/src/wrapped32/generated/wrappedlibgltypes32.h +++ b/src/wrapped32/generated/wrappedlibgltypes32.h @@ -30,6 +30,7 @@ typedef void (*vFuippp_t)(uint32_t, int32_t, void*, void*, void*); typedef void (*vFupupi_t)(uint32_t, void*, uint32_t, void*, int32_t); typedef void (*vFuuippp_t)(uint32_t, uint32_t, int32_t, void*, void*, void*); typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int32_t, void*); +typedef void (*vFppupui_t)(void*, void*, uint32_t, void*, uint32_t, int32_t); #define SUPER() ADDED_FUNCTIONS() \ GO(glXSwapIntervalMESA, iFi_t) \ @@ -66,6 +67,7 @@ typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int32_t, void*); GO(glMultiDrawElementsEXT, vFupupi_t) \ GO(glBindBuffersRange, vFuuippp_t) \ GO(glVertexArrayVertexBuffers, vFuuippp_t) \ - GO(glMultiDrawElementsBaseVertex, vFupupip_t) + GO(glMultiDrawElementsBaseVertex, vFupupip_t) \ + GO(glMultiModeDrawElementsIBM, vFppupui_t) #endif // __wrappedlibglTYPES32_H_ diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c index 12ab0e69..08e4e8a8 100644 --- a/src/wrapped32/generated/wrapper32.c +++ b/src/wrapped32/generated/wrapper32.c @@ -1765,6 +1765,7 @@ typedef void (*vFXLiiii_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int32_t) typedef void (*vFXLiiiL_t)(void*, uintptr_t, int32_t, int32_t, int32_t, uintptr_t); typedef void (*vFXLiipi_t)(void*, uintptr_t, int32_t, int32_t, void*, int32_t); typedef void (*vFXLpppi_t)(void*, uintptr_t, void*, void*, void*, int32_t); +typedef void (*vFXpiiii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iEEiippi_t)(x64emu_t*, int32_t, int32_t, void*, void*, int32_t); typedef int32_t (*iEEiLLLL_t)(x64emu_t*, int32_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); typedef int32_t (*iEEipiup_t)(x64emu_t*, int32_t, void*, int32_t, uint32_t, void*); @@ -1892,6 +1893,7 @@ typedef int32_t (*iFppbpu_bpu_bpu_bpu__t)(void*, void*, struct_pu_t*, struct_pu_ typedef int32_t (*iFpbpu_bpu_bpu_bpu_bpu__t)(void*, struct_pu_t*, struct_pu_t*, struct_pu_t*, struct_pu_t*, struct_pu_t*); typedef void (*vFEuuippp_t)(x64emu_t*, uint32_t, uint32_t, int32_t, void*, void*, void*); typedef void (*vFEupupip_t)(x64emu_t*, uint32_t, void*, uint32_t, void*, int32_t, void*); +typedef void (*vFEppupui_t)(x64emu_t*, void*, void*, uint32_t, void*, uint32_t, int32_t); typedef void (*vFiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef void (*vFiiiiuup_t)(int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, void*); typedef void (*vFiiuilil_t)(int32_t, int32_t, uint32_t, int32_t, intptr_t, int32_t, intptr_t); @@ -3926,6 +3928,7 @@ void vFXLiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiii_t fn = (vFXLiiii_t)fcn void vFXLiiiL_32(x64emu_t *emu, uintptr_t fcn) { vFXLiiiL_t fn = (vFXLiiiL_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ulong(from_ptri(ulong_t, R_ESP + 24))); } void vFXLiipi_32(x64emu_t *emu, uintptr_t fcn) { vFXLiipi_t fn = (vFXLiipi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } void vFXLpppi_32(x64emu_t *emu, uintptr_t fcn) { vFXLpppi_t fn = (vFXLpppi_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } +void vFXpiiii_32(x64emu_t *emu, uintptr_t fcn) { vFXpiiii_t fn = (vFXpiiii_t)fcn; fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } void iEEiippi_32(x64emu_t *emu, uintptr_t fcn) { iEEiippi_t fn = (iEEiippi_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20)); emu->libc_err = errno; } void iEEiLLLL_32(x64emu_t *emu, uintptr_t fcn) { iEEiLLLL_t fn = (iEEiLLLL_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ulong(from_ptri(ulong_t, R_ESP + 16)), from_ulong(from_ptri(ulong_t, R_ESP + 20))); emu->libc_err = errno; } void iEEipiup_32(x64emu_t *emu, uintptr_t fcn) { iEEipiup_t fn = (iEEipiup_t)fcn; errno = emu->libc_err; R_EAX = fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(uint32_t, R_ESP + 16), from_ptriv(R_ESP + 20)); emu->libc_err = errno; } @@ -4053,6 +4056,7 @@ void iFppbpu_bpu_bpu_bpu__32(x64emu_t *emu, uintptr_t fcn) { iFppbpu_bpu_bpu_bpu void iFpbpu_bpu_bpu_bpu_bpu__32(x64emu_t *emu, uintptr_t fcn) { iFpbpu_bpu_bpu_bpu_bpu__t fn = (iFpbpu_bpu_bpu_bpu_bpu__t)fcn; struct_pu_t arg_8={0}; if (*(ptr_t*)(from_ptr((R_ESP + 8)))) from_struct_pu(&arg_8, *(ptr_t*)(from_ptr((R_ESP + 8)))); struct_pu_t arg_12={0}; if (*(ptr_t*)(from_ptr((R_ESP + 12)))) from_struct_pu(&arg_12, *(ptr_t*)(from_ptr((R_ESP + 12)))); struct_pu_t arg_16={0}; if (*(ptr_t*)(from_ptr((R_ESP + 16)))) from_struct_pu(&arg_16, *(ptr_t*)(from_ptr((R_ESP + 16)))); struct_pu_t arg_20={0}; if (*(ptr_t*)(from_ptr((R_ESP + 20)))) from_struct_pu(&arg_20, *(ptr_t*)(from_ptr((R_ESP + 20)))); struct_pu_t arg_24={0}; if (*(ptr_t*)(from_ptr((R_ESP + 24)))) from_struct_pu(&arg_24, *(ptr_t*)(from_ptr((R_ESP + 24)))); R_EAX = fn(from_ptriv(R_ESP + 4), *(ptr_t*)(from_ptr((R_ESP + 8))) ? &arg_8 : NULL, *(ptr_t*)(from_ptr((R_ESP + 12))) ? &arg_12 : NULL, *(ptr_t*)(from_ptr((R_ESP + 16))) ? &arg_16 : NULL, *(ptr_t*)(from_ptr((R_ESP + 20))) ? &arg_20 : NULL, *(ptr_t*)(from_ptr((R_ESP + 24))) ? &arg_24 : NULL); if (*(ptr_t*)(from_ptr((R_ESP + 8)))) to_struct_pu(*(ptr_t*)(from_ptr((R_ESP + 8))), &arg_8); if (*(ptr_t*)(from_ptr((R_ESP + 12)))) to_struct_pu(*(ptr_t*)(from_ptr((R_ESP + 12))), &arg_12); if (*(ptr_t*)(from_ptr((R_ESP + 16)))) to_struct_pu(*(ptr_t*)(from_ptr((R_ESP + 16))), &arg_16); if (*(ptr_t*)(from_ptr((R_ESP + 20)))) to_struct_pu(*(ptr_t*)(from_ptr((R_ESP + 20))), &arg_20); if (*(ptr_t*)(from_ptr((R_ESP + 24)))) to_struct_pu(*(ptr_t*)(from_ptr((R_ESP + 24))), &arg_24); } void vFEuuippp_32(x64emu_t *emu, uintptr_t fcn) { vFEuuippp_t fn = (vFEuuippp_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptri(uint32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24)); } void vFEupupip_32(x64emu_t *emu, uintptr_t fcn) { vFEupupip_t fn = (vFEupupip_t)fcn; fn(emu, from_ptri(uint32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptriv(R_ESP + 24)); } +void vFEppupui_32(x64emu_t *emu, uintptr_t fcn) { vFEppupui_t fn = (vFEppupui_t)fcn; fn(emu, from_ptriv(R_ESP + 4), from_ptriv(R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptriv(R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24)); } void vFiiiiiip_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiiip_t fn = (vFiiiiiip_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } void vFiiiiuup_32(x64emu_t *emu, uintptr_t fcn) { vFiiiiuup_t fn = (vFiiiiuup_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24), from_ptriv(R_ESP + 28)); } void vFiiuilil_32(x64emu_t *emu, uintptr_t fcn) { vFiiuilil_t fn = (vFiiuilil_t)fcn; fn(from_ptri(int32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(uint32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_long(from_ptri(long_t, R_ESP + 20)), from_ptri(int32_t, R_ESP + 24), from_long(from_ptri(long_t, R_ESP + 28))); } diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h index b3a9233e..4d74b1d0 100644 --- a/src/wrapped32/generated/wrapper32.h +++ b/src/wrapped32/generated/wrapper32.h @@ -1712,6 +1712,7 @@ void vFXLiiii_32(x64emu_t *emu, uintptr_t fnc); void vFXLiiiL_32(x64emu_t *emu, uintptr_t fnc); void vFXLiipi_32(x64emu_t *emu, uintptr_t fnc); void vFXLpppi_32(x64emu_t *emu, uintptr_t fnc); +void vFXpiiii_32(x64emu_t *emu, uintptr_t fnc); void iEEiippi_32(x64emu_t *emu, uintptr_t fnc); void iEEiLLLL_32(x64emu_t *emu, uintptr_t fnc); void iEEipiup_32(x64emu_t *emu, uintptr_t fnc); @@ -1839,6 +1840,7 @@ void iFppbpu_bpu_bpu_bpu__32(x64emu_t *emu, uintptr_t fnc); void iFpbpu_bpu_bpu_bpu_bpu__32(x64emu_t *emu, uintptr_t fnc); void vFEuuippp_32(x64emu_t *emu, uintptr_t fnc); void vFEupupip_32(x64emu_t *emu, uintptr_t fnc); +void vFEppupui_32(x64emu_t *emu, uintptr_t fnc); void vFiiiiiip_32(x64emu_t *emu, uintptr_t fnc); void vFiiiiuup_32(x64emu_t *emu, uintptr_t fnc); void vFiiuilil_32(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped32/wrappedlibgl.c b/src/wrapped32/wrappedlibgl.c index 9cf2426f..c93f3f30 100644 --- a/src/wrapped32/wrappedlibgl.c +++ b/src/wrapped32/wrappedlibgl.c @@ -54,6 +54,7 @@ typedef void (*vFupupi_t)(uint32_t, void*, uint32_t, void*, int); typedef void (*vFuippp_t)(uint32_t, int, void*, void*, void*); typedef void (*vFuuippp_t)(uint32_t, uint32_t, int, void*, void*, void*); typedef void (*vFupupip_t)(uint32_t, void*, uint32_t, void*, int, void*); +typedef void (*vFppupui_t)(void*, void*, uint32_t, void*, uint32_t, int); typedef void (*debugProc_t)(int32_t, int32_t, uint32_t, int32_t, int32_t, void*, void*); typedef struct gl_wrappers_s { @@ -677,6 +678,36 @@ static void* find_glMultiDrawElementsEXT_Fct(void* fct) { return find_glMultiDrawElements_Fct(fct); } +// glMultiModeDrawElementsIBM ... +#define GO(A) \ +static vFppupui_t my32_glMultiModeDrawElementsIBM_fct_##A = NULL; \ +static void my32_glMultiModeDrawElementsIBM_##A(x64emu_t* emu, void* mode, void* count, uint32_t type, ptr_t* indices, uint32_t primcount, int modestride) \ +{ \ + if(!my32_glMultiModeDrawElementsIBM_fct_##A) \ + return; \ + void* indices_l[primcount]; \ + for(uint32_t i=0; i<primcount; ++i) \ + indices_l[i] = from_ptrv(indices[i]); \ + my32_glMultiModeDrawElementsIBM_fct_##A (mode, count, type, indices_l, primcount, modestride); \ +} +SUPER() +#undef GO +static void* find_glMultiModeDrawElementsIBM_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(my32_glMultiModeDrawElementsIBM_fct_##A == (vFppupui_t)fct) return my32_glMultiModeDrawElementsIBM_##A; + SUPER() + #undef GO + #define GO(A) if(my32_glMultiModeDrawElementsIBM_fct_##A == 0) {my32_glMultiModeDrawElementsIBM_fct_##A = (vFppupui_t)fct; return my32_glMultiModeDrawElementsIBM_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libGL glMultiModeDrawElementsIBM callback\n"); + return NULL; +} +static void* find_glMultiModeDrawElementsIBMEXT_Fct(void* fct) +{ + return find_glMultiModeDrawElementsIBM_Fct(fct); +} // glTransformFeedbackVaryings ... #define GO(A) \ static vFuipu_t my32_glTransformFeedbackVaryings_fct_##A = NULL; \ @@ -1091,6 +1122,14 @@ EXPORT void my32_glMultiDrawElementsExt(x64emu_t* emu, uint32_t mode, void* coun my32_glMultiDrawElements(emu, mode, count, type, indices, drawcount); } +EXPORT void my32_glMultiModeDrawElementsIBM(x64emu_t* emu, void* mode, void* count, uint32_t type, ptr_t* indices, uint32_t primcount, int modestride) +{ + void* indices_l[primcount]; + for(uint32_t i=0; i<primcount; ++i) + indices_l[i] = from_ptrv(indices[i]); + my->glMultiModeDrawElementsIBM(mode, count, type, indices_l, primcount, modestride); +} + EXPORT void my32_glTransformFeedbackVaryings(x64emu_t* emu, uint32_t prog, int count, ptr_t* varyings, uint32_t mode) { void* varyings_l[count]; @@ -1195,6 +1234,7 @@ EXPORT void my32_glGetUniformIndices(x64emu_t* emu, uint32_t prog, int count, pt GO(pFpppi_t, glXCreateContext) \ GO(pFpp_t, glXGetFBConfigFromVisualSGIX) \ GO(vFupupi_t, glMultiDrawElements) \ + GO(vFppupui_t, glMultiModeDrawElementsIBM) \ GO(vFuipu_t, glTransformFeedbackVaryings) \ GO(vFuuippp_t, glBindBuffersRange) \ GO(vFuippp_t, glBindVertexBuffers) \ diff --git a/src/wrapped32/wrappedlibgl_private.h b/src/wrapped32/wrappedlibgl_private.h index 8604a9e4..f55e745e 100644 --- a/src/wrapped32/wrappedlibgl_private.h +++ b/src/wrapped32/wrappedlibgl_private.h @@ -2133,7 +2133,7 @@ GO(glImageTransformParameteriHP, vFuui) GO(glImageTransformParameterivHP, vFuup) //IBM_multimode_draw_arrays GO(glMultiModeDrawArraysIBM, vFpppii) -//GO(glMultiModeDrawElementsIBM, vFppubp_ii) +GOM(glMultiModeDrawElementsIBM, vFEppupui) //IBM_static_data GO(glFlushStaticDataIBM, vFu) //IBM_vertex_array_lists @@ -2952,7 +2952,7 @@ GO(glXCreatePixmap, LFXpLp) GO(glXCreateWindow, LFXpLp) GOM(glXChooseVisual, pFEXip) GO(glXCopyImageSubDataNV, vFXpuiiiiipuiiiiiiii) -//GO(glXCopySubBufferMESA, vFppiiii) +GO(glXCopySubBufferMESA, vFXpiiii) GO(glXDestroyContext, vFXp) GO(glXDestroyGLXPbufferSGIX, vFXp) GO(glXDestroyGLXPixmap, vFXL) |