[PATCH 7/8] d3d11/tests: Add tests for stream output state swap.

Rémi Bernon rbernon at codeweavers.com
Tue Feb 2 09:41:06 CST 2021


Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/d3d11/tests/d3d11.c | 31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 63a98f5099a..5212776cc59 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -6777,8 +6777,8 @@ static void test_device_context_state(void)
     };
 
     ID3DDeviceContextState *context_state, *previous_context_state, *tmp_context_state, *context_state2;
-    UINT ib_offset, vb_offset, vb_stride, offset, stride, sample_mask, stencil_ref, count;
-    ID3D11Buffer *cb, *srvb, *uavb, *ib, *vb, *tmp_cb, *tmp_ib, *tmp_vb;
+    UINT ib_offset, vb_offset, vb_stride, so_offset, offset, stride, sample_mask, stencil_ref, count;
+    ID3D11Buffer *cb, *srvb, *uavb, *ib, *vb, *sob, *tmp_cb, *tmp_ib, *tmp_vb, *tmp_sob;
     ID3D11UnorderedAccessView *tmp_uav, *uav, *ps_uav;
     ID3D11Device *d3d11_device, *d3d11_device2;
     ID3D11SamplerState *sampler, *tmp_sampler;
@@ -6882,6 +6882,7 @@ static void test_device_context_state(void)
     uavb = create_buffer((ID3D11Device *)device, D3D11_BIND_UNORDERED_ACCESS, 1024, NULL);
     ib = create_buffer((ID3D11Device *)device, D3D11_BIND_INDEX_BUFFER, 1024, NULL);
     vb = create_buffer((ID3D11Device *)device, D3D11_BIND_VERTEX_BUFFER, 1024, NULL);
+    sob = create_buffer((ID3D11Device *)device, D3D11_BIND_STREAM_OUTPUT, 1024, NULL);
 
     hr = ID3D11Device1_CreateVertexShader(device, simple_vs, sizeof(simple_vs), NULL, &vs);
     ok(SUCCEEDED(hr), "Failed to create vertex shader, hr %#x.\n", hr);
@@ -6942,6 +6943,7 @@ static void test_device_context_state(void)
     ib_offset = 16;
     vb_offset = 16;
     vb_stride = 16;
+    so_offset = 16;
 
     texture_desc.Width = 512;
     texture_desc.Height = 512;
@@ -7064,6 +7066,8 @@ static void test_device_context_state(void)
     ID3D11DeviceContext1_RSSetViewports(context, 1, &vp);
     ID3D11DeviceContext1_RSSetState(context, rs);
 
+    ID3D11DeviceContext1_SOSetTargets(context, 1, &sob, &so_offset);
+
     previous_context_state = (ID3DDeviceContextState *)0xdeadbeef;
     ID3D11DeviceContext1_SwapDeviceContextState(context, NULL, &previous_context_state);
     todo_wine ok(previous_context_state == NULL, "Got unexpected state pointer.\n");
@@ -7248,6 +7252,11 @@ static void test_device_context_state(void)
     ID3D11DeviceContext1_RSGetScissorRects(context, &count, tmp_rect);
     todo_wine ok(count == 0, "Got unexpected scissor rect count %u.\n", count);
 
+    tmp_sob = (ID3D11Buffer *)0xdeadbeef;
+    ID3D11DeviceContext1_SOGetTargets(context, 1, &tmp_sob);
+    todo_wine ok(!tmp_sob, "Got unexpected stream output buffer %p.\n", tmp_sob);
+    if (tmp_sob) ID3D11Buffer_Release(tmp_sob);
+
     /* updating the device context should also update the device context state */
     hr = ID3D11Device1_CreateVertexShader(device, simple_vs, sizeof(simple_vs), NULL, &vs2);
     ok(SUCCEEDED(hr), "Failed to create vertex shader, hr %#x.\n", hr);
@@ -7523,6 +7532,11 @@ static void test_device_context_state(void)
     ok(!memcmp(tmp_rect, &rect, sizeof(rect)), "Got scissor rect %s, expected %s.\n",
             wine_dbgstr_rect(tmp_rect), wine_dbgstr_rect(&rect));
 
+    tmp_sob = (ID3D11Buffer *)0xdeadbeef;
+    ID3D11DeviceContext1_SOGetTargets(context, 1, &tmp_sob);
+    ok(tmp_sob == sob, "Got stream output buffer %p, expected %p.\n", tmp_sob, sob);
+    ID3D11Buffer_Release(tmp_sob);
+
     feature_level = min(feature_level, D3D_FEATURE_LEVEL_10_1);
     hr = ID3D11Device1_CreateDeviceContextState(device, 0, &feature_level, 1, D3D11_SDK_VERSION,
             &IID_ID3D10Device, NULL, &context_state);
@@ -7744,6 +7758,8 @@ static void test_device_context_state(void)
     ID3D11DeviceContext1_RSSetViewports(context, 1, &vp);
     ID3D11DeviceContext1_RSSetState(context, rs);
 
+    ID3D11DeviceContext1_SOSetTargets(context, 1, &sob, &so_offset);
+
     tmp_rs = (ID3D11RasterizerState *)0xdeadbeef;
     ID3D11DeviceContext1_RSGetState(context, &tmp_rs);
     todo_wine ok(!tmp_rs, "Got unexpected rasterizer state %p.\n", tmp_rs);
@@ -7757,6 +7773,11 @@ static void test_device_context_state(void)
     ID3D11DeviceContext1_RSGetScissorRects(context, &count, tmp_rect);
     todo_wine ok(count == 0, "Got unexpected scissor rect count %u.\n", count);
 
+    tmp_sob = (ID3D11Buffer *)0xdeadbeef;
+    ID3D11DeviceContext1_SOGetTargets(context, 1, &tmp_sob);
+    todo_wine ok(!tmp_sob, "Got unexpected stream output buffer %p.\n", tmp_sob);
+    if (tmp_sob) ID3D11Buffer_Release(tmp_sob);
+
     check_interface(device, &IID_ID3D10Device, TRUE, FALSE);
     check_interface(device, &IID_ID3D10Device1, TRUE, FALSE);
 
@@ -7944,9 +7965,15 @@ static void test_device_context_state(void)
     ok(!memcmp(tmp_rect, &rect, sizeof(rect)), "Got scissor rect %s, expected %s.\n",
             wine_dbgstr_rect(tmp_rect), wine_dbgstr_rect(&rect));
 
+    tmp_sob = (ID3D11Buffer *)0xdeadbeef;
+    ID3D11DeviceContext1_SOGetTargets(context, 1, &tmp_sob);
+    ok(tmp_sob == sob, "Got stream output buffer %p, expected %p.\n", tmp_sob, sob);
+    ID3D11Buffer_Release(tmp_sob);
+
     check_interface(device, &IID_ID3D10Device, TRUE, FALSE);
     check_interface(device, &IID_ID3D10Device1, TRUE, FALSE);
 
+    ID3D11Buffer_Release(sob);
     ID3D11RasterizerState_Release(rs);
     ID3D11BlendState_Release(bs);
     ID3D11DepthStencilState_Release(dss);
-- 
2.30.0




More information about the wine-devel mailing list