radv: use util_float_to_half_rtz
authorChristopher Egert <cme3000@gmail.com>
Fri, 15 May 2020 14:41:15 +0000 (16:41 +0200)
committerBas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Sat, 16 May 2020 23:12:59 +0000 (01:12 +0200)
Since commit 8b8af6d398a94cb07015c695fdfdb5c157aa72cf there is a
performance regression in dirt 4 on picasso APUs.

The game ends up feeding a large value into this which overflows on the
conversion to 16bit float. With the old implementation (which now lives
in util_float_to_half_rtz) it would be clamped to inf-1, while the new
one returns inf. This causes a performance hit somehow at some point
down the line.

Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Fixes: 8b8af6d398a "gallium/util: Switch util_float_to_half to _mesa_float_to_half()'s impl."
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5062>

src/amd/vulkan/radv_formats.c

index a790459c900c6054d19795fb297430587974f569..badfcc4f72fbd92c4f049777b7edd2976e0f354f 100644 (file)
@@ -1060,7 +1060,7 @@ bool radv_format_pack_clear_color(VkFormat format,
                        if (channel->size == 32) {
                                memcpy(&v, &value->float32[c], 4);
                        } else if(channel->size == 16) {
-                               v = util_float_to_half(value->float32[c]);
+                               v = util_float_to_half_rtz(value->float32[c]);
                        } else {
                                fprintf(stderr, "failed to fast clear for unhandled float size in format %d\n", format);
                                return false;