From: Matteo Bruni mbruni@codeweavers.com
--- dlls/d3dx9_36/skin.c | 9 +---- dlls/d3dx9_36/tests/mesh.c | 78 ++++++++++++++++++++++++++------------ 2 files changed, 55 insertions(+), 32 deletions(-)
diff --git a/dlls/d3dx9_36/skin.c b/dlls/d3dx9_36/skin.c index cb8e3beda9b..72655a7b102 100644 --- a/dlls/d3dx9_36/skin.c +++ b/dlls/d3dx9_36/skin.c @@ -403,12 +403,6 @@ static HRESULT WINAPI d3dx9_skin_info_UpdateSkinnedMesh(ID3DXSkinInfo *iface, co TRACE("iface %p, bone_transforms %p, bone_inv_transpose_transforms %p, src_vertices %p, dst_vertices %p.\n", skin, bone_transforms, bone_inv_transpose_transforms, src_vertices, dst_vertices);
- if (bone_inv_transpose_transforms) - { - FIXME("Using inverse transforms is not supported, returning E_NOTIMPL.\n"); - return E_NOTIMPL; - } - for (unsigned int i = 0; i < skin->vertex_count; ++i) { for (const D3DVERTEXELEMENT9 *element = skin->vertex_declaration; element->Stream != 0xff; ++element) @@ -481,7 +475,8 @@ static HRESULT WINAPI d3dx9_skin_info_UpdateSkinnedMesh(ID3DXSkinInfo *iface, co return E_NOTIMPL; }
- D3DXVec3TransformNormal(&normal, src_element, &bone_transforms[i]); + D3DXVec3TransformNormal(&normal, src_element, bone_inv_transpose_transforms + ? &bone_inv_transpose_transforms[i] : &bone_transforms[i]); dst_vec3->x += weight * normal.x; dst_vec3->y += weight * normal.y; dst_vec3->z += weight * normal.z; diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c index 8dcf5075466..e3bee171fb3 100644 --- a/dlls/d3dx9_36/tests/mesh.c +++ b/dlls/d3dx9_36/tests/mesh.c @@ -5465,6 +5465,34 @@ static void test_create_skin_info(void) ok(hr == D3DERR_INVALIDCALL, "Expected D3DERR_INVALIDCALL, got %#lx\n", hr); }
+struct vertex_texcoord +{ + D3DXVECTOR3 position; + D3DXVECTOR3 normal; + D3DXVECTOR2 texcoord; +}; + +static void test_transformed_mesh(const struct vertex_texcoord vertices[4], const struct vertex_texcoord expected[4]) +{ + for (unsigned int i = 0; i < 4; ++i) + { + winetest_push_context("vertex %u", i); + ok(compare_vec3(vertices[i].position, expected[i].position), + "Expected position (%.8e, %.8e, %.8e), got (%.8e, %.8e, %.8e).\n", + expected[i].position.x, expected[i].position.y, expected[i].position.z, + vertices[i].position.x, vertices[i].position.y, vertices[i].position.z); + ok(compare_vec3(vertices[i].normal, expected[i].normal), + "Expected normal (%.8e, %.8e, %.8e), got (%.8e, %.8e, %.8e).\n", + expected[i].normal.x, expected[i].normal.y, expected[i].normal.z, + vertices[i].normal.x, vertices[i].normal.y, vertices[i].normal.z); + ok(compare_vec2(vertices[i].texcoord, expected[i].texcoord), + "Expected texcoord (%.8e, %.8e), got (%.8e, %.8e).\n", + expected[i].texcoord.x, expected[i].texcoord.y, + vertices[i].texcoord.x, vertices[i].texcoord.y); + winetest_pop_context(); + } +} + static void test_update_skinned_mesh(void) { static const float bone0_weights[2] = {1.0f, 0.5f}, bone1_weights[2] = {1.0f, 0.5f}; @@ -5500,13 +5528,7 @@ static void test_update_skinned_mesh(void) }}}, };
- static const struct vertex - { - D3DXVECTOR3 position; - D3DXVECTOR3 normal; - D3DXVECTOR2 texcoord; - } - src_vertices[4] = + static const struct vertex_texcoord src_vertices[4] = { {{ 1.0f, 1.0f, 1.0f}, { 1.0f, 0.0f, 0.0f}, { 0.2f, 0.2f}}, {{ 1.0f, 1.0f, -1.0f}, { 0.0f, 1.0f, 0.0f}, { 0.2f, 0.4f}}, @@ -5519,10 +5541,19 @@ static void test_update_skinned_mesh(void) {{ 3.0f, 3.0f, 3.0f}, { 0.0f, 1.0f, 0.0f}, { 0.2f, 0.4f}}, {{-6.0f, -5.0f, 5.0f}, { 0.0f, 0.0f, 1.0f}, { 0.4f, 0.2f}}, {{-2.5f, -2.0f, 3.0f}, {-1.5f, 0.0f, 0.0f}, { 0.4f, 0.4f}}, + }, + expect_vertices2[4] = + { + {{ 0.0f, 0.0f, 0.0f}, { 0.0f, 0.0f, 0.0f}, { 0.2f, 0.2f}}, + {{ 3.0f, 3.0f, 3.0f}, { 0.0f, 1.0f, 0.0f}, { 0.2f, 0.4f}}, + {{-6.0f, -5.0f, 5.0f}, { 0.0f, 0.0f, 1.0f}, { 0.4f, 0.2f}}, + {{-2.5f, -2.0f, 3.0f}, {-0.75f, 0.0f, 0.0f}, { 0.4f, 0.4f}}, };
- struct vertex dst_vertices[4]; + struct vertex_texcoord dst_vertices[4]; ID3DXSkinInfo *skin_info; + D3DMATRIX inv_transp_mat[2]; + unsigned int i; HRESULT hr;
static const D3DVERTEXELEMENT9 decl_elements[] = @@ -5546,25 +5577,22 @@ static void test_update_skinned_mesh(void) ok(hr == D3D_OK, "Got hr %#lx.\n", hr); skin_info->lpVtbl->SetBoneOffsetMatrix(skin_info, 1, &bone_matrices[1]); ok(hr == D3D_OK, "Got hr %#lx.\n", hr); - skin_info->lpVtbl->UpdateSkinnedMesh(skin_info, update_matrices, NULL, src_vertices, dst_vertices); - ok(hr == D3D_OK, "Got hr %#lx.\n", hr); - for (unsigned int i = 0; i < 4; ++i) + for (i = 0; i < ARRAY_SIZE(update_matrices); ++i) { - winetest_push_context("vertex %u", i); - ok(compare_vec3(dst_vertices[i].position, expect_vertices[i].position), - "Expected position (%.8e, %.8e, %.8e), got (%.8e, %.8e, %.8e).\n", - expect_vertices[i].position.x, expect_vertices[i].position.y, expect_vertices[i].position.z, - dst_vertices[i].position.x, dst_vertices[i].position.y, dst_vertices[i].position.z); - ok(compare_vec3(dst_vertices[i].normal, expect_vertices[i].normal), - "Expected normal (%.8e, %.8e, %.8e), got (%.8e, %.8e, %.8e).\n", - expect_vertices[i].normal.x, expect_vertices[i].normal.y, expect_vertices[i].normal.z, - dst_vertices[i].normal.x, dst_vertices[i].normal.y, dst_vertices[i].normal.z); - ok(compare_vec2(dst_vertices[i].texcoord, expect_vertices[i].texcoord), - "Expected texcoord (%.8e, %.8e), got (%.8e, %.8e).\n", - expect_vertices[i].texcoord.x, expect_vertices[i].texcoord.y, - dst_vertices[i].texcoord.x, dst_vertices[i].texcoord.y); - winetest_pop_context(); + D3DXMatrixTranspose(&inv_transp_mat[i], &update_matrices[i]); + D3DXMatrixInverse(&inv_transp_mat[i], NULL, &inv_transp_mat[i]); } + winetest_push_context("NULL inverse transposed matrix"); + hr = skin_info->lpVtbl->UpdateSkinnedMesh(skin_info, update_matrices, NULL, src_vertices, dst_vertices); + ok(hr == D3D_OK, "Got hr %#lx.\n", hr); + test_transformed_mesh(dst_vertices, expect_vertices); + winetest_pop_context(); + winetest_push_context("valid inverse transposed matrix"); + hr = skin_info->lpVtbl->UpdateSkinnedMesh(skin_info, update_matrices, inv_transp_mat, src_vertices, dst_vertices); + ok(hr == D3D_OK, "Got hr %#lx.\n", hr); + test_transformed_mesh(dst_vertices, expect_vertices2); + winetest_pop_context(); + skin_info->lpVtbl->Release(skin_info); }
From: Matteo Bruni mbruni@codeweavers.com
--- dlls/d3dx9_36/tests/core.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/dlls/d3dx9_36/tests/core.c b/dlls/d3dx9_36/tests/core.c index c3b80028f43..476a8c0b925 100644 --- a/dlls/d3dx9_36/tests/core.c +++ b/dlls/d3dx9_36/tests/core.c @@ -1271,6 +1271,13 @@ static void check_ID3DXRenderToSurface(IDirect3DDevice9 *device, UINT width, UIN
/* viewport */ hr = ID3DXRenderToSurface_BeginScene(render, surface, &viewport); + if (FAILED(hr)) + { + skip("Failed to create ID3DXRenderToSurface\n"); + check_release((IUnknown *)surface, 0); + ID3DXRenderToSurface_Release(render); + return; + } ok(hr == D3D_OK, "ID3DXRenderToSurface::BeginScene returned %#lx, expected %#lx\n", hr, D3D_OK); check_ref((IUnknown *)surface, 2); if (SUCCEEDED(hr)) ID3DXRenderToSurface_EndScene(render, D3DX_FILTER_NONE);
From: Matteo Bruni mbruni@codeweavers.com
For 32-bit clang Linux builds. Also tidy up the test a bit. --- dlls/d3dx9_36/tests/math.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-)
diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 638d2bddc45..b8b7cf99b83 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -3687,8 +3687,8 @@ static void test_D3DXSHEvalDirectionalLight(void) 11494.852539f, -6293.858398f, -377.377899f, 1283.391479f, -449.749817f, 45.826328f, }; const struct { - float *red_in, *green_in, *blue_in; - const float *red_out, *green_out, *blue_out; + float *red_out, *green_out, *blue_out; + const float *red_expected, *green_expected, *blue_expected; float roffset, goffset, boffset; } test[] = @@ -3704,7 +3704,7 @@ static void test_D3DXSHEvalDirectionalLight(void) { rout, NULL, NULL, table, NULL, NULL, 1.01f, 0.0f, 0.0f, }, };
- dir.x = 1.1f; dir.y= 1.2f; dir.z = 2.76f; + dir.x = 1.1f; dir.y = 1.2f; dir.z = 2.76f;
for (l = 0; l < ARRAY_SIZE(test); ++l) { @@ -3712,16 +3712,16 @@ static void test_D3DXSHEvalDirectionalLight(void)
for (order = D3DXSH_MINORDER; order <= D3DXSH_MAXORDER; order++) { - red_out = test[l].red_in; - green_out = test[l].green_in; - blue_out = test[l].blue_in; + red_out = test[l].red_out; + green_out = test[l].green_out; + blue_out = test[l].blue_out;
for (j = 0; j < ARRAY_SIZE(rout); ++j) { red_out[j] = 1.01f + j; - if ( green_out ) + if (green_out) green_out[j] = 1.02f + j; - if ( blue_out ) + if (blue_out) blue_out[j] = 1.03f + j; }
@@ -3730,32 +3730,32 @@ static void test_D3DXSHEvalDirectionalLight(void)
for (j = 0; j < ARRAY_SIZE(rout); ++j) { - if ( j >= order * order ) + if (j >= order * order) expected = j + test[l].roffset; else - expected = test[l].red_out[startindex + j]; + expected = test[l].red_expected[startindex + j]; equal = compare_float(expected, red_out[j], 8); ok(equal, "Red: case %u, order %u: expected[%u] = %.8e, received %.8e.\n", l, order, j, expected, red_out[j]);
- if ( green_out ) + if (green_out) { - if ( j >= order * order ) + if (j >= order * order) expected = j + test[l].goffset; else - expected = test[l].green_out[startindex + j]; + expected = test[l].green_expected[startindex + j]; equal = compare_float(expected, green_out[j], 8); ok(equal, "Green: case %u, order %u: expected[%u] = %.8e, received %.8e.\n", l, order, j, expected, green_out[j]); }
- if ( blue_out ) + if (blue_out) { - if ( j >= order * order ) + if (j >= order * order) expected = j + test[l].boffset; else - expected = test[l].blue_out[startindex + j]; - equal = compare_float(expected, blue_out[j], 4); + expected = test[l].blue_expected[startindex + j]; + equal = compare_float(expected, blue_out[j], 8); ok(equal, "Blue: case %u, order %u: expected[%u] = %.8e, received %.8e.\n", l, order, j, expected, blue_out[j]); }
From: Matteo Bruni mbruni@codeweavers.com
--- dlls/d3dx9_36/tests/texture.c | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/dlls/d3dx9_36/tests/texture.c b/dlls/d3dx9_36/tests/texture.c index ed3ddd07e53..f3f45a8eacd 100644 --- a/dlls/d3dx9_36/tests/texture.c +++ b/dlls/d3dx9_36/tests/texture.c @@ -638,7 +638,7 @@ static void test_D3DXCheckTextureRequirements(IDirect3DDevice9 *device) format = D3DFMT_CxV8U8; hr = D3DXCheckTextureRequirements(device, NULL, NULL, NULL, 0, &format, D3DPOOL_DEFAULT); ok(hr == D3D_OK, "Unexpected hr %#lx.\n", hr); - ok(format == expected, "Unexpected format %u.\n", format); + ok(format == expected, "Unexpected format %u, expected %u.\n", format, expected);
IDirect3D9_Release(d3d); } @@ -2184,13 +2184,15 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) { 0xffff0000, 0xff00ff00, 0xff0000ff, }; - HRESULT hr; struct surface_readback surface_rb; uint32_t miplevels, mip_level, i; IDirect3DTexture9 *texture; IDirect3DSurface9 *surface; D3DXIMAGE_INFO img_info; D3DSURFACE_DESC desc; + D3DFORMAT expected; + IDirect3D9 *d3d; + HRESULT hr;
hr = D3DXCreateTextureFromFileInMemoryEx(device, dds_16bit, sizeof(dds_16bit), D3DX_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, D3DFMT_UNKNOWN, D3DPOOL_DEFAULT, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL, &texture); @@ -2270,7 +2272,10 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) ok(hr == D3D_OK, "D3DXCreateTextureFromFileInMemoryEx returned %#lx, expected %#lx.\n", hr, D3D_OK); IDirect3DTexture9_GetSurfaceLevel(texture, 0, &surface); IDirect3DSurface9_GetDesc(surface, &desc); - ok(desc.Format == D3DFMT_X1R5G5B5, "Returned format %u, expected %u.\n", desc.Format, D3DFMT_X1R5G5B5); + IDirect3DDevice9_GetDirect3D(device, &d3d); + expected = SUCCEEDED(IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, D3DRTYPE_TEXTURE, D3DFMT_X1R5G5B5)) ? D3DFMT_X1R5G5B5 : D3DFMT_R5G6B5; + ok(desc.Format == expected, "Returned format %u, expected %u.\n", desc.Format, expected); IDirect3DSurface9_Release(surface); IDirect3DTexture9_Release(texture); hr = D3DXCreateTextureFromFileInMemoryEx(device, dds_16bit, sizeof(dds_16bit), @@ -2279,7 +2284,9 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) ok(hr == D3D_OK, "D3DXCreateTextureFromFileInMemoryEx returned %#lx, expected %#lx.\n", hr, D3D_OK); IDirect3DTexture9_GetSurfaceLevel(texture, 0, &surface); IDirect3DSurface9_GetDesc(surface, &desc); - ok(desc.Format == D3DFMT_A1R5G5B5, "Returned format %u, expected %u.\n", desc.Format, D3DFMT_A1R5G5B5); + expected = SUCCEEDED(IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, D3DRTYPE_TEXTURE, D3DFMT_A1R5G5B5)) ? D3DFMT_A1R5G5B5 : D3DFMT_R5G6B5; + ok(desc.Format == expected, "Returned format %u, expected %u.\n", desc.Format, expected); IDirect3DSurface9_Release(surface); IDirect3DTexture9_Release(texture); hr = D3DXCreateTextureFromFileInMemoryEx(device, dds_16bit, sizeof(dds_16bit), @@ -2288,7 +2295,9 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) ok(hr == D3D_OK, "D3DXCreateTextureFromFileInMemoryEx returned %#lx, expected %#lx.\n", hr, D3D_OK); IDirect3DTexture9_GetSurfaceLevel(texture, 0, &surface); IDirect3DSurface9_GetDesc(surface, &desc); - ok(desc.Format == D3DFMT_X1R5G5B5, "Returned format %u, expected %u.\n", desc.Format, D3DFMT_X1R5G5B5); + expected = SUCCEEDED(IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, D3DRTYPE_TEXTURE, D3DFMT_X1R5G5B5)) ? D3DFMT_X1R5G5B5 : D3DFMT_R5G6B5; + ok(desc.Format == expected, "Returned format %u, expected %u.\n", desc.Format, expected); IDirect3DSurface9_Release(surface); IDirect3DTexture9_Release(texture);
@@ -2326,7 +2335,9 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) ok(hr == D3D_OK, "D3DXCreateTextureFromFileInMemoryEx returned %#lx, expected %#lx.\n", hr, D3D_OK); IDirect3DTexture9_GetSurfaceLevel(texture, 0, &surface); IDirect3DSurface9_GetDesc(surface, &desc); - ok(desc.Format == D3DFMT_L8, "Returned format %u, expected %u.\n", desc.Format, D3DFMT_L8); + expected = SUCCEEDED(IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, D3DRTYPE_TEXTURE, D3DFMT_L8)) ? D3DFMT_L8 : D3DFMT_X8R8G8B8; + ok(desc.Format == expected, "Returned format %u, expected %u.\n", desc.Format, expected); IDirect3DSurface9_Release(surface); IDirect3DTexture9_Release(texture); hr = D3DXCreateTextureFromFileInMemoryEx(device, png_grayscale, sizeof(png_grayscale), @@ -2335,7 +2346,9 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) ok(hr == D3D_OK, "D3DXCreateTextureFromFileInMemoryEx returned %#lx, expected %#lx.\n", hr, D3D_OK); IDirect3DTexture9_GetSurfaceLevel(texture, 0, &surface); IDirect3DSurface9_GetDesc(surface, &desc); - ok(desc.Format == D3DFMT_A8L8, "Returned format %u, expected %u.\n", desc.Format, D3DFMT_A8L8); + expected = SUCCEEDED(IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, D3DRTYPE_TEXTURE, D3DFMT_A8L8)) ? D3DFMT_A8L8 : D3DFMT_A8R8G8B8; + ok(desc.Format == expected, "Returned format %u, expected %u.\n", desc.Format, expected); IDirect3DSurface9_Release(surface); IDirect3DTexture9_Release(texture); hr = D3DXCreateTextureFromFileInMemoryEx(device, png_grayscale, sizeof(png_grayscale), @@ -2344,7 +2357,9 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) ok(hr == D3D_OK, "D3DXCreateTextureFromFileInMemoryEx returned %#lx, expected %#lx.\n", hr, D3D_OK); IDirect3DTexture9_GetSurfaceLevel(texture, 0, &surface); IDirect3DSurface9_GetDesc(surface, &desc); - ok(desc.Format == D3DFMT_L8, "Returned format %u, expected %u.\n", desc.Format, D3DFMT_L8); + expected = SUCCEEDED(IDirect3D9_CheckDeviceFormat(d3d, D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, + D3DFMT_X8R8G8B8, 0, D3DRTYPE_TEXTURE, D3DFMT_L8)) ? D3DFMT_L8 : D3DFMT_X8R8G8B8; + ok(desc.Format == expected, "Returned format %u, expected %u.\n", desc.Format, expected); IDirect3DSurface9_Release(surface); IDirect3DTexture9_Release(texture);
@@ -2539,6 +2554,7 @@ static void test_D3DXCreateTextureFromFileInMemoryEx(IDirect3DDevice9 *device) check_texture_level_desc(texture, 0, D3DFMT_A16B16G16R16, D3DUSAGE_DYNAMIC, D3DPOOL_DEFAULT, 0, 0, 2, 2, FALSE); check_texture_level_desc(texture, 1, D3DFMT_A16B16G16R16, D3DUSAGE_DYNAMIC, D3DPOOL_DEFAULT, 0, 0, 1, 1, FALSE); IDirect3DTexture9_Release(texture); + IDirect3D9_Release(d3d); }
static void test_D3DXCreateCubeTextureFromFileInMemory(IDirect3DDevice9 *device)
From: Matteo Bruni mbruni@codeweavers.com
It seems to cause sporadic crashes on Windows 10. --- dlls/d3dx10_43/tests/d3dx10.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/dlls/d3dx10_43/tests/d3dx10.c b/dlls/d3dx10_43/tests/d3dx10.c index 88bcb4784d3..fcb8ae460e8 100644 --- a/dlls/d3dx10_43/tests/d3dx10.c +++ b/dlls/d3dx10_43/tests/d3dx10.c @@ -3824,19 +3824,22 @@ static void test_dxt10_dds_header_image_info(void) }
/* - * Image size (e.g, the size of the pixels) isn't validated, but header - * size is. + * Image size (e.g, the size of the pixels) isn't validated, while header + * size is. Even the latter sporadically crashes on native though. */ - dds.magic = MAKEFOURCC('D','D','S',' '); - set_dxt10_dds_header(&dds.header, tests[0].append_flags, tests[0].width, tests[0].height, - tests[0].depth, tests[0].mip_levels, tests[0].row_pitch, tests[0].caps, tests[0].caps2); - dds.dxt10 = tests[0].dxt10; + if (0) + { + dds.magic = MAKEFOURCC('D','D','S',' '); + set_dxt10_dds_header(&dds.header, tests[0].append_flags, tests[0].width, tests[0].height, + tests[0].depth, tests[0].mip_levels, tests[0].row_pitch, tests[0].caps, tests[0].caps2); + dds.dxt10 = tests[0].dxt10;
- hr = D3DX10GetImageInfoFromMemory(&dds, sizeof(dds) - 1, NULL, &info, NULL); - ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + hr = D3DX10GetImageInfoFromMemory(&dds, sizeof(dds) - 1, NULL, &info, NULL); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr);
- hr = D3DX10GetImageInfoFromMemory(&dds, sizeof(dds), NULL, &info, NULL); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = D3DX10GetImageInfoFromMemory(&dds, sizeof(dds), NULL, &info, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + } }
static void test_get_image_info(void)
From: Matteo Bruni mbruni@codeweavers.com
It seems to cause sporadic crashes on Windows 10. --- dlls/d3dx11_43/tests/d3dx11.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-)
diff --git a/dlls/d3dx11_43/tests/d3dx11.c b/dlls/d3dx11_43/tests/d3dx11.c index bb840bd80e5..58285cc493d 100644 --- a/dlls/d3dx11_43/tests/d3dx11.c +++ b/dlls/d3dx11_43/tests/d3dx11.c @@ -1314,19 +1314,22 @@ static void test_dxt10_dds_header_image_info(void) }
/* - * Image size (e.g, the size of the pixels) isn't validated, but header - * size is. + * Image size (e.g, the size of the pixels) isn't validated, while header + * size is. Even the latter sporadically crashes on native though. */ - dds.magic = MAKEFOURCC('D','D','S',' '); - set_dxt10_dds_header(&dds.header, tests[0].append_flags, tests[0].width, tests[0].height, - tests[0].depth, tests[0].mip_levels, tests[0].row_pitch, tests[0].caps, tests[0].caps2); - dds.dxt10 = tests[0].dxt10; + if (0) + { + dds.magic = MAKEFOURCC('D','D','S',' '); + set_dxt10_dds_header(&dds.header, tests[0].append_flags, tests[0].width, tests[0].height, + tests[0].depth, tests[0].mip_levels, tests[0].row_pitch, tests[0].caps, tests[0].caps2); + dds.dxt10 = tests[0].dxt10;
- hr = D3DX11GetImageInfoFromMemory(&dds, sizeof(dds) - 1, NULL, &info, NULL); - ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr); + hr = D3DX11GetImageInfoFromMemory(&dds, sizeof(dds) - 1, NULL, &info, NULL); + ok(hr == E_FAIL, "Unexpected hr %#lx.\n", hr);
- hr = D3DX11GetImageInfoFromMemory(&dds, sizeof(dds), NULL, &info, NULL); - ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + hr = D3DX11GetImageInfoFromMemory(&dds, sizeof(dds), NULL, &info, NULL); + ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); + } }
static void test_D3DX11GetImageInfoFromMemory(void)
This merge request was approved by Matteo Bruni.