Henri Verbeet : wined3d: Add support for sRGB formats to wined3d_format_convert_from_float().

Alexandre Julliard julliard at winehq.org
Mon Aug 19 15:35:12 CDT 2019


Module: wine
Branch: master
Commit: 7ac8b0f9a705a3022c1ac93e912453c04ebe5ac3
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7ac8b0f9a705a3022c1ac93e912453c04ebe5ac3

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Aug 19 16:42:30 2019 +0430

wined3d: Add support for sRGB formats to wined3d_format_convert_from_float().

Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/wined3d/utils.c | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index cf7c177..e10d617 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -5750,14 +5750,27 @@ DWORD wined3d_format_convert_from_float(const struct wined3d_format *format, con
         {WINED3DFMT_X8D24_UNORM,       {  16777215.0, 0.0, 0.0, 0.0}, {0, 0, 0, 0}},
         {WINED3DFMT_D32_UNORM,         {4294967295.0, 0.0, 0.0, 0.0}, {0, 0, 0, 0}},
     };
+    enum wined3d_format_id format_id = format->id;
+    struct wined3d_color colour_srgb;
     unsigned int i;
     DWORD ret;
 
-    TRACE("Converting color %s to format %s.\n", debug_color(color), debug_d3dformat(format->id));
+    TRACE("Converting colour %s to format %s.\n", debug_color(color), debug_d3dformat(format_id));
+
+    for (i = 0; i < ARRAY_SIZE(format_srgb_info); ++i)
+    {
+        if (format_id != format_srgb_info[i].srgb_format_id)
+            continue;
+
+        wined3d_colour_srgb_from_linear(&colour_srgb, color);
+        format_id = format_srgb_info[i].base_format_id;
+        color = &colour_srgb;
+        break;
+    }
 
     for (i = 0; i < ARRAY_SIZE(float_conv); ++i)
     {
-        if (format->id != float_conv[i].format_id)
+        if (format_id != float_conv[i].format_id)
             continue;
 
         ret = ((DWORD)((color->r * float_conv[i].mul.x) + 0.5f)) << float_conv[i].shift.x;
@@ -5772,7 +5785,7 @@ DWORD wined3d_format_convert_from_float(const struct wined3d_format *format, con
 
     for (i = 0; i < ARRAY_SIZE(double_conv); ++i)
     {
-        if (format->id != double_conv[i].format_id)
+        if (format_id != double_conv[i].format_id)
             continue;
 
         ret = ((DWORD)((color->r * double_conv[i].mul.x) + 0.5)) << double_conv[i].shift.x;
@@ -5785,7 +5798,7 @@ DWORD wined3d_format_convert_from_float(const struct wined3d_format *format, con
         return ret;
     }
 
-    FIXME("Conversion for format %s not implemented.\n", debug_d3dformat(format->id));
+    FIXME("Conversion for format %s not implemented.\n", debug_d3dformat(format_id));
 
     return 0;
 }




More information about the wine-cvs mailing list