[PATCH 1/7] d3d11/tests: Add some tests for IDXGIResource support.
Nikolay Sivov
wine at gitlab.winehq.org
Thu Jun 9 02:22:36 CDT 2022
From: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/d3d11/tests/d3d11.c | 93 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 91 insertions(+), 2 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index a43e2bb0cc5..9c72de054c4 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -2499,6 +2499,63 @@ static void test_create_texture1d(void)
ok(!refcount, "Device has %lu references left.\n", refcount);
}
+#define test_dxgi_resource(a) test_dxgi_resource_(__LINE__, a)
+static void test_dxgi_resource_(unsigned int line, void *iface)
+{
+ IDXGIResource *resource, *resource2;
+ IDXGISurface *surface, *surface2;
+ IUnknown *object = iface, *unk;
+ DWORD data;
+ HRESULT hr;
+ UINT size;
+
+ hr = IUnknown_QueryInterface(object, &IID_IDXGIResource, (void **)&resource);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ if (FAILED(hr)) return;
+
+ if (SUCCEEDED(IUnknown_QueryInterface(object, &IID_IDXGISurface, (void **)&surface)))
+ {
+ hr = IDXGISurface_QueryInterface(surface, &IID_IDXGIDeviceSubObject, (void **)&unk);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ ok_(__FILE__, line)((IUnknown *)resource == unk, "Unexpected interface pointer.\n");
+ IUnknown_Release(unk);
+
+ hr = IDXGISurface_QueryInterface(surface, &IID_IDXGIObject, (void **)&unk);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ ok_(__FILE__, line)((IUnknown *)resource == unk, "Unexpected interface pointer.\n");
+ IUnknown_Release(unk);
+
+ hr = IDXGISurface_QueryInterface(surface, &IID_IDXGIResource, (void **)&resource2);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ ok_(__FILE__, line)(resource2 == resource, "Unexpected resource pointer.\n");
+ IDXGIResource_Release(resource2);
+
+ hr = IDXGIResource_QueryInterface(resource, &IID_IDXGISurface, (void **)&surface2);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ ok_(__FILE__, line)(surface2 == surface, "Unexpected surface pointer.\n");
+ IDXGISurface_Release(surface2);
+
+ hr = IDXGISurface_GetParent(surface, &IID_IDXGIResource, (void **)&resource2);
+ ok_(__FILE__, line)(hr == E_NOINTERFACE, "Got unexpected hr %#lx.\n", hr);
+ hr = IDXGIResource_GetParent(resource, &IID_IDXGISurface, (void **)&surface2);
+ ok_(__FILE__, line)(hr == E_NOINTERFACE, "Got unexpected hr %#lx.\n", hr);
+
+ data = 123;
+ hr = IDXGIResource_SetPrivateData(resource, &IID_IUnknown, sizeof(data), &data);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+
+ size = sizeof(data);
+ data = 0;
+ hr = IDXGISurface_GetPrivateData(surface, &IID_IUnknown, &size, &data);
+ ok_(__FILE__, line)(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ ok_(__FILE__, line)(data == 123, "Unexpected data %#lx.\n", data);
+
+ IDXGISurface_Release(surface);
+ }
+
+ IDXGIResource_Release(resource);
+}
+
static void test_texture1d_interfaces(void)
{
ID3D10Texture1D *d3d10_texture;
@@ -2548,7 +2605,7 @@ static void test_texture1d_interfaces(void)
}
desc.Width = 512;
- desc.MipLevels = 0;
+ desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.Usage = D3D11_USAGE_DEFAULT;
@@ -2558,7 +2615,18 @@ static void test_texture1d_interfaces(void)
hr = ID3D11Device_CreateTexture1D(device, &desc, NULL, &texture);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ todo_wine
+ test_dxgi_resource(texture);
+ ID3D11Texture1D_Release(texture);
+
+ desc.MipLevels = 0;
+ hr = ID3D11Device_CreateTexture1D(device, &desc, NULL, &texture);
+ ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ todo_wine
+ test_dxgi_resource(texture);
check_interface(texture, &IID_IDXGISurface, FALSE, FALSE);
+ todo_wine
+ check_interface(texture, &IID_IDXGIResource, TRUE, FALSE);
hr = check_interface(texture, &IID_ID3D10Texture1D, TRUE, TRUE); /* Not available on all Windows versions. */
ID3D11Texture1D_Release(texture);
if (FAILED(hr))
@@ -2934,7 +3002,7 @@ static void test_texture2d_interfaces(void)
desc.Width = 512;
desc.Height = 512;
- desc.MipLevels = 0;
+ desc.MipLevels = 1;
desc.ArraySize = 1;
desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
desc.SampleDesc.Count = 1;
@@ -2944,9 +3012,23 @@ static void test_texture2d_interfaces(void)
desc.CPUAccessFlags = 0;
desc.MiscFlags = 0;
+ hr = ID3D11Device_CreateTexture2D(device, &desc, NULL, &texture);
+ ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+ check_interface(texture, &IID_IDXGISurface, TRUE, FALSE);
+ todo_wine
+ check_interface(texture, &IID_IDXGIResource, TRUE, FALSE);
+ todo_wine
+ test_dxgi_resource(texture);
+ ID3D11Texture2D_Release(texture);
+
+ desc.MipLevels = 0;
hr = ID3D11Device_CreateTexture2D(device, &desc, NULL, &texture);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
check_interface(texture, &IID_IDXGISurface, FALSE, FALSE);
+ todo_wine
+ check_interface(texture, &IID_IDXGIResource, TRUE, FALSE);
+ todo_wine
+ test_dxgi_resource(texture);
hr = check_interface(texture, &IID_ID3D10Texture2D, TRUE, TRUE); /* Not available on all Windows versions. */
ID3D11Texture2D_Release(texture);
if (FAILED(hr))
@@ -3211,6 +3293,10 @@ static void test_texture3d_interfaces(void)
hr = ID3D11Device_CreateTexture3D(device, &desc, NULL, &texture);
ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
check_interface(texture, &IID_IDXGISurface, FALSE, FALSE);
+ todo_wine
+ check_interface(texture, &IID_IDXGIResource, TRUE, FALSE);
+ todo_wine
+ test_dxgi_resource(texture);
hr = check_interface(texture, &IID_ID3D10Texture3D, TRUE, TRUE); /* Not available on all Windows versions. */
ID3D11Texture3D_Release(texture);
if (FAILED(hr))
@@ -3526,6 +3612,9 @@ static void test_create_buffer(void)
continue;
}
+ todo_wine
+ check_interface(buffer, &IID_IDXGIResource, TRUE, FALSE);
+
if (!(desc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED))
desc.StructureByteStride = 0;
--
GitLab
https://gitlab.winehq.org/wine/wine/-/merge_requests/212
More information about the wine-devel
mailing list