Henri Verbeet : wined3d: Just store the wined3d format in color_key_info[] .

Alexandre Julliard julliard at wine.codeweavers.com
Thu Oct 2 16:29:22 CDT 2014


Module: wine
Branch: master
Commit: 5802f72adfad0ef5bebc139a3775bc35c4274bc7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5802f72adfad0ef5bebc139a3775bc35c4274bc7

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Oct  2 09:43:38 2014 +0200

wined3d: Just store the wined3d format in color_key_info[].

---

 dlls/wined3d/surface.c | 35 +++++++++++++++++------------------
 1 file changed, 17 insertions(+), 18 deletions(-)

diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index a4a11c1..cf057e2 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -1591,28 +1591,28 @@ static void d3dfmt_get_conv(const struct wined3d_texture *texture, BOOL need_alp
     BOOL colorkey_active = need_alpha_ck && (texture->color_key_flags & WINEDDSD_CKSRCBLT);
     const struct wined3d_device *device = texture->resource.device;
     const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
+    const struct wined3d_format *dst_format;
+    enum wined3d_format_id dst_format_id;
     unsigned int i;
 
     static const struct
     {
         enum wined3d_format_id src_format;
         enum wined3d_conversion_type conversion_type;
-        GLint gl_internal;
-        GLint gl_format;
-        GLint gl_type;
-        unsigned int conv_byte_count;
+        enum wined3d_format_id dst_format;
     }
     color_key_info[] =
     {
-        {WINED3DFMT_B5G6R5_UNORM,   WINED3D_CT_CK_B5G6R5,   GL_RGB5_A1, GL_BGRA,    GL_UNSIGNED_SHORT_1_5_5_5_REV,  2},
-        {WINED3DFMT_B5G5R5X1_UNORM, WINED3D_CT_CK_B5G5R5X1, GL_RGB5_A1, GL_BGRA,    GL_UNSIGNED_SHORT_1_5_5_5_REV,  2},
-        {WINED3DFMT_B8G8R8_UNORM,   WINED3D_CT_CK_B8G8R8,   GL_RGBA8,   GL_BGRA,    GL_UNSIGNED_INT_8_8_8_8_REV,    4},
-        {WINED3DFMT_B8G8R8X8_UNORM, WINED3D_CT_CK_B8G8R8X8, GL_RGBA8,   GL_BGRA,    GL_UNSIGNED_INT_8_8_8_8_REV,    4},
-        {WINED3DFMT_B8G8R8A8_UNORM, WINED3D_CT_CK_B8G8R8A8, GL_RGBA8,   GL_BGRA,    GL_UNSIGNED_INT_8_8_8_8_REV,    4},
+        {WINED3DFMT_B5G6R5_UNORM,   WINED3D_CT_CK_B5G6R5,   WINED3DFMT_B5G5R5A1_UNORM},
+        {WINED3DFMT_B5G5R5X1_UNORM, WINED3D_CT_CK_B5G5R5X1, WINED3DFMT_B5G5R5A1_UNORM},
+        {WINED3DFMT_B8G8R8_UNORM,   WINED3D_CT_CK_B8G8R8,   WINED3DFMT_B8G8R8A8_UNORM},
+        {WINED3DFMT_B8G8R8X8_UNORM, WINED3D_CT_CK_B8G8R8X8, WINED3DFMT_B8G8R8A8_UNORM},
+        {WINED3DFMT_B8G8R8A8_UNORM, WINED3D_CT_CK_B8G8R8A8, WINED3DFMT_B8G8R8A8_UNORM},
     };
 
     *format = *texture->resource.format;
     *conversion_type = WINED3D_CT_NONE;
+    dst_format_id = format->id;
 
     if (colorkey_active)
     {
@@ -1622,10 +1622,7 @@ static void d3dfmt_get_conv(const struct wined3d_texture *texture, BOOL need_alp
                 continue;
 
             *conversion_type = color_key_info[i].conversion_type;
-            format->glInternal = color_key_info[i].gl_internal;
-            format->glFormat = color_key_info[i].gl_format;
-            format->glType = color_key_info[i].gl_type;
-            format->conv_byte_count = color_key_info[i].conv_byte_count;
+            dst_format_id = color_key_info[i].dst_format;
             break;
         }
     }
@@ -1638,10 +1635,7 @@ static void d3dfmt_get_conv(const struct wined3d_texture *texture, BOOL need_alp
                 && texture == texture->swapchain->front_buffer)) || colorkey_active)
         {
             *conversion_type = WINED3D_CT_P8;
-            format->glInternal = GL_RGBA8;
-            format->glFormat = GL_BGRA;
-            format->glType = GL_UNSIGNED_INT_8_8_8_8_REV;
-            format->conv_byte_count = 4;
+            dst_format_id = WINED3DFMT_B8G8R8A8_UNORM;
         }
     }
     else if (texture->resource.format->id == WINED3DFMT_B2G3R3_UNORM && colorkey_active)
@@ -1653,8 +1647,13 @@ static void d3dfmt_get_conv(const struct wined3d_texture *texture, BOOL need_alp
 
     if (*conversion_type != WINED3D_CT_NONE)
     {
-        format->rtInternal = format->glInternal;
+        dst_format = wined3d_get_format(gl_info, dst_format_id);
+        format->glInternal = dst_format->glInternal;
         format->glGammaInternal = format->glInternal;
+        format->rtInternal = format->glInternal;
+        format->glFormat = dst_format->glFormat;
+        format->glType = dst_format->glType;
+        format->conv_byte_count = dst_format->byte_count;
     }
 }
 




More information about the wine-cvs mailing list