Module: wine Branch: master Commit: 7d07f1f2f6e043c1ec2ad6d73056234d07a02229 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d07f1f2f6e043c1ec2ad6d730...
Author: Józef Kucia joseph.kucia@gmail.com Date: Fri May 18 15:50:09 2012 +0200
d3dx9: Correctly handle D3DUSAGE_AUTOGENMIPMAP in D3DXCheckVolumeTextureRequirements.
---
dlls/d3dx9_36/tests/texture.c | 20 ++++++++++++++++++++ dlls/d3dx9_36/texture.c | 5 +++++ 2 files changed, 25 insertions(+), 0 deletions(-)
diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c index 80311e6..79e4023 100644 --- a/dlls/d3dx9_36/tests/texture.c +++ b/dlls/d3dx9_36/tests/texture.c @@ -517,6 +517,26 @@ static void test_D3DXCheckVolumeTextureRequirements(IDirect3DDevice9 *device) hr = D3DXCheckVolumeTextureRequirements(device, NULL, NULL, NULL, &mipmaps, 0, NULL, D3DPOOL_DEFAULT); ok(hr == D3D_OK, "D3DXCheckVolumeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK); ok(mipmaps == 9, "Returned mipmaps %d, expected %d\n", mipmaps, 9); + + if (!is_autogenmipmap_supported(device, D3DRTYPE_VOLUMETEXTURE)) + { + skip("No D3DUSAGE_AUTOGENMIPMAP support for volume textures\n"); + return; + } + + /* mipmaps when D3DUSAGE_AUTOGENMIPMAP is set */ + mipmaps = 0; + hr = D3DXCheckVolumeTextureRequirements(device, NULL, NULL,NULL, &mipmaps, D3DUSAGE_AUTOGENMIPMAP, NULL, D3DPOOL_DEFAULT); + ok(hr == D3D_OK, "D3DXCheckVolumeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK); + ok(mipmaps == 0, "Returned mipmaps %d, expected %d\n", mipmaps, 0); + mipmaps = 1; + hr = D3DXCheckVolumeTextureRequirements(device, NULL, NULL,NULL, &mipmaps, D3DUSAGE_AUTOGENMIPMAP, NULL, D3DPOOL_DEFAULT); + ok(hr == D3D_OK, "D3DXCheckVolumeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK); + ok(mipmaps == 1, "Returned mipmaps %d, expected %d\n", mipmaps, 1); + mipmaps = 3; + hr = D3DXCheckVolumeTextureRequirements(device, NULL, NULL,NULL, &mipmaps, D3DUSAGE_AUTOGENMIPMAP, NULL, D3DPOOL_DEFAULT); + ok(hr == D3D_OK, "D3DXCheckVolumeTextureRequirements returned %#x, expected %#x\n", hr, D3D_OK); + ok(mipmaps == 0, "Returned mipmaps %d, expected %d\n", mipmaps, 0); }
static void test_D3DXCreateTexture(IDirect3DDevice9 *device) diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c index 89cc078..377e4f6 100644 --- a/dlls/d3dx9_36/texture.c +++ b/dlls/d3dx9_36/texture.c @@ -436,6 +436,11 @@ HRESULT WINAPI D3DXCheckVolumeTextureRequirements(LPDIRECT3DDEVICE9 device, { if (!(caps.TextureCaps & D3DPTEXTURECAPS_MIPVOLUMEMAP)) *miplevels = 1; + else if ((usage & D3DUSAGE_AUTOGENMIPMAP)) + { + if (*miplevels > 1) + *miplevels = 0; + } else { UINT max_mipmaps = 1;