[PATCH 4/6] d3d11/tests: Add test for clearing 3D render target views.

Józef Kucia jkucia at codeweavers.com
Mon May 28 04:33:17 CDT 2018


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/d3d11/tests/d3d11.c | 315 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 223 insertions(+), 92 deletions(-)

diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index f6f4fe3a558d..aa48365aa88e 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -671,11 +671,11 @@ struct resource_readback
     ID3D11Resource *resource;
     D3D11_MAPPED_SUBRESOURCE map_desc;
     ID3D11DeviceContext *immediate_context;
-    unsigned int width, height, sub_resource_idx;
+    unsigned int width, height, depth, sub_resource_idx;
 };
 
 static void init_resource_readback(ID3D11Resource *resource, ID3D11Resource *readback_resource,
-        unsigned int width, unsigned int height, unsigned int sub_resource_idx,
+        unsigned int width, unsigned int height, unsigned int depth, unsigned int sub_resource_idx,
         ID3D11Device *device, struct resource_readback *rb)
 {
     HRESULT hr;
@@ -683,6 +683,7 @@ static void init_resource_readback(ID3D11Resource *resource, ID3D11Resource *rea
     rb->resource = readback_resource;
     rb->width = width;
     rb->height = height;
+    rb->depth = depth;
     rb->sub_resource_idx = sub_resource_idx;
 
     ID3D11Device_GetImmediateContext(device, &rb->immediate_context);
@@ -724,7 +725,7 @@ static void get_buffer_readback(ID3D11Buffer *buffer, struct resource_readback *
     }
 
     init_resource_readback((ID3D11Resource *)buffer, rb_buffer,
-            buffer_desc.ByteWidth, 1, 0, device, rb);
+            buffer_desc.ByteWidth, 1, 1, 0, device, rb);
 
     ID3D11Device_Release(device);
 }
@@ -756,7 +757,7 @@ static void get_texture1d_readback(ID3D11Texture1D *texture, unsigned int sub_re
 
     miplevel = sub_resource_idx % texture_desc.MipLevels;
     init_resource_readback((ID3D11Resource *)texture, rb_texture,
-            max(1, texture_desc.Width >> miplevel), 1, sub_resource_idx, device, rb);
+            max(1, texture_desc.Width >> miplevel), 1, 1, sub_resource_idx, device, rb);
 
     ID3D11Device_Release(device);
 }
@@ -790,34 +791,70 @@ static void get_texture_readback(ID3D11Texture2D *texture, unsigned int sub_reso
     init_resource_readback((ID3D11Resource *)texture, rb_texture,
             max(1, texture_desc.Width >> miplevel),
             max(1, texture_desc.Height >> miplevel),
+            1, sub_resource_idx, device, rb);
+
+    ID3D11Device_Release(device);
+}
+
+static void get_texture3d_readback(ID3D11Texture3D *texture, unsigned int sub_resource_idx,
+        struct resource_readback *rb)
+{
+    D3D11_TEXTURE3D_DESC texture_desc;
+    ID3D11Resource *rb_texture;
+    unsigned int miplevel;
+    ID3D11Device *device;
+    HRESULT hr;
+
+    memset(rb, 0, sizeof(*rb));
+
+    ID3D11Texture3D_GetDevice(texture, &device);
+
+    ID3D11Texture3D_GetDesc(texture, &texture_desc);
+    texture_desc.Usage = D3D11_USAGE_STAGING;
+    texture_desc.BindFlags = 0;
+    texture_desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
+    texture_desc.MiscFlags = 0;
+    if (FAILED(hr = ID3D11Device_CreateTexture3D(device, &texture_desc, NULL, (ID3D11Texture3D **)&rb_texture)))
+    {
+        trace("Failed to create texture, hr %#x.\n", hr);
+        ID3D11Device_Release(device);
+        return;
+    }
+
+    miplevel = sub_resource_idx % texture_desc.MipLevels;
+    init_resource_readback((ID3D11Resource *)texture, rb_texture,
+            max(1, texture_desc.Width >> miplevel),
+            max(1, texture_desc.Height >> miplevel),
+            max(1, texture_desc.Depth >> miplevel),
             sub_resource_idx, device, rb);
 
     ID3D11Device_Release(device);
 }
 
-static void *get_readback_data(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned byte_width)
+static void *get_readback_data(struct resource_readback *rb,
+        unsigned int x, unsigned int y, unsigned int z, unsigned byte_width)
 {
-    return (BYTE *)rb->map_desc.pData + y * rb->map_desc.RowPitch + x * byte_width;
+    return (BYTE *)rb->map_desc.pData + z * rb->map_desc.DepthPitch + y * rb->map_desc.RowPitch + x * byte_width;
 }
 
-static DWORD get_readback_color(struct resource_readback *rb, unsigned int x, unsigned int y)
+static DWORD get_readback_color(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned int z)
 {
-    return *(DWORD *)get_readback_data(rb, x, y, sizeof(DWORD));
+    return *(DWORD *)get_readback_data(rb, x, y, z, sizeof(DWORD));
 }
 
 static float get_readback_float(struct resource_readback *rb, unsigned int x, unsigned int y)
 {
-    return *(float *)get_readback_data(rb, x, y, sizeof(float));
+    return *(float *)get_readback_data(rb, x, y, 0, sizeof(float));
 }
 
 static const struct vec4 *get_readback_vec4(struct resource_readback *rb, unsigned int x, unsigned int y)
 {
-    return get_readback_data(rb, x, y, sizeof(struct vec4));
+    return get_readback_data(rb, x, y, 0, sizeof(struct vec4));
 }
 
 static const struct uvec4 *get_readback_uvec4(struct resource_readback *rb, unsigned int x, unsigned int y)
 {
-    return get_readback_data(rb, x, y, sizeof(struct uvec4));
+    return get_readback_data(rb, x, y, 0, sizeof(struct uvec4));
 }
 
 static void release_resource_readback(struct resource_readback *rb)
@@ -833,7 +870,7 @@ static DWORD get_texture_color(ID3D11Texture2D *texture, unsigned int x, unsigne
     DWORD color;
 
     get_texture_readback(texture, 0, &rb);
-    color = get_readback_color(&rb, x, y);
+    color = get_readback_color(&rb, x, y, 0);
     release_resource_readback(&rb);
 
     return color;
@@ -843,7 +880,7 @@ static DWORD get_texture_color(ID3D11Texture2D *texture, unsigned int x, unsigne
 static void check_readback_data_color_(unsigned int line, struct resource_readback *rb,
         const RECT *rect, DWORD expected_color, BYTE max_diff)
 {
-    unsigned int x = 0, y = 0;
+    unsigned int x = 0, y = 0, z = 0;
     BOOL all_match = TRUE;
     RECT default_rect;
     DWORD color = 0;
@@ -854,23 +891,28 @@ static void check_readback_data_color_(unsigned int line, struct resource_readba
         rect = &default_rect;
     }
 
-    for (y = rect->top; y < rect->bottom; ++y)
+    for (z = 0; z < rb->depth; ++z)
     {
-        for (x = rect->left; x < rect->right; ++x)
+        for (y = rect->top; y < rect->bottom; ++y)
         {
-            color = get_readback_color(rb, x, y);
-            if (!compare_color(color, expected_color, max_diff))
+            for (x = rect->left; x < rect->right; ++x)
             {
-                all_match = FALSE;
-                break;
+                color = get_readback_color(rb, x, y, z);
+                if (!compare_color(color, expected_color, max_diff))
+                {
+                    all_match = FALSE;
+                    break;
+                }
             }
+            if (!all_match)
+                break;
         }
         if (!all_match)
             break;
     }
     ok_(__FILE__, line)(all_match,
-            "Got 0x%08x, expected 0x%08x at (%u, %u), sub-resource %u.\n",
-            color, expected_color, x, y, rb->sub_resource_idx);
+            "Got 0x%08x, expected 0x%08x at (%u, %u, %u), sub-resource %u.\n",
+            color, expected_color, x, y, z, rb->sub_resource_idx);
 }
 
 #define check_texture_sub_resource_color(a, b, c, d, e) check_texture_sub_resource_color_(__LINE__, a, b, c, d, e)
@@ -921,6 +963,30 @@ static void check_texture1d_color_(unsigned int line, ID3D11Texture1D *texture,
         check_texture1d_sub_resource_color_(line, texture, sub_resource_idx, NULL, expected_color, max_diff);
 }
 
+#define check_texture3d_sub_resource_color(a, b, c, d, e) check_texture3d_sub_resource_color_(__LINE__, a, b, c, d, e)
+static void check_texture3d_sub_resource_color_(unsigned int line, ID3D11Texture3D *texture,
+        unsigned int sub_resource_idx, const RECT *rect, DWORD expected_color, BYTE max_diff)
+{
+    struct resource_readback rb;
+
+    get_texture3d_readback(texture, sub_resource_idx, &rb);
+    check_readback_data_color_(line, &rb, rect, expected_color, max_diff);
+    release_resource_readback(&rb);
+}
+
+#define check_texture3d_color(t, c, d) check_texture3d_color_(__LINE__, t, c, d)
+static void check_texture3d_color_(unsigned int line, ID3D11Texture3D *texture,
+        DWORD expected_color, BYTE max_diff)
+{
+    unsigned int sub_resource_idx, sub_resource_count;
+    D3D11_TEXTURE3D_DESC texture_desc;
+
+    ID3D11Texture3D_GetDesc(texture, &texture_desc);
+    sub_resource_count = texture_desc.MipLevels;
+    for (sub_resource_idx = 0; sub_resource_idx < sub_resource_count; ++sub_resource_idx)
+        check_texture3d_sub_resource_color_(line, texture, sub_resource_idx, NULL, expected_color, max_diff);
+}
+
 #define check_texture_sub_resource_float(a, b, c, d, e) check_texture_sub_resource_float_(__LINE__, a, b, c, d, e)
 static void check_texture_sub_resource_float_(unsigned int line, ID3D11Texture2D *texture,
         unsigned int sub_resource_idx, const RECT *rect, float expected_value, BYTE max_diff)
@@ -6657,7 +6723,7 @@ static void test_texture1d(void)
         get_texture_readback(test_context.backbuffer, 0, &rb);
         for (x = 0; x < 4; ++x)
         {
-            color = get_readback_color(&rb, 80 + x * 160, 0);
+            color = get_readback_color(&rb, 80 + x * 160, 0, 0);
             ok(compare_color(color, test->expected_colors[x], 2),
                     "Test %u: Got unexpected color 0x%08x at (%u).\n", i, color, x);
         }
@@ -6745,7 +6811,7 @@ static void test_texture1d(void)
         get_texture_readback(test_context.backbuffer, 0, &rb);
         for (x = 0; x < 4; ++x)
         {
-            color = get_readback_color(&rb, 80 + x * 160, 0);
+            color = get_readback_color(&rb, 80 + x * 160, 0, 0);
             ok(compare_color(color, test->expected_colors[x], 1),
                     "Test %u: Got unexpected color 0x%08x at (%u).\n", i, color, x);
         }
@@ -7615,7 +7681,7 @@ static void test_texture(void)
         {
             for (x = 0; x < 4; ++x)
             {
-                color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+                color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
                 ok(compare_color(color, test->expected_colors[y * 4 + x], 2),
                         "Test %u: Got unexpected color 0x%08x at (%u, %u).\n", i, color, x, y);
             }
@@ -7707,7 +7773,7 @@ static void test_texture(void)
         {
             for (x = 0; x < 4; ++x)
             {
-                color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+                color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
                 ok(compare_color(color, test->expected_colors[y * 4 + x], 1),
                         "Test %u: Got unexpected color 0x%08x at (%u, %u).\n", i, color, x, y);
             }
@@ -11405,7 +11471,7 @@ static void test_update_subresource(void)
     {
         for (j = 0; j < 4; ++j)
         {
-            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
             ok(compare_color(color, expected_colors[j + i * 4], 1),
                     "Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
                     color, j, i, expected_colors[j + i * 4]);
@@ -11421,7 +11487,7 @@ static void test_update_subresource(void)
     {
         for (j = 0; j < 4; ++j)
         {
-            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
             ok(compare_color(color, bitmap_data[j + i * 4], 1),
                     "Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
                     color, j, i, bitmap_data[j + i * 4]);
@@ -11612,7 +11678,7 @@ static void test_copy_subresource_region(void)
     {
         for (j = 0; j < 4; ++j)
         {
-            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
             ok(compare_color(color, expected_colors[j + i * 4], 1),
                     "Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
                     color, j, i, expected_colors[j + i * 4]);
@@ -11628,7 +11694,7 @@ static void test_copy_subresource_region(void)
     {
         for (j = 0; j < 4; ++j)
         {
-            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
             ok(compare_color(color, bitmap_data[j + i * 4], 1),
                     "Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
                     color, j, i, bitmap_data[j + i * 4]);
@@ -11660,7 +11726,7 @@ static void test_copy_subresource_region(void)
         {
             for (j = 0; j < 4; ++j)
             {
-                color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+                color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
                 ok(compare_color(color, bitmap_data[j + i * 4], 1),
                         "Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
                         color, j, i, bitmap_data[j + i * 4]);
@@ -11735,7 +11801,7 @@ static void test_copy_subresource_region(void)
     {
         for (j = 0; j < 4; ++j)
         {
-            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+            color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
             ok(compare_color(color, bitmap_data[j + i * 4], 1),
                     "Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
                     color, j, i, bitmap_data[j + i * 4]);
@@ -12707,7 +12773,7 @@ static void test_clear_render_target_view_1d(void)
     texture_desc.CPUAccessFlags = 0;
     texture_desc.MiscFlags = 0;
     hr = ID3D11Device_CreateTexture1D(device, &texture_desc, NULL, &texture);
-    ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
 
     hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, NULL, &rtv);
     ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
@@ -12758,11 +12824,11 @@ static void test_clear_render_target_view_2d(void)
     texture_desc.CPUAccessFlags = 0;
     texture_desc.MiscFlags = 0;
     hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &texture);
-    ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
 
     texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
     hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &srgb_texture);
-    ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
 
     hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, NULL, &rtv);
     ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
@@ -12789,7 +12855,7 @@ static void test_clear_render_target_view_2d(void)
 
     texture_desc.Format = DXGI_FORMAT_R8G8B8A8_TYPELESS;
     hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &texture);
-    ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
 
     rtv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
     rtv_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
@@ -12813,7 +12879,7 @@ static void test_clear_render_target_view_2d(void)
         for (j = 0; j < 4; ++j)
         {
             BOOL broken_device = is_warp_device(device) || is_nvidia_device(device);
-            DWORD color = get_readback_color(&rb, 80 + i * 160, 60 + j * 120);
+            DWORD color = get_readback_color(&rb, 80 + i * 160, 60 + j * 120, 0);
             ok(compare_color(color, expected_srgb_color, 1)
                     || broken(compare_color(color, expected_color, 1) && broken_device),
                     "Got unexpected color 0x%08x.\n", color);
@@ -12827,6 +12893,70 @@ static void test_clear_render_target_view_2d(void)
     release_test_context(&test_context);
 }
 
+static void test_clear_render_target_view_3d(void)
+{
+    static const float color[] = {0.1f, 0.5f, 0.3f, 0.75f};
+    static const float green[] = {0.0f, 1.0f, 0.0f, 0.5f};
+
+    struct d3d11_test_context test_context;
+    D3D11_RENDER_TARGET_VIEW_DESC rtv_desc;
+    D3D11_TEXTURE3D_DESC texture_desc;
+    ID3D11DeviceContext *context;
+    ID3D11RenderTargetView *rtv;
+    ID3D11Texture3D *texture;
+    ID3D11Device *device;
+    HRESULT hr;
+
+    if (!init_test_context(&test_context, NULL))
+        return;
+    device = test_context.device;
+    context = test_context.immediate_context;
+
+    texture_desc.Width = 8;
+    texture_desc.Height = 8;
+    texture_desc.Depth = 4;
+    texture_desc.MipLevels = 1;
+    texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+    texture_desc.Usage = D3D11_USAGE_DEFAULT;
+    texture_desc.BindFlags = D3D11_BIND_RENDER_TARGET;
+    texture_desc.CPUAccessFlags = 0;
+    texture_desc.MiscFlags = 0;
+    hr = ID3D11Device_CreateTexture3D(device, &texture_desc, NULL, &texture);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+    hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, NULL, &rtv);
+    ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
+
+    ID3D11DeviceContext_ClearRenderTargetView(context, rtv, color);
+    check_texture3d_color(texture, 0xbf4c7f19, 1);
+    ID3D11DeviceContext_ClearRenderTargetView(context, rtv, green);
+    check_texture3d_color(texture, 0x8000ff00, 1);
+
+    ID3D11RenderTargetView_Release(rtv);
+    ID3D11Texture3D_Release(texture);
+
+    texture_desc.Format = DXGI_FORMAT_R8G8B8A8_TYPELESS;
+    hr = ID3D11Device_CreateTexture3D(device, &texture_desc, NULL, &texture);
+    ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+    rtv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
+    rtv_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
+    U(rtv_desc).Texture3D.MipSlice = 0;
+    U(rtv_desc).Texture3D.FirstWSlice = 0;
+    U(rtv_desc).Texture3D.WSize = ~0u;
+    hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, &rtv_desc, &rtv);
+    ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
+
+    ID3D11DeviceContext_ClearRenderTargetView(context, rtv, color);
+    check_texture3d_color(texture, 0xbf95bc59, 1);
+    ID3D11DeviceContext_ClearRenderTargetView(context, rtv, green);
+    check_texture3d_color(texture, 0x8000ff00, 1);
+
+    ID3D11RenderTargetView_Release(rtv);
+    ID3D11Texture3D_Release(texture);
+    release_test_context(&test_context);
+}
+
 static void test_clear_depth_stencil_view(void)
 {
     D3D11_TEXTURE2D_DESC texture_desc;
@@ -13061,7 +13191,7 @@ static void test_clear_buffer_unordered_access_view(void)
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
-            DWORD data = get_readback_color(&rb, x, 0);
+            DWORD data = get_readback_color(&rb, x, 0, 0);
             ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
         }
         release_resource_readback(&rb);
@@ -13070,7 +13200,7 @@ static void test_clear_buffer_unordered_access_view(void)
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
-            DWORD data = get_readback_color(&rb, x, 0);
+            DWORD data = get_readback_color(&rb, x, 0, 0);
             uvec4 = x < U(uav_desc).Buffer.NumElements ? fe_uvec4 : uvec4_data[i];
             ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
         }
@@ -13105,7 +13235,7 @@ static void test_clear_buffer_unordered_access_view(void)
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
-            DWORD data = get_readback_color(&rb, x, 0);
+            DWORD data = get_readback_color(&rb, x, 0, 0);
             ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
         }
         release_resource_readback(&rb);
@@ -13114,7 +13244,7 @@ static void test_clear_buffer_unordered_access_view(void)
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
-            DWORD data = get_readback_color(&rb, x, 0);
+            DWORD data = get_readback_color(&rb, x, 0, 0);
             uvec4 = U(uav_desc).Buffer.FirstElement <= x ? fe_uvec4 : uvec4_data[i];
             ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
         }
@@ -13149,7 +13279,7 @@ static void test_clear_buffer_unordered_access_view(void)
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
-            DWORD data = get_readback_color(&rb, x, 0);
+            DWORD data = get_readback_color(&rb, x, 0, 0);
             ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
         }
         release_resource_readback(&rb);
@@ -13158,7 +13288,7 @@ static void test_clear_buffer_unordered_access_view(void)
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
-            DWORD data = get_readback_color(&rb, x, 0);
+            DWORD data = get_readback_color(&rb, x, 0, 0);
             uvec4 = U(uav_desc).Buffer.FirstElement <= x ? fe_uvec4 : uvec4_data[i];
             ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
         }
@@ -13233,7 +13363,7 @@ static void test_clear_buffer_unordered_access_view(void)
         ID3D11DeviceContext_ClearUnorderedAccessViewUint(context, uav, &uvec4.x);
         get_buffer_readback(buffer, &rb);
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
-            todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0), &uvec4);
+            todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0, 0), &uvec4);
         release_resource_readback(&rb);
 
         ID3D11DeviceContext_ClearUnorderedAccessViewUint(context, uav2, &fe_uvec4.x);
@@ -13241,7 +13371,7 @@ static void test_clear_buffer_unordered_access_view(void)
         for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
         {
             uvec4 = U(uav_desc).Buffer.FirstElement <= x ? fe_uvec4 : uvec4_data[i];
-            todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0), &uvec4);
+            todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0, 0), &uvec4);
         }
         release_resource_readback(&rb);
     }
@@ -17403,15 +17533,15 @@ float4 main(struct ps_data ps_input) : SV_Target
         ID3D11DeviceContext_Draw(context, 4, 0);
 
         get_texture_readback(texture, 0, &rb);
-        color = get_readback_color(&rb, 320, 190);
+        color = get_readback_color(&rb, 320, 190, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 255, 240);
+        color = get_readback_color(&rb, 255, 240, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 320, 240);
+        color = get_readback_color(&rb, 320, 240, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 385, 240);
+        color = get_readback_color(&rb, 385, 240, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 320, 290);
+        color = get_readback_color(&rb, 320, 290, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
         release_resource_readback(&rb);
 
@@ -17420,15 +17550,15 @@ float4 main(struct ps_data ps_input) : SV_Target
         ID3D11DeviceContext_Draw(context, 4, 0);
 
         get_texture_readback(test_context.backbuffer, 0, &rb);
-        color = get_readback_color(&rb, 320, 190);
+        color = get_readback_color(&rb, 320, 190, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 255, 240);
+        color = get_readback_color(&rb, 255, 240, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 320, 240);
+        color = get_readback_color(&rb, 320, 240, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 385, 240);
+        color = get_readback_color(&rb, 385, 240, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
-        color = get_readback_color(&rb, 320, 290);
+        color = get_readback_color(&rb, 320, 290, 0);
         ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
         release_resource_readback(&rb);
 
@@ -18084,7 +18214,7 @@ static void test_uav_load(void)
             for (x = 0; x < 4; ++x)
             {
                 DWORD expected = test->expected_colors[y * 4 + x];
-                DWORD color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+                DWORD color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
                 ok(compare_color(color, expected, 0),
                         "Test %u: Got 0x%08x, expected 0x%08x at (%u, %u).\n",
                         i, color, expected, x, y);
@@ -18485,7 +18615,7 @@ static void test_uav_store_immediate_constant(void)
     ID3D11DeviceContext_CSSetUnorderedAccessViews(context, 0, 1, &uav, NULL);
     ID3D11DeviceContext_Dispatch(context, 1, 1, 1);
     get_buffer_readback(buffer, &rb);
-    int_data = get_readback_color(&rb, 0, 0);
+    int_data = get_readback_color(&rb, 0, 0, 0);
     ok(int_data == 42, "Got unexpected value %u.\n", int_data);
     release_resource_readback(&rb);
 
@@ -18880,7 +19010,7 @@ static void test_atomic_instructions(void)
         get_buffer_readback(in_buffer, &rb);
         for (j = 0; j < ARRAY_SIZE(instructions); ++j)
         {
-            unsigned int value = get_readback_color(&rb, j, 0);
+            unsigned int value = get_readback_color(&rb, j, 0, 0);
             unsigned int expected = test->expected_result[j];
 
             todo_wine_if(expected != test->input[j]
@@ -18907,8 +19037,8 @@ static void test_atomic_instructions(void)
         {
             BOOL todo_instruction = !strcmp(imm_instructions[j], "imm_atomic_imax")
                     || !strcmp(imm_instructions[j], "imm_atomic_imin");
-            unsigned int out_value = get_readback_color(&out_rb, j, 0);
-            unsigned int value = get_readback_color(&rb, j, 0);
+            unsigned int out_value = get_readback_color(&out_rb, j, 0, 0);
+            unsigned int value = get_readback_color(&rb, j, 0, 0);
             unsigned int expected = test->expected_result[j];
 
             todo_wine_if(expected != test->input[j] && todo_instruction)
@@ -20409,7 +20539,7 @@ static void test_buffer_srv(void)
         {
             for (x = 0; x < 4; ++x)
             {
-                color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+                color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
                 expected_color = test->expected_colors[y * 4 + x];
                 ok(compare_color(color, expected_color, 1),
                         "Test %u: Got 0x%08x, expected 0x%08x at (%u, %u).\n",
@@ -20635,7 +20765,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
     get_buffer_readback(raw_buffer, &rb);
     for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
     {
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
     }
     release_resource_readback(&rb);
@@ -20649,7 +20779,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
     get_buffer_readback(raw_buffer, &rb);
     for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
     {
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
     }
     release_resource_readback(&rb);
@@ -20663,7 +20793,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
     get_buffer_readback(raw_buffer, &rb);
     for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
     {
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
     }
     release_resource_readback(&rb);
@@ -20677,7 +20807,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
     get_buffer_readback(raw_buffer, &rb);
     for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
     {
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
     }
     release_resource_readback(&rb);
@@ -20694,9 +20824,9 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
             NULL, &offset, 0, 0);
     ID3D11DeviceContext_Dispatch(context, 1, 1, 1);
     get_buffer_readback(raw_buffer, &rb);
-    data = get_readback_color(&rb, 0, 0);
+    data = get_readback_color(&rb, 0, 0, 0);
     ok(data == 0xffff, "Got unexpected result %#x.\n", data);
-    data = get_readback_color(&rb, 1, 0);
+    data = get_readback_color(&rb, 1, 0, 0);
     ok(data == 0xa, "Got unexpected result %#x.\n", data);
     release_resource_readback(&rb);
 
@@ -20903,7 +21033,7 @@ static void test_uav_counters(void)
     get_buffer_readback(buffer2, &rb);
     for (i = 0; i < 8; ++i)
     {
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         ok(data == 0xdeadbeef, "Got data %u at %u.\n", data, i);
     }
     release_resource_readback(&rb);
@@ -21453,7 +21583,7 @@ static void test_tgsm(void)
     get_buffer_readback(buffer, &rb);
     for (i = 0; i < 64; ++i)
     {
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         expected = 33 * i;
         ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
     }
@@ -21486,9 +21616,9 @@ static void test_tgsm(void)
     for (i = 0; i < 32; ++i)
     {
         expected = 64 * i + 32;
-        data = get_readback_color(&rb, i, 0);
+        data = get_readback_color(&rb, i, 0, 0);
         ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
-        data = get_readback_color(&rb2, i, 0);
+        data = get_readback_color(&rb2, i, 0, 0);
         ok(data == expected || !data, "Got %u, expected %u (index %u).\n", data, expected, i);
     }
     release_resource_readback(&rb);
@@ -21530,7 +21660,7 @@ static void test_tgsm(void)
         expected = (i % 32 + 1) * (i / 32);
         float_data = get_readback_float(&rb, i, 0);
         ok(float_data == expected, "Got %.8e, expected %u (index %u).\n", float_data, expected, i);
-        data = get_readback_color(&rb2, i, 0);
+        data = get_readback_color(&rb2, i, 0, 0);
         ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
     }
     release_resource_readback(&rb);
@@ -21746,15 +21876,15 @@ float4 main(struct ps_data ps_input) : SV_Target
     ID3D11DeviceContext_Draw(context, 1, 0);
 
     get_texture_readback(test_context.backbuffer, 0, &rb);
-    color = get_readback_color(&rb, 320, 190);
+    color = get_readback_color(&rb, 320, 190, 0);
     ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
-    color = get_readback_color(&rb, 255, 240);
+    color = get_readback_color(&rb, 255, 240, 0);
     ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
-    color = get_readback_color(&rb, 320, 240);
+    color = get_readback_color(&rb, 320, 240, 0);
     ok(compare_color(color, 0xffffff00, 1), "Got unexpected color 0x%08x.\n", color);
-    color = get_readback_color(&rb, 385, 240);
+    color = get_readback_color(&rb, 385, 240, 0);
     ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
-    color = get_readback_color(&rb, 320, 290);
+    color = get_readback_color(&rb, 320, 290, 0);
     ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
     release_resource_readback(&rb);
 
@@ -21784,7 +21914,7 @@ static void check_triangles_(unsigned int line, ID3D11Buffer *buffer,
 
     for (i = 0; i < triangle_count; ++i)
     {
-        current = get_readback_data(&rb, i, 0, sizeof(*current));
+        current = get_readback_data(&rb, i, 0, 0, sizeof(*current));
         expected = &triangles[i];
 
         offset = ~0u;
@@ -24136,7 +24266,7 @@ static void test_depth_bias(void)
                 {
                     for (x = 0; x < texture_desc.Width; ++x)
                     {
-                        u16 = get_readback_data(&rb, x, y, sizeof(*u16));
+                        u16 = get_readback_data(&rb, x, y, 0, sizeof(*u16));
                         ok(*u16 == 0xffff, "Got unexpected value %#x.\n", *u16);
                     }
                 }
@@ -24182,7 +24312,7 @@ static void test_depth_bias(void)
                             expected_value = depth * 16777215.0f + 0.5f;
                             for (x = 0; x < texture_desc.Width; ++x)
                             {
-                                u32 = get_readback_data(&rb, x, y, sizeof(*u32));
+                                u32 = get_readback_data(&rb, x, y, 0, sizeof(*u32));
                                 u32_value = *u32 >> shift;
                                 ok(abs(u32_value - expected_value) <= 1,
                                         "Got value %#x (%.8e), expected %#x (%.8e).\n",
@@ -24203,7 +24333,7 @@ static void test_depth_bias(void)
                             expected_value = depth * 65535.0f + 0.5f;
                             for (x = 0; x < texture_desc.Width; ++x)
                             {
-                                u16 = get_readback_data(&rb, x, y, sizeof(*u16));
+                                u16 = get_readback_data(&rb, x, y, 0, sizeof(*u16));
                                 ok(abs(*u16 - expected_value) <= 1,
                                         "Got value %#x (%.8e), expected %#x (%.8e).\n",
                                         *u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f);
@@ -24239,12 +24369,12 @@ static void test_depth_bias(void)
                         depth_values[y] = get_readback_float(&rb, 0, y);
                         break;
                     case DXGI_FORMAT_D24_UNORM_S8_UINT:
-                        u32 = get_readback_data(&rb, 0, y, sizeof(*u32));
+                        u32 = get_readback_data(&rb, 0, y, 0, sizeof(*u32));
                         u32_value = *u32 >> shift;
                         depth_values[y] = u32_value / 16777215.0f;
                         break;
                     case DXGI_FORMAT_D16_UNORM:
-                        u16 = get_readback_data(&rb, 0, y, sizeof(*u16));
+                        u16 = get_readback_data(&rb, 0, y, 0, sizeof(*u16));
                         depth_values[y] = *u16 / 65535.0f;
                         break;
                     default:
@@ -24276,7 +24406,7 @@ static void test_depth_bias(void)
                                     "Got depth %.8e, expected %.8e.\n", data, depth);
                             break;
                         case DXGI_FORMAT_D24_UNORM_S8_UINT:
-                            u32 = get_readback_data(&rb, 0, y, sizeof(*u32));
+                            u32 = get_readback_data(&rb, 0, y, 0, sizeof(*u32));
                             u32_value = *u32 >> shift;
                             expected_value = depth * 16777215.0f + 0.5f;
                             ok(abs(u32_value - expected_value) <= 3,
@@ -24285,7 +24415,7 @@ static void test_depth_bias(void)
                                     expected_value, expected_value / 16777215.0f);
                             break;
                         case DXGI_FORMAT_D16_UNORM:
-                            u16 = get_readback_data(&rb, 0, y, sizeof(*u16));
+                            u16 = get_readback_data(&rb, 0, y, 0, sizeof(*u16));
                             expected_value = depth * 65535.0f + 0.5f;
                             ok(abs(*u16 - expected_value) <= 1,
                                     "Got value %#x (%.8e), expected %#x (%.8e).\n",
@@ -24839,7 +24969,7 @@ static void test_format_compatibility(void)
         {
             x = j % 4;
             y = j / 4;
-            colour = get_readback_color(&rb, x, y);
+            colour = get_readback_color(&rb, x, y, 0);
             expected = test_data[i].success && x >= texel_dwords && y
                     ? bitmap_data[j - (4 + texel_dwords)] : initial_data[j];
             ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n",
@@ -24854,7 +24984,7 @@ static void test_format_compatibility(void)
         {
             x = j % 4;
             y = j / 4;
-            colour = get_readback_color(&rb, x, y);
+            colour = get_readback_color(&rb, x, y, 0);
             expected = test_data[i].success ? bitmap_data[j] : initial_data[j];
             ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n",
                     i, colour, x, y, expected);
@@ -25601,9 +25731,9 @@ static void test_combined_clip_and_cull_distances(void)
             else
             {
                 get_texture_readback(test_context.backbuffer, 0, &rb);
-                color = get_readback_color(&rb, 160, 240);
+                color = get_readback_color(&rb, 160, 240, 0);
                 ok(color == expected_color[0], "Got unexpected color 0x%08x.\n", color);
-                color = get_readback_color(&rb, 480, 240);
+                color = get_readback_color(&rb, 480, 240, 0);
                 ok(color == expected_color[1], "Got unexpected color 0x%08x.\n", color);
                 release_resource_readback(&rb);
             }
@@ -25980,7 +26110,7 @@ static void test_generate_mips(void)
             get_texture_readback(test_context.backbuffer, 0, &rb);
             for (k = 0; k < ARRAY_SIZE(expected); ++k)
             {
-                color = get_readback_color(&rb, expected[k].pos.x, expected[k].pos.y);
+                color = get_readback_color(&rb, expected[k].pos.x, expected[k].pos.y, 0);
                 expected_color = tests[j].expected_mips ? expected[k].color : 0;
                 ok(color == expected_color, "Resource type %u, test %u: pixel (%u, %u) "
                         "has color %08x, expected %08x.\n",
@@ -26044,7 +26174,7 @@ static void test_generate_mips(void)
     draw_quad(&test_context);
 
     get_texture_readback(test_context.backbuffer, 0, &rb);
-    color = get_readback_color(&rb, 320, 240);
+    color = get_readback_color(&rb, 320, 240, 0);
     ok(compare_color(color, 0x7fbcbcbc, 1) || broken(compare_color(color, 0x7f7f7f7f, 1)), /* AMD */
             "Unexpected color %08x.\n", color);
     release_resource_readback(&rb);
@@ -27181,7 +27311,7 @@ static void test_sample_shading(void)
         draw_quad(&test_context);
         check_texture_color(test_context.backbuffer, 0xff00ff00, 0);
         get_buffer_readback(buffer, &rb);
-        data = get_readback_color(&rb, 0, 0);
+        data = get_readback_color(&rb, 0, 0, 0);
         ok(1024 <= data && data <= 1056, "Test %u: Got unexpected value %u.\n", i, data);
         release_resource_readback(&rb);
 
@@ -27191,7 +27321,7 @@ static void test_sample_shading(void)
                 1, &rtv, NULL, 1, 1, &uav, NULL);
         draw_quad(&test_context);
         get_buffer_readback(buffer, &rb);
-        data = get_readback_color(&rb, 0, 0);
+        data = get_readback_color(&rb, 0, 0, 0);
         todo_wine_if(tests[i].todo)
         {
             if (tests[i].sample_shading)
@@ -27475,6 +27605,7 @@ START_TEST(d3d11)
     test_swapchain_flip();
     test_clear_render_target_view_1d();
     test_clear_render_target_view_2d();
+    test_clear_render_target_view_3d();
     test_clear_depth_stencil_view();
     test_clear_buffer_unordered_access_view();
     test_initial_depth_stencil_state();
-- 
2.16.1




More information about the wine-devel mailing list