Signed-off-by: Paul Gofman gofmanp@gmail.com --- dlls/d3dx9_36/tests/texture.c | 17 +++++++++++++++++ dlls/d3dx9_36/texture.c | 4 +++- 2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c index 3e4d5e5df9..2688559c2c 100644 --- a/dlls/d3dx9_36/tests/texture.c +++ b/dlls/d3dx9_36/tests/texture.c @@ -2125,6 +2125,22 @@ static void test_D3DXCreateVolumeTextureFromFileInMemory(IDirect3DDevice9 *devic ok(ref == 0, "Invalid reference count. Got %u, expected 0.\n", ref); }
+static void test_D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *device) +{ + IDirect3DVolumeTexture9 *volume_texture; + HRESULT hr; + + hr = D3DXCreateVolumeTextureFromFileInMemoryEx(device, dds_volume_map, sizeof(dds_volume_map), D3DX_DEFAULT, + D3DX_DEFAULT, D3DX_DEFAULT, 1, D3DUSAGE_RENDERTARGET, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, + D3DX_DEFAULT, 0, NULL, NULL, &volume_texture); + ok(hr == D3DERR_NOTAVAILABLE, "Got unexpected hr %#x.\n", hr); + + hr = D3DXCreateVolumeTextureFromFileInMemoryEx(device, dds_volume_map, sizeof(dds_volume_map), D3DX_DEFAULT, + D3DX_DEFAULT, D3DX_DEFAULT, 1, D3DUSAGE_DEPTHSTENCIL, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, + D3DX_DEFAULT, 0, NULL, NULL, &volume_texture); + ok(hr == D3DERR_NOTAVAILABLE, "Got unexpected hr %#x.\n", hr); +} + /* fills positive x face with red color */ static void WINAPI fill_cube_positive_x(D3DXVECTOR4 *out, const D3DXVECTOR3 *tex_coord, const D3DXVECTOR3 *texel_size, void *data) { @@ -2599,6 +2615,7 @@ START_TEST(texture) test_D3DXCreateCubeTextureFromFileInMemory(device); test_D3DXCreateCubeTextureFromFileInMemoryEx(device); test_D3DXCreateVolumeTextureFromFileInMemory(device); + test_D3DXCreateVolumeTextureFromFileInMemoryEx(device); test_D3DXSaveTextureToFileInMemory(device);
ref = IDirect3DDevice9_Release(device); diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c index 12cb2f3983..d71682117c 100644 --- a/dlls/d3dx9_36/texture.c +++ b/dlls/d3dx9_36/texture.c @@ -1149,6 +1149,9 @@ HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *devic if (!device || !data || !data_size || !volume_texture) return D3DERR_INVALIDCALL;
+ if (usage & (D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL)) + return D3DERR_NOTAVAILABLE; + hr = D3DXGetImageInfoFromFileInMemory(data, data_size, &image_info); if (FAILED(hr)) return hr;
@@ -1234,7 +1237,6 @@ HRESULT WINAPI D3DXCreateVolumeTextureFromFileInMemoryEx(IDirect3DDevice9 *devic hr = D3DXCreateVolumeTexture(device, width, height, depth, mip_levels, usage, format, pool, &tex); buftex = NULL; } - if (FAILED(hr)) return hr;
hr = load_volume_texture_from_dds(tex, data, palette, filter, color_key, &image_info);