diff options
author | Karol Herbst <[email protected]> | 2017-08-16 20:32:42 +0200 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2017-10-10 15:06:17 -0700 |
commit | eab078f1321cbd6b292c88fe1770dc1b24261514 (patch) | |
tree | 348a2895afe8253fa5678fa905a75eb2cc953cf7 /src/mesa/main | |
parent | 51e7879544728e22bed74ea46437638856c8eb55 (diff) |
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 <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/format_utils.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/mesa/main/format_utils.c b/src/mesa/main/format_utils.c index d16d69c3795..31580750bd4 100644 --- a/src/mesa/main/format_utils.c +++ b/src/mesa/main/format_utils.c @@ -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) { |