about summary refs log tree commit diff stats
path: root/src/libtools/sdl2align32.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-05 16:36:31 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-05 16:36:31 +0200
commit2a2f82a745ac389e143a2e187029a7ed919e8a39 (patch)
tree8f91f5657d43e09bfcf438d699f75bc8f2a34b16 /src/libtools/sdl2align32.c
parent13a7801421ea8159917594cec60194a6a2805bdb (diff)
downloadbox64-2a2f82a745ac389e143a2e187029a7ed919e8a39.tar.gz
box64-2a2f82a745ac389e143a2e187029a7ed919e8a39.zip
[BOX32] Added many more 32bits wrapped function (some using wrapperhelper)
Diffstat (limited to 'src/libtools/sdl2align32.c')
-rw-r--r--src/libtools/sdl2align32.c93
1 files changed, 50 insertions, 43 deletions
diff --git a/src/libtools/sdl2align32.c b/src/libtools/sdl2align32.c
index 3adfed3d..540d3cc5 100644
--- a/src/libtools/sdl2align32.c
+++ b/src/libtools/sdl2align32.c
@@ -423,32 +423,36 @@ void inplace_SDL2_Palette_to_32(void* a)
     dst->version = src->version;
     dst->refcount = src->refcount;
 }
-
+#define SDL2_PIXELFORMAT_SIGN 0xBADC0FEE
 void inplace_SDL2_PixelFormat_to_32(void* a)
 {
     while (a) {
         my_SDL2_PixelFormat_t* src = a;
         my_SDL2_PixelFormat_32_t* dst = a;
-        dst->format = src->format;
-        inplace_SDL2_Palette_to_32(src->palette);
-        dst->palette = to_ptrv(src->palette);
-        dst->BitsPerPixel = src->BitsPerPixel;
-        dst->BytesPerPixel = src->BytesPerPixel;
-        dst->Rmask = src->Rmask;
-        dst->Gmask = src->Gmask;
-        dst->Bmask = src->Bmask;
-        dst->Amask = src->Amask;
-        dst->Rloss = src->Rloss;
-        dst->Gloss = src->Gloss;
-        dst->Bloss = src->Bloss;
-        dst->Aloss = src->Aloss;
-        dst->Rshift = src->Rshift;
-        dst->Gshift = src->Gshift;
-        dst->Bshift = src->Bshift;
-        dst->Ashift = src->Ashift;
-        dst->refcount = src->refcount;
-        a = (void*)src->next;
-        dst->next = to_ptrv(src->next);
+        if(*(uint32_t*)(dst+1) != SDL2_PIXELFORMAT_SIGN) {
+            dst->format = src->format;
+            inplace_SDL2_Palette_to_32(src->palette);
+            dst->palette = to_ptrv(src->palette);
+            dst->BitsPerPixel = src->BitsPerPixel;
+            dst->BytesPerPixel = src->BytesPerPixel;
+            dst->Rmask = src->Rmask;
+            dst->Gmask = src->Gmask;
+            dst->Bmask = src->Bmask;
+            dst->Amask = src->Amask;
+            dst->Rloss = src->Rloss;
+            dst->Gloss = src->Gloss;
+            dst->Bloss = src->Bloss;
+            dst->Aloss = src->Aloss;
+            dst->Rshift = src->Rshift;
+            dst->Gshift = src->Gshift;
+            dst->Bshift = src->Bshift;
+            dst->Ashift = src->Ashift;
+            dst->refcount = src->refcount;
+            a = (void*)src->next;
+            dst->next = to_ptrv(src->next);
+            // put a signature to avoid muultiple unpack because of the next handling
+            *(uint32_t*)(dst+1) = SDL2_PIXELFORMAT_SIGN;
+        } else a = from_ptrv(dst->next);
     }
 }
 
@@ -492,28 +496,31 @@ void inplace_SDL2_PixelFormat_to_64(void* a)
     while (a) {
         my_SDL2_PixelFormat_32_t* src = a;
         my_SDL2_PixelFormat_t* dst = a;
-        uintptr_t p = (uintptr_t)(src->next);
-        a = (void*)p;
-        dst->next = from_ptrv(src->next);
-        dst->refcount = src->refcount;
-        dst->Ashift = src->Ashift;
-        dst->Bshift = src->Bshift;
-        dst->Gshift = src->Gshift;
-        dst->Rshift = src->Rshift;
-        dst->Aloss = src->Aloss;
-        dst->Bloss = src->Bloss;
-        dst->Gloss = src->Gloss;
-        dst->Rloss = src->Rloss;
-        dst->Amask = src->Amask;
-        dst->Bmask = src->Bmask;
-        dst->Gmask = src->Gmask;
-        dst->Rmask = src->Rmask;
-        dst->BytesPerPixel = src->BytesPerPixel;
-        dst->BitsPerPixel = src->BitsPerPixel;
-        p = (uintptr_t)(src->palette);
-        inplace_SDL2_Palette_to_64((void*)p);
-        dst->palette = from_ptrv(src->palette);
-        dst->format = src->format;
+        // check signatue
+        if(*(uint32_t*)(src+1) == SDL2_PIXELFORMAT_SIGN) {
+            uintptr_t p = (uintptr_t)(src->next);
+            a = (void*)p;
+            dst->next = from_ptrv(src->next);
+            dst->refcount = src->refcount;
+            dst->Ashift = src->Ashift;
+            dst->Bshift = src->Bshift;
+            dst->Gshift = src->Gshift;
+            dst->Rshift = src->Rshift;
+            dst->Aloss = src->Aloss;
+            dst->Bloss = src->Bloss;
+            dst->Gloss = src->Gloss;
+            dst->Rloss = src->Rloss;
+            dst->Amask = src->Amask;
+            dst->Bmask = src->Bmask;
+            dst->Gmask = src->Gmask;
+            dst->Rmask = src->Rmask;
+            dst->BytesPerPixel = src->BytesPerPixel;
+            dst->BitsPerPixel = src->BitsPerPixel;
+            p = (uintptr_t)(src->palette);
+            inplace_SDL2_Palette_to_64((void*)p);
+            dst->palette = from_ptrv(src->palette);
+            dst->format = src->format;
+        } else a = dst->next;   // already 64bits!
     }
 }