diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2025-04-12 14:31:54 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2025-04-12 14:31:54 +0200 |
| commit | 68f5512ee704da7dea035fee32a30f68bf6c17a3 (patch) | |
| tree | 470d9bb8638ce9c681c95da3edd161c5e04fb9fc | |
| parent | b3165e62aba5c1807d7b37096559cb57551e3859 (diff) | |
| download | box64-68f5512ee704da7dea035fee32a30f68bf6c17a3.tar.gz box64-68f5512ee704da7dea035fee32a30f68bf6c17a3.zip | |
[BOX32][WRAPPER] Fixed 32bits wrapping for XRenderQueryFilters function
| -rw-r--r-- | src/libtools/my_x11_conv.c | 32 | ||||
| -rw-r--r-- | src/libtools/my_x11_conv.h | 3 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs.h | 7 | ||||
| -rw-r--r-- | src/libtools/my_x11_defs_32.h | 7 | ||||
| -rw-r--r-- | src/wrapped32/generated/functions_list.txt | 2 | ||||
| -rw-r--r-- | src/wrapped32/generated/wrappedlibxrendertypes32.h | 2 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxrender.c | 7 | ||||
| -rw-r--r-- | src/wrapped32/wrappedlibxrender_private.h | 2 |
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) |