From: Connor McAdams cmcadams@codeweavers.com
Signed-off-by: Connor McAdams cmcadams@codeweavers.com --- dlls/d3dx10_43/tests/d3dx10.c | 2 +- dlls/d3dx10_43/texture.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/dlls/d3dx10_43/tests/d3dx10.c b/dlls/d3dx10_43/tests/d3dx10.c index 486e77ca549..56897730f6c 100644 --- a/dlls/d3dx10_43/tests/d3dx10.c +++ b/dlls/d3dx10_43/tests/d3dx10.c @@ -4289,7 +4289,7 @@ static void test_create_texture(void) for (mip_level = 0; mip_level < 4; ++mip_level) { winetest_push_context("MipLevel %u", mip_level); - todo_wine_if(i && mip_level != 3) check_texture_sub_resource_u32(tex_2d, mip_level, NULL, + check_texture_sub_resource_u32(tex_2d, mip_level, NULL, dds_24bit_8_8_mip_level_expected[min(3, mip_level + i)]); winetest_pop_context(); } diff --git a/dlls/d3dx10_43/texture.c b/dlls/d3dx10_43/texture.c index 1c9f303929a..0b71556f870 100644 --- a/dlls/d3dx10_43/texture.c +++ b/dlls/d3dx10_43/texture.c @@ -648,8 +648,6 @@ HRESULT load_texture_data(const void *data, SIZE_T size, D3DX10_IMAGE_LOAD_INFO if (!data || !size) return E_FAIL;
- if (load_info->FirstMipLevel != D3DX10_DEFAULT) - FIXME("load_info->FirstMipLevel is ignored.\n"); if (load_info->Usage != D3DX10_DEFAULT) FIXME("load_info->Usage is ignored.\n"); if (load_info->BindFlags != D3DX10_DEFAULT) @@ -688,6 +686,9 @@ HRESULT load_texture_data(const void *data, SIZE_T size, D3DX10_IMAGE_LOAD_INFO goto end; }
+ if (load_info->FirstMipLevel == D3DX10_DEFAULT || (load_info->FirstMipLevel >= img_info.MipLevels)) + load_info->FirstMipLevel = 0; + if (load_info->Format == D3DX10_DEFAULT || load_info->Format == DXGI_FORMAT_FROM_FILE) load_info->Format = img_info.Format; fmt_desc = get_d3dx_pixel_format_info(d3dx_pixel_format_id_from_dxgi_format(load_info->Format)); @@ -724,7 +725,7 @@ HRESULT load_texture_data(const void *data, SIZE_T size, D3DX10_IMAGE_LOAD_INFO goto end;
src_desc = get_d3dx_pixel_format_info(image.format); - loaded_mip_levels = min(img_info.MipLevels, load_info->MipLevels); + loaded_mip_levels = min((img_info.MipLevels - load_info->FirstMipLevel), load_info->MipLevels); for (i = 0; i < img_info.ArraySize; ++i) { struct volume dst_size = { load_info->Width, load_info->Height, load_info->Depth }; @@ -735,7 +736,7 @@ HRESULT load_texture_data(const void *data, SIZE_T size, D3DX10_IMAGE_LOAD_INFO const RECT unaligned_rect = { 0, 0, dst_size.width, dst_size.height }; struct d3dx_pixels src_pixels, dst_pixels;
- hr = d3dx_image_get_pixels(&image, i, j, &src_pixels); + hr = d3dx_image_get_pixels(&image, i, j + load_info->FirstMipLevel, &src_pixels); if (FAILED(hr)) goto end;