mesa/main: add _mesa_unpack_s3tc

We treat sRGB formats as RGB, because we're unpacking to another sRGB
format.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Acked-by: Eric Engestrom <eric@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18180>
This commit is contained in:
Erik Faye-Lund 2022-08-10 13:36:36 +02:00 committed by Marge Bot
parent 5087ba3666
commit ac87b8a1eb
2 changed files with 55 additions and 0 deletions

View file

@ -40,6 +40,7 @@
#include "texstore.h"
#include "format_unpack.h"
#include "util/format_srgb.h"
#include "util/format/u_format_s3tc.h"
/**
@ -382,3 +383,49 @@ _mesa_get_dxt_fetch_func(mesa_format format)
return NULL;
}
}
extern void
_mesa_unpack_s3tc(uint8_t *dst_row,
unsigned dst_stride,
const uint8_t *src_row,
unsigned src_stride,
unsigned src_width,
unsigned src_height,
mesa_format format)
{
/* We treat sRGB formats as RGB, because we're unpacking to another sRGB
* format.
*/
switch (format) {
case MESA_FORMAT_RGB_DXT1:
case MESA_FORMAT_SRGB_DXT1:
util_format_dxt1_rgb_unpack_rgba_8unorm(dst_row, dst_stride,
src_row, src_stride,
src_width, src_height);
break;
case MESA_FORMAT_RGBA_DXT1:
case MESA_FORMAT_SRGBA_DXT1:
util_format_dxt1_rgba_unpack_rgba_8unorm(dst_row, dst_stride,
src_row, src_stride,
src_width, src_height);
break;
case MESA_FORMAT_RGBA_DXT3:
case MESA_FORMAT_SRGBA_DXT3:
util_format_dxt3_rgba_unpack_rgba_8unorm(dst_row, dst_stride,
src_row, src_stride,
src_width, src_height);
break;
case MESA_FORMAT_RGBA_DXT5:
case MESA_FORMAT_SRGBA_DXT5:
util_format_dxt5_rgba_unpack_rgba_8unorm(dst_row, dst_stride,
src_row, src_stride,
src_width, src_height);
break;
default:
unreachable("unexpected format");
}
}

View file

@ -47,5 +47,13 @@ _mesa_texstore_rgba_dxt5(TEXSTORE_PARAMS);
extern compressed_fetch_func
_mesa_get_dxt_fetch_func(mesa_format format);
extern void
_mesa_unpack_s3tc(uint8_t *dst_row,
unsigned dst_stride,
const uint8_t *src_row,
unsigned src_stride,
unsigned src_width,
unsigned src_height,
mesa_format format);
#endif /* TEXCOMPRESS_S3TC_H */