[PATCH 5/5] dxgi/tests: Windows 10 properly makes buffers read only.

Stefan Dösinger stefan at codeweavers.com
Tue Nov 24 15:18:46 CST 2015


Signed-off-by: Stefan Dösinger <stefan at codeweavers.com>
---
 dlls/dxgi/tests/device.c | 22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

diff --git a/dlls/dxgi/tests/device.c b/dlls/dxgi/tests/device.c
index 162e54d..0bc6261 100644
--- a/dlls/dxgi/tests/device.c
+++ b/dlls/dxgi/tests/device.c
@@ -1051,7 +1051,7 @@ static void test_swapchain_parameters(void)
     HRESULT hr;
     unsigned int i, j;
     ULONG refcount;
-    DXGI_USAGE usage, expected_usage;
+    DXGI_USAGE usage, expected_usage, broken_usage;
     HWND window;
     static const struct
     {
@@ -1191,13 +1191,14 @@ static void test_swapchain_parameters(void)
             hr = IDXGISwapChain_GetBuffer(swapchain, j, &IID_IDXGIResource, (void **)&resource);
             ok(SUCCEEDED(hr), "GetBuffer(%u) failed, hr %#x, test %u.\n", hr, i, j);
 
-            expected_usage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER;
-
             /* Buffers > 0 are supposed to be read only. This is the case except that in
-             * fullscreen mode the last backbuffer (BufferCount - 1) is writeable. This
-             * is not the case if an unsupported refresh rate is passed for some reason,
-             * probably because the invalid refresh rate triggers a kinda-sorta windowed
-             * mode.
+             * fullscreen mode on Windows <= 8 the last backbuffer (BufferCount - 1) is
+             * writeable. This is not the case if an unsupported refresh rate is passed
+             * for some reason, probably because the invalid refresh rate triggers a
+             * kinda-sorta windowed mode.
+             *
+             * On Windows 10 all buffers > 0 are read-only. Mark the earlier behavior
+             * broken.
              *
              * This last buffer acts as a shadow frontbuffer. Writing to it doesn't show
              * the draw on the screen right away (Aero on or off doesn't matter), but
@@ -1206,12 +1207,15 @@ static void test_swapchain_parameters(void)
              * Note that if the application doesn't have focused creating a fullscreen
              * swapchain returns DXGI_STATUS_OCCLUDED and we get a windowed swapchain,
              * so use the Windowed property of the swapchain that was actually created. */
+            expected_usage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER | DXGI_USAGE_READ_ONLY;
+            broken_usage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_BACK_BUFFER;
+
             if (desc.Windowed || j < tests[i].highest_accessible_buffer)
-                expected_usage |= DXGI_USAGE_READ_ONLY;
+                broken_usage |= DXGI_USAGE_READ_ONLY;
 
             hr = IDXGIResource_GetUsage(resource, &usage);
             ok(SUCCEEDED(hr), "Failed to get resource usage, hr %#x, test %u, buffer %u.\n", hr, i, j);
-            ok(usage == expected_usage, "Got usage %x, expected %x, test %u, buffer %u.\n",
+            ok(usage == expected_usage || broken(usage == broken_usage), "Got usage %x, expected %x, test %u, buffer %u.\n",
                     usage, expected_usage, i, j);
 
             IDXGIResource_Release(resource);
-- 
2.4.10




More information about the wine-patches mailing list