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 | 12 +++++++++--- dlls/d3dx9_36/d3dx9_private.h | 10 +--------- dlls/d3dx9_36/d3dx_helpers.c | 9 +++++++++ dlls/d3dx9_36/d3dx_helpers.h | 2 ++ dlls/d3dx9_36/texture.c | 2 +- 6 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/dlls/d3dx10_43/tests/d3dx10.c b/dlls/d3dx10_43/tests/d3dx10.c index 88bcb4784d3..49292c8982a 100644 --- a/dlls/d3dx10_43/tests/d3dx10.c +++ b/dlls/d3dx10_43/tests/d3dx10.c @@ -1096,7 +1096,7 @@ static const struct test_invalid_image_load_info D3DX10_DEFAULT, D3DX10_DEFAULT, D3DX10_DEFAULT, D3DX10_DEFAULT, D3DX10_DEFAULT, (D3D10_USAGE)D3DX10_DEFAULT, D3DX10_DEFAULT, D3DX10_DEFAULT, D3DX10_DEFAULT, D3DX10_DEFAULT, 7, D3DX10_DEFAULT }, - D3DERR_INVALIDCALL, D3DERR_INVALIDCALL, .todo_hr = TRUE, .todo_process_hr = TRUE + D3DERR_INVALIDCALL, D3DERR_INVALIDCALL }, /* Invalid mipfilter value, only validated if mips are generated. */ { diff --git a/dlls/d3dx10_43/texture.c b/dlls/d3dx10_43/texture.c index 10c939f5e4f..db33bd20a1f 100644 --- a/dlls/d3dx10_43/texture.c +++ b/dlls/d3dx10_43/texture.c @@ -660,12 +660,18 @@ HRESULT load_texture_data(const void *data, SIZE_T size, D3DX10_IMAGE_LOAD_INFO FIXME("load_info->CpuAccessFlags is ignored.\n"); if (load_info->MiscFlags != D3DX10_DEFAULT) FIXME("load_info->MiscFlags is ignored.\n"); - if (load_info->Filter != D3DX10_DEFAULT) - FIXME("load_info->Filter is ignored.\n"); if (load_info->MipFilter != D3DX10_DEFAULT) FIXME("load_info->MipFilter is ignored.\n");
*resource_data = NULL; + if (!load_info->Filter || load_info->Filter == D3DX10_DEFAULT) + load_info->Filter = D3DX10_FILTER_LINEAR; + if (FAILED(hr = d3dx_validate_filter(load_info->Filter))) + { + ERR("Invalid filter argument %#x.\n", load_info->Filter); + return hr; + } + hr = d3dx_image_init(data, size, &image, 0, D3DX_IMAGE_SUPPORT_DXT10); if (FAILED(hr)) return E_FAIL; @@ -748,7 +754,7 @@ HRESULT load_texture_data(const void *data, SIZE_T size, D3DX10_IMAGE_LOAD_INFO set_d3dx_pixels(&dst_pixels, pixels_buffer, dst_row_pitch, dst_slice_pitch, NULL, dst_size.width, dst_size.height, dst_size.depth, &unaligned_rect);
- hr = d3dx_load_pixels_from_pixels(&dst_pixels, fmt_desc, &src_pixels, src_desc, D3DX10_FILTER_POINT, 0); + hr = d3dx_load_pixels_from_pixels(&dst_pixels, fmt_desc, &src_pixels, src_desc, load_info->Filter, 0); if (FAILED(hr)) break;
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h index a52636298be..d47c3e8cb70 100644 --- a/dlls/d3dx9_36/d3dx9_private.h +++ b/dlls/d3dx9_36/d3dx9_private.h @@ -35,20 +35,12 @@ #define FOURCC_TX_1 0x54580100
#define D3DX9_FILTER_INVALID_BITS 0xff80fff8 -static inline HRESULT d3dx9_validate_filter(uint32_t filter) -{ - if ((filter & D3DX9_FILTER_INVALID_BITS) || !(filter & 0x7) || ((filter & 0x7) > D3DX_FILTER_BOX)) - return D3DERR_INVALIDCALL; - - return D3D_OK; -} - static inline HRESULT d3dx9_handle_load_filter(DWORD *filter) { if (*filter == D3DX_DEFAULT) *filter = D3DX_FILTER_TRIANGLE | D3DX_FILTER_DITHER;
- return d3dx9_validate_filter(*filter); + return d3dx_validate_filter(*filter); }
BOOL d3dximage_info_from_d3dx_image(D3DXIMAGE_INFO *info, struct d3dx_image *image); diff --git a/dlls/d3dx9_36/d3dx_helpers.c b/dlls/d3dx9_36/d3dx_helpers.c index 83c9befb08b..3e1bda400d7 100644 --- a/dlls/d3dx9_36/d3dx_helpers.c +++ b/dlls/d3dx9_36/d3dx_helpers.c @@ -53,6 +53,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3dx); #define D3DX_FILTER_SRGB_OUT 0x00400000 #define D3DX_FILTER_SRGB 0x00600000
+#define D3DX_FILTER_INVALID_BITS 0xff80fff8 +HRESULT d3dx_validate_filter(uint32_t filter) +{ + if ((filter & D3DX_FILTER_INVALID_BITS) || !(filter & 0x7) || ((filter & 0x7) > D3DX_FILTER_BOX)) + return D3DERR_INVALIDCALL; + + return D3D_OK; +} + HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT, IWICImagingFactory**);
/************************************************************ diff --git a/dlls/d3dx9_36/d3dx_helpers.h b/dlls/d3dx9_36/d3dx_helpers.h index 42b40c1c279..83c213db311 100644 --- a/dlls/d3dx9_36/d3dx_helpers.h +++ b/dlls/d3dx9_36/d3dx_helpers.h @@ -394,6 +394,8 @@ static inline BOOL is_conversion_to_supported(const struct pixel_format_desc *fo && !is_unknown_format(format); }
+HRESULT d3dx_validate_filter(uint32_t filter); + const struct pixel_format_desc *get_d3dx_pixel_format_info(enum d3dx_pixel_format_id format);
void format_to_d3dx_color(const struct pixel_format_desc *format, const BYTE *src, const PALETTEENTRY *palette, diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c index 2896bd1f2b6..0873b686497 100644 --- a/dlls/d3dx9_36/texture.c +++ b/dlls/d3dx9_36/texture.c @@ -59,7 +59,7 @@ HRESULT WINAPI D3DXFilterTexture(IDirect3DBaseTexture9 *texture, if (!texture) return D3DERR_INVALIDCALL;
- if (filter != D3DX_DEFAULT && FAILED(hr = d3dx9_validate_filter(filter))) + if (filter != D3DX_DEFAULT && FAILED(hr = d3dx_validate_filter(filter))) return hr;
if (srclevel == D3DX_DEFAULT)