main/format: skip format conversion if src and dst format are equal

Fixes 'KHR-GL45.copy_image.functional' on Nouveau and i965.

v2: (by Kenneth Graunke)
    Rewrite patch according to Jason Ekstrand's review feedback.
    This makes it handle differing strides, which i965 needed.

Signed-off-by: Karol Herbst <karolherbst@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
This commit is contained in:
Karol Herbst 2017-08-16 20:32:42 +02:00 committed by Kenneth Graunke
parent 51e7879544
commit eab078f132
1 changed files with 14 additions and 0 deletions

View File

@ -312,6 +312,20 @@ _mesa_format_convert(void *void_dst, uint32_t dst_format, size_t dst_stride,
* enable it for specific combinations that are known to work.
*/
if (!rebase_swizzle) {
/* Do a direct memcpy where possible */
if ((dst_format_is_mesa_array_format &&
src_format_is_mesa_array_format &&
src_array_format == dst_array_format) ||
src_format == dst_format) {
int format_size = _mesa_get_format_bytes(src_format);
for (row = 0; row < height; row++) {
memcpy(dst, src, width * format_size);
src += src_stride;
dst += dst_stride;
}
return;
}
/* Handle the cases where we can directly unpack */
if (!src_format_is_mesa_array_format) {
if (dst_array_format == RGBA32_FLOAT) {