[PATCH 2/5] wined3d: Set display mode to a suitable adapter format.

Matteo Bruni mbruni at codeweavers.com
Thu Mar 14 10:30:12 CDT 2019


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46792
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
 dlls/wined3d/swapchain.c | 16 ++++++++++++++--
 dlls/wined3d/utils.c     |  1 -
 2 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index f7fc05f8ef3..724ea160c96 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -762,6 +762,16 @@ void swapchain_set_max_frame_latency(struct wined3d_swapchain *swapchain, const
     swapchain->max_frame_latency = device->max_frame_latency >= 2 ? device->max_frame_latency - 1 : 1;
 }
 
+static enum wined3d_format_id adapter_format_from_backbuffer_format(struct wined3d_swapchain *swapchain,
+        enum wined3d_format_id format_id)
+{
+    const struct wined3d_adapter *adapter = swapchain->device->adapter;
+    const struct wined3d_format *backbuffer_format;
+
+    backbuffer_format = wined3d_get_format(adapter, format_id, WINED3D_BIND_RENDER_TARGET);
+    return pixelformat_for_depth(backbuffer_format->byte_count * CHAR_BIT);
+}
+
 static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3d_device *device,
         struct wined3d_swapchain_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops)
 {
@@ -881,7 +891,8 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
             /* Change the display settings */
             swapchain->d3d_mode.width = desc->backbuffer_width;
             swapchain->d3d_mode.height = desc->backbuffer_height;
-            swapchain->d3d_mode.format_id = desc->backbuffer_format;
+            swapchain->d3d_mode.format_id = adapter_format_from_backbuffer_format(swapchain,
+                    desc->backbuffer_format);
             swapchain->d3d_mode.refresh_rate = desc->refresh_rate;
             swapchain->d3d_mode.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN;
 
@@ -1414,7 +1425,8 @@ HRESULT CDECL wined3d_swapchain_set_fullscreen(struct wined3d_swapchain *swapcha
                 actual_mode.width = swapchain_desc->backbuffer_width;
                 actual_mode.height = swapchain_desc->backbuffer_height;
                 actual_mode.refresh_rate = swapchain_desc->refresh_rate;
-                actual_mode.format_id = swapchain_desc->backbuffer_format;
+                actual_mode.format_id = adapter_format_from_backbuffer_format(swapchain,
+                        swapchain_desc->backbuffer_format);
                 actual_mode.scanline_ordering = WINED3D_SCANLINE_ORDERING_UNKNOWN;
             }
             else
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 469ce1bdacf..a800527e222 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -5672,7 +5672,6 @@ void wined3d_format_get_float_color_key(const struct wined3d_format *format,
     }
 }
 
-/* DirectDraw stuff */
 enum wined3d_format_id pixelformat_for_depth(DWORD depth)
 {
     switch (depth)
-- 
2.19.2




More information about the wine-devel mailing list