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:
parent
51e7879544
commit
eab078f132
|
@ -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.
|
* enable it for specific combinations that are known to work.
|
||||||
*/
|
*/
|
||||||
if (!rebase_swizzle) {
|
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 */
|
/* Handle the cases where we can directly unpack */
|
||||||
if (!src_format_is_mesa_array_format) {
|
if (!src_format_is_mesa_array_format) {
|
||||||
if (dst_array_format == RGBA32_FLOAT) {
|
if (dst_array_format == RGBA32_FLOAT) {
|
||||||
|
|
Loading…
Reference in New Issue