From: Connor McAdams cmcadams@codeweavers.com
This used to be handled by the calls to D3DXLoad{Surface,Volume}FromMemory(), but now it needs to be handled inside of the texture from file functions themselves.
Fixes: 1215ee024148952525317cc104ce91e650f21ca3 Fixes: c9e6f6f84f661bdd190f4475296a7ce1d3885516 Fixes: f023fd35cefe6d46849a4a9336905410b4991ac4 Signed-off-by: Connor McAdams cmcadams@codeweavers.com --- dlls/d3dx9_36/tests/texture.c | 9 +++------ dlls/d3dx9_36/texture.c | 9 +++++++++ 2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c index e4baf3f5858..8e299a61360 100644 --- a/dlls/d3dx9_36/tests/texture.c +++ b/dlls/d3dx9_36/tests/texture.c @@ -2167,8 +2167,7 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) texture = NULL; hr = D3DXCreateTextureFromFileInMemoryEx(device, dds_16bit, sizeof(dds_16bit), D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, test_filter_values[i].filter, D3DX_DEFAULT, 0, NULL, NULL, &texture); - todo_wine_if(FAILED(test_filter_values[i].expected_hr)) ok(hr == test_filter_values[i].expected_hr, - "Unexpected hr %#lx.\n", hr); + ok(hr == test_filter_values[i].expected_hr, "Unexpected hr %#lx.\n", hr); if (texture) IDirect3DTexture9_Release(texture);
@@ -2548,8 +2547,7 @@ static void test_D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *devic hr = D3DXCreateCubeTextureFromFileInMemoryEx(device, dds_cube_map, sizeof(dds_cube_map), D3DX_DEFAULT, D3DX_DEFAULT, D3DUSAGE_DYNAMIC, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, test_filter_values[i].filter, D3DX_DEFAULT, 0, NULL, NULL, &cube_texture); - todo_wine_if(FAILED(test_filter_values[i].expected_hr)) ok(hr == test_filter_values[i].expected_hr, - "Unexpected hr %#lx.\n", hr); + ok(hr == test_filter_values[i].expected_hr, "Unexpected hr %#lx.\n", hr); if (cube_texture) IDirect3DCubeTexture9_Release(cube_texture);
@@ -2854,8 +2852,7 @@ static void test_D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *dev hr = D3DXCreateVolumeTextureFromFileInMemoryEx(device, dds_24bit_8_8, sizeof(dds_24bit_8_8), D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, D3DUSAGE_DYNAMIC, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, test_filter_values[i].filter, D3DX_DEFAULT, 0, NULL, NULL, &texture); - todo_wine_if(FAILED(test_filter_values[i].expected_hr)) ok(hr == test_filter_values[i].expected_hr, - "Unexpected hr %#lx.\n", hr); + ok(hr == test_filter_values[i].expected_hr, "Unexpected hr %#lx.\n", hr); if (texture) IDirect3DVolumeTexture9_Release(texture);
diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c index b3fed65244e..2820857230d 100644 --- a/dlls/d3dx9_36/texture.c +++ b/dlls/d3dx9_36/texture.c @@ -597,6 +597,9 @@ HRESULT WINAPI D3DXCreateTextureFromFileInMemoryEx(struct IDirect3DDevice9 *devi if (!device || !texture || !srcdata || !srcdatasize) return D3DERR_INVALIDCALL;
+ if (FAILED(hr = d3dx9_handle_load_filter(&filter))) + return hr; + staging_tex = tex = *texture = NULL; mipfilter = d3dx9_get_mip_filter_value(mipfilter, &skip_levels); hr = d3dx_image_init(srcdata, srcdatasize, &image, skip_levels, 0); @@ -1124,6 +1127,9 @@ HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *devic if (!device || !data || !data_size || !volume_texture) return D3DERR_INVALIDCALL;
+ if (FAILED(hr = d3dx9_handle_load_filter(&filter))) + return hr; + staging_tex = tex = *volume_texture = NULL; mip_filter = d3dx9_get_mip_filter_value(mip_filter, &skip_levels); hr = d3dx_image_init(data, data_size, &image, skip_levels, 0); @@ -1405,6 +1411,9 @@ HRESULT WINAPI D3DXCreateCubeTextureFromFileInMemoryEx(IDirect3DDevice9 *device, if (!device || !cube_texture || !src_data || !src_data_size) return D3DERR_INVALIDCALL;
+ if (FAILED(hr = d3dx9_handle_load_filter(&filter))) + return hr; + staging_tex = tex = *cube_texture = NULL; mip_filter = d3dx9_get_mip_filter_value(mip_filter, &skip_levels); hr = d3dx_image_init(src_data, src_data_size, &image, skip_levels, 0);