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>
This commit is contained in:
parent
3c9b843175
commit
a73a892f46
|
@ -16626,7 +16626,7 @@ static void test_surface_format_conversion_alpha(void)
|
||||||
{FMT_RGBX, rgbx_data, FMT_DXT2, dxt2_data, TRUE},
|
{FMT_RGBX, rgbx_data, FMT_DXT2, dxt2_data, TRUE},
|
||||||
{FMT_RGBA, rgba_data, FMT_DXT3, dxt2_data},
|
{FMT_RGBA, rgba_data, FMT_DXT3, dxt2_data},
|
||||||
{FMT_RGBX, rgbx_data, FMT_DXT3, dxt2_data, TRUE},
|
{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_RGBA, rgba_data},
|
||||||
{FMT_DXT1, dxt1_data, FMT_RGBX, rgba_data},
|
{FMT_DXT1, dxt1_data, FMT_RGBX, rgba_data},
|
||||||
{FMT_DXT3, dxt2_data, FMT_RGBA, rgba_data},
|
{FMT_DXT3, dxt2_data, FMT_RGBA, rgba_data},
|
||||||
|
|
|
@ -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
|
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(src_format->color_fixup) || src_format->conv_byte_count
|
||||||
|| !is_identity_fixup(dst_format->color_fixup) || dst_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",
|
FIXME("Cannot find a conversion function from format %s to %s.\n",
|
||||||
debug_d3dformat(src_format->id), debug_d3dformat(dst_format->id));
|
debug_d3dformat(src_format->id), debug_d3dformat(dst_format->id));
|
||||||
|
|
|
@ -2043,7 +2043,9 @@ static void wined3d_texture_gl_upload_data(struct wined3d_context *context,
|
||||||
bo.addr += src_box->left * src_format->byte_count;
|
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)
|
if (src_format->upload || decompress)
|
||||||
{
|
{
|
||||||
const struct wined3d_format *compressed_format = src_format;
|
const struct wined3d_format *compressed_format = src_format;
|
||||||
|
|
Loading…
Reference in New Issue