about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-09-10 10:24:24 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-09-10 10:24:24 +0200
commit7862e8a3d55e201d2410edc68f1abad6bc586cbd (patch)
treeaf8cf3f5eaea48fc510db7d880ec9cb2ecf0d22e
parent7acdd87198ac42e95f97fe943dafab9c73a22fc3 (diff)
downloadbox64-7862e8a3d55e201d2410edc68f1abad6bc586cbd.tar.gz
box64-7862e8a3d55e201d2410edc68f1abad6bc586cbd.zip
[BOX32][WRAPPING] Wrapped 2 more functions on libGL (for #2826)
-rw-r--r--src/wrapped32/generated/functions_list.txt4
-rw-r--r--src/wrapped32/generated/wrappedlibgltypes32.h4
-rw-r--r--src/wrapped32/generated/wrapper32.c4
-rw-r--r--src/wrapped32/generated/wrapper32.h2
-rw-r--r--src/wrapped32/wrappedlibgl.c40
-rw-r--r--src/wrapped32/wrappedlibgl_private.h4
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)