[PATCH 1/5] d3dx10: Don't ignore HRESULT parameter in D3DX10CreateTextureFromMemory.

Piotr Caban wine at gitlab.winehq.org
Sat Jun 11 06:18:50 CDT 2022


From: Piotr Caban <piotr at codeweavers.com>

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
---
 dlls/d3dx10_43/tests/d3dx10.c |  5 +++++
 dlls/d3dx10_43/texture.c      | 32 +++++++++++++++++++++++++-------
 2 files changed, 30 insertions(+), 7 deletions(-)

diff --git a/dlls/d3dx10_43/tests/d3dx10.c b/dlls/d3dx10_43/tests/d3dx10.c
index 0c6c4e5c8ce..560bc7a8f17 100644
--- a/dlls/d3dx10_43/tests/d3dx10.c
+++ b/dlls/d3dx10_43/tests/d3dx10.c
@@ -2172,6 +2172,11 @@ static void test_create_texture(void)
 
     /* D3DX10CreateTextureFromMemory tests */
 
+    resource = (ID3D10Resource *)0xdeadbeef;
+    hr = D3DX10CreateTextureFromMemory(NULL, test_bmp_1bpp, sizeof(test_bmp_1bpp), NULL, NULL, &resource, NULL);
+    ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
+    ok(resource == (ID3D10Resource *)0xdeadbeef, "Got unexpected resource %p.\n", resource);
+
     resource = (ID3D10Resource *)0xdeadbeef;
     hr = D3DX10CreateTextureFromMemory(device, NULL, 0, NULL, NULL, &resource, NULL);
     ok(hr == E_FAIL, "Got unexpected hr %#x.\n", hr);
diff --git a/dlls/d3dx10_43/texture.c b/dlls/d3dx10_43/texture.c
index 9c7762bc617..d5066b9793b 100644
--- a/dlls/d3dx10_43/texture.c
+++ b/dlls/d3dx10_43/texture.c
@@ -581,7 +581,9 @@ HRESULT WINAPI D3DX10CreateTextureFromFileA(ID3D10Device *device, const char *sr
     TRACE("device %p, src_file %s, load_info %p, pump %p, texture %p, hresult %p.\n",
             device, debugstr_a(src_file), load_info, pump, texture, hresult);
 
-    if (!src_file || !texture)
+    if (!device)
+        return E_INVALIDARG;
+    if (!src_file)
         return E_FAIL;
 
     if (!(str_len = MultiByteToWideChar(CP_ACP, 0, src_file, -1, NULL, 0)))
@@ -608,11 +610,17 @@ HRESULT WINAPI D3DX10CreateTextureFromFileW(ID3D10Device *device, const WCHAR *s
     TRACE("device %p, src_file %s, load_info %p, pump %p, texture %p, hresult %p.\n",
             device, debugstr_w(src_file), load_info, pump, texture, hresult);
 
-    if (!src_file || !texture)
+    if (!device)
+        return E_INVALIDARG;
+    if (!src_file)
         return E_FAIL;
 
     if (FAILED((hr = load_file(src_file, &buffer, &size))))
+    {
+        if (hresult)
+            *hresult = hr;
         return hr;
+    }
 
     hr = D3DX10CreateTextureFromMemory(device, buffer, size, load_info, pump, texture, hresult);
 
@@ -631,8 +639,8 @@ HRESULT WINAPI D3DX10CreateTextureFromResourceA(ID3D10Device *device, HMODULE mo
     TRACE("device %p, module %p, resource %s, load_info %p, pump %p, texture %p, hresult %p.\n",
             device, module, debugstr_a(resource), load_info, pump, texture, hresult);
 
-    if (!resource || !texture)
-        return D3DX10_ERR_INVALID_DATA;
+    if (!device)
+        return E_INVALIDARG;
 
     hr = load_resourceA(module, resource, &buffer, &size);
     if (FAILED(hr))
@@ -651,8 +659,8 @@ HRESULT WINAPI D3DX10CreateTextureFromResourceW(ID3D10Device *device, HMODULE mo
     TRACE("device %p, module %p, resource %s, load_info %p, pump %p, texture %p, hresult %p.\n",
             device, module, debugstr_w(resource), load_info, pump, texture, hresult);
 
-    if (!resource || !texture)
-        return D3DX10_ERR_INVALID_DATA;
+    if (!device)
+        return E_INVALIDARG;
 
     hr = load_resourceW(module, resource, &buffer, &size);
     if (FAILED(hr))
@@ -684,7 +692,9 @@ HRESULT WINAPI D3DX10CreateTextureFromMemory(ID3D10Device *device, const void *s
     TRACE("device %p, src_data %p, src_data_size %Iu, load_info %p, pump %p, texture %p, hresult %p.\n",
             device, src_data, src_data_size, load_info, pump, texture, hresult);
 
-    if (!src_data || !src_data_size || !texture)
+    if (!device)
+        return E_INVALIDARG;
+    if (!src_data)
         return E_FAIL;
     if (load_info)
         FIXME("load_info is ignored.\n");
@@ -692,10 +702,16 @@ HRESULT WINAPI D3DX10CreateTextureFromMemory(ID3D10Device *device, const void *s
         FIXME("Thread pump is not supported yet.\n");
 
     if (FAILED(D3DX10GetImageInfoFromMemory(src_data, src_data_size, NULL, &img_info, NULL)))
+    {
+        if (hresult)
+            *hresult = E_FAIL;
         return E_FAIL;
+    }
     if (img_info.MiscFlags & D3D10_RESOURCE_MISC_TEXTURECUBE)
     {
         FIXME("Cube map is not supported.\n");
+        if (hresult)
+            *hresult = E_FAIL;
         return E_FAIL;
     }
 
@@ -807,5 +823,7 @@ end:
     if (factory)
         IWICImagingFactory_Release(factory);
 
+    if (hresult)
+        *hresult = hr;
     return hr;
 }
-- 
GitLab


https://gitlab.winehq.org/wine/wine/-/merge_requests/228



More information about the wine-devel mailing list