Module: wine Branch: master Commit: a73a892f46c027e1fedab513795eac3b12ba568a URL: https://source.winehq.org/git/wine.git/?a=commit;h=a73a892f46c027e1fedab5137...
Author: Paul Gofman gofmanp@gmail.com Date: Fri Nov 8 14:57:23 2019 +0300
wined3d: Use software decompression for converting from compressed format.
The motivation under this is not just supporting conversion between compressed formats. Currently fallback CPU blitter cannot convert from DXTn formats at all, this patch allows for that if software decompression function is available.
Signed-off-by: Paul Gofman gofmanp@gmail.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ddraw/tests/ddraw7.c | 2 +- dlls/wined3d/surface.c | 3 ++- dlls/wined3d/texture.c | 4 +++- 3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 13ddf623ee..1592d2e081 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -16626,7 +16626,7 @@ static void test_surface_format_conversion_alpha(void) {FMT_RGBX, rgbx_data, FMT_DXT2, dxt2_data, TRUE}, {FMT_RGBA, rgba_data, FMT_DXT3, dxt2_data}, {FMT_RGBX, rgbx_data, FMT_DXT3, dxt2_data, TRUE}, - {FMT_DXT1, dxt1_data, FMT_DXT2, dxt2_data, TRUE}, + {FMT_DXT1, dxt1_data, FMT_DXT2, dxt2_data}, {FMT_DXT1, dxt1_data, FMT_RGBA, rgba_data}, {FMT_DXT1, dxt1_data, FMT_RGBX, rgba_data}, {FMT_DXT3, dxt2_data, FMT_RGBA, rgba_data}, diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 5064fb917f..47f2e5e5f0 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -610,7 +610,8 @@ static struct wined3d_texture *surface_convert_format(struct wined3d_texture *sr if (!(conv = find_converter(src_format->id, dst_format->id)) && (!device->d3d_initialized || !is_identity_fixup(src_format->color_fixup) || src_format->conv_byte_count || !is_identity_fixup(dst_format->color_fixup) || dst_format->conv_byte_count - || (src_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_COMPRESSED))) + || ((src_format->flags[WINED3D_GL_RES_TYPE_TEX_2D] & WINED3DFMT_FLAG_COMPRESSED) + && !src_format->decompress))) { FIXME("Cannot find a conversion function from format %s to %s.\n", debug_d3dformat(src_format->id), debug_d3dformat(dst_format->id)); diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c index 17b71c5738..8d3c25cf15 100644 --- a/dlls/wined3d/texture.c +++ b/dlls/wined3d/texture.c @@ -2043,7 +2043,9 @@ static void wined3d_texture_gl_upload_data(struct wined3d_context *context, bo.addr += src_box->left * src_format->byte_count; }
- decompress = dst_texture->resource.format_flags & WINED3DFMT_FLAG_DECOMPRESS; + decompress = (dst_texture->resource.format_flags & WINED3DFMT_FLAG_DECOMPRESS) + || (src_format->decompress && src_format->id != dst_texture->resource.format->id); + if (src_format->upload || decompress) { const struct wined3d_format *compressed_format = src_format;