about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2025-04-12 14:31:54 +0200
committerptitSeb <sebastien.chev@gmail.com>2025-04-12 14:31:54 +0200
commit68f5512ee704da7dea035fee32a30f68bf6c17a3 (patch)
tree470d9bb8638ce9c681c95da3edd161c5e04fb9fc
parentb3165e62aba5c1807d7b37096559cb57551e3859 (diff)
downloadbox64-68f5512ee704da7dea035fee32a30f68bf6c17a3.tar.gz
box64-68f5512ee704da7dea035fee32a30f68bf6c17a3.zip
[BOX32][WRAPPER] Fixed 32bits wrapping for XRenderQueryFilters function
-rw-r--r--src/libtools/my_x11_conv.c32
-rw-r--r--src/libtools/my_x11_conv.h3
-rw-r--r--src/libtools/my_x11_defs.h7
-rw-r--r--src/libtools/my_x11_defs_32.h7
-rw-r--r--src/wrapped32/generated/functions_list.txt2
-rw-r--r--src/wrapped32/generated/wrappedlibxrendertypes32.h2
-rw-r--r--src/wrapped32/wrappedlibxrender.c7
-rw-r--r--src/wrapped32/wrappedlibxrender_private.h2
8 files changed, 61 insertions, 1 deletions
diff --git a/src/libtools/my_x11_conv.c b/src/libtools/my_x11_conv.c
index eb1dadbd..816f9b9b 100644
--- a/src/libtools/my_x11_conv.c
+++ b/src/libtools/my_x11_conv.c
@@ -1407,3 +1407,35 @@ void* inplace_XDeviceInfo_enlarge(void* a)
     }
     return a;
 }
+
+
+void* inplace_XFilters_shrink(void* a)
+{
+    if(a) {
+        my_XFilters_t* src = a;
+        my_XFilters_32_t* dst = a;
+        dst->nfilter = src->nfilter;
+        char** filter = src->filter;
+        dst->filter = to_ptrv(filter);
+        dst->nalias = src->nalias;
+        dst->alias = to_ptrv(src->alias);
+        for(int i=0; i<dst->nfilter; ++i)
+            ((ptr_t*)(filter))[i] = to_ptrv(filter[i]);
+    }
+    return a;
+}
+void* inplace_XFilters_enlarge(void* a)
+{
+    if(a) {
+        my_XFilters_t* dst = a;
+        my_XFilters_32_t* src = a;
+        dst->alias = from_ptrv(src->alias);
+        dst->nalias = src->nalias;
+        dst->filter = from_ptrv(src->filter);
+        dst->nfilter = src->nfilter;
+        char** filter = dst->filter;
+        for(int i=dst->nfilter-1; i>=0; --i)
+            filter[i] = from_ptrv(((ptr_t*)(filter))[i]);
+    }
+    return a;
+}
diff --git a/src/libtools/my_x11_conv.h b/src/libtools/my_x11_conv.h
index ed5b5523..01596f78 100644
--- a/src/libtools/my_x11_conv.h
+++ b/src/libtools/my_x11_conv.h
@@ -113,4 +113,7 @@ void* inplace_XAnyClassInfo_enlarge(void* a);
 void* inplace_XDeviceInfo_shrink(void* a, int n);
 void* inplace_XDeviceInfo_enlarge(void* a);
 
+void* inplace_XFilters_shrink(void* a);
+void* inplace_XFilters_enlarge(void* a);
+
 #endif//MY_X11_CONV
\ No newline at end of file
diff --git a/src/libtools/my_x11_defs.h b/src/libtools/my_x11_defs.h
index 0cf6081d..b2b64dad 100644
--- a/src/libtools/my_x11_defs.h
+++ b/src/libtools/my_x11_defs.h
@@ -1465,4 +1465,11 @@ typedef struct my_XFixesCursorImage_s {
     void*           name;                  /* Version >= 2 only */
 } my_XFixesCursorImage_t;
 
+typedef struct my_XFilters_s {
+    int nfilter;
+    char **filter;
+    int nalias;
+    short *alias;
+} my_XFilters_t;
+
 #endif//MY_X11_DEFS
\ No newline at end of file
diff --git a/src/libtools/my_x11_defs_32.h b/src/libtools/my_x11_defs_32.h
index 01144d1f..5d596485 100644
--- a/src/libtools/my_x11_defs_32.h
+++ b/src/libtools/my_x11_defs_32.h
@@ -1407,4 +1407,11 @@ typedef struct my_XFixesCursorImage_32_s {
     ptr_t           name;                  /* Version >= 2 only */
 } my_XFixesCursorImage_32_t;
 
+typedef struct my_XFilters_32_s {
+    int nfilter;
+    ptr_t filter;   //char **
+    int nalias;
+    ptr_t alias;    //short *
+} my_XFilters_32_t;
+
 #endif//MY_X11_DEFS_32
\ No newline at end of file
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index e75ccff8..cc1b5ec5 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -3035,6 +3035,8 @@ wrappedlibxrandr:
 wrappedlibxrender:
 - pFXi:
   - XRenderFindStandardFormat
+- pFXL:
+  - XRenderQueryFilters
 - pFXp:
   - XRenderFindVisualFormat
 - pFXLrLiiwwwwwwwwL_i:
diff --git a/src/wrapped32/generated/wrappedlibxrendertypes32.h b/src/wrapped32/generated/wrappedlibxrendertypes32.h
index 082f5479..48853e50 100644
--- a/src/wrapped32/generated/wrappedlibxrendertypes32.h
+++ b/src/wrapped32/generated/wrappedlibxrendertypes32.h
@@ -12,11 +12,13 @@
 #endif
 
 typedef void* (*pFXi_t)(void*, int32_t);
+typedef void* (*pFXL_t)(void*, uintptr_t);
 typedef void* (*pFXp_t)(void*, void*);
 typedef void* (*pFXLrLiiwwwwwwwwL_i_t)(void*, uintptr_t, struct_LiiwwwwwwwwL_t*, int32_t);
 
 #define SUPER() ADDED_FUNCTIONS() \
 	GO(XRenderFindStandardFormat, pFXi_t) \
+	GO(XRenderQueryFilters, pFXL_t) \
 	GO(XRenderFindVisualFormat, pFXp_t) \
 	GO(XRenderFindFormat, pFXLrLiiwwwwwwwwL_i_t)
 
diff --git a/src/wrapped32/wrappedlibxrender.c b/src/wrapped32/wrappedlibxrender.c
index 4580e27b..fbba0508 100644
--- a/src/wrapped32/wrappedlibxrender.c
+++ b/src/wrapped32/wrappedlibxrender.c
@@ -86,6 +86,13 @@ EXPORT void* my32_XRenderFindVisualFormat(x64emu_t* emu, void* dpy, void* visual
     kh_value(hash_picformat, k) = res;
     return res;
 }
+
+EXPORT void* my32_XRenderQueryFilters(x64emu_t* emu, void* dpy, unsigned long drawable)
+{
+    void* ret = my->XRenderQueryFilters(dpy, drawable);
+    return inplace_XFilters_shrink(ret);
+}
+
 #define CUSTOM_INIT                                     \
     hash_picformat = kh_init(picformat);                \
 
diff --git a/src/wrapped32/wrappedlibxrender_private.h b/src/wrapped32/wrappedlibxrender_private.h
index 9d0c573a..746386e3 100644
--- a/src/wrapped32/wrappedlibxrender_private.h
+++ b/src/wrapped32/wrappedlibxrender_private.h
@@ -42,7 +42,7 @@ GO(XRenderFreeGlyphSet, vFXL)
 GO(XRenderFreePicture, vFXL)
 GO(XRenderParseColor, iFXpp)
 GO(XRenderQueryExtension, iFXpp)
-GO(XRenderQueryFilters, pFXL)
+GOM(XRenderQueryFilters, pFEXL)
 GO(XRenderQueryFormats, iFX)
 GO(XRenderQueryPictIndexValues, pFXrLiiwwwwwwwwL_p)
 GO(XRenderQuerySubpixelOrder, iFXi)