radv: use util_float_to_half_rtz

Since commit 8b8af6d398 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: 8b8af6d398 "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>
(cherry picked from commit 78615dcca1)
This commit is contained in:
Christopher Egert 2020-05-15 16:41:15 +02:00 committed by Eric Engestrom
parent fa18ad0f64
commit d358af0503
2 changed files with 2 additions and 2 deletions

View file

@ -1822,7 +1822,7 @@
"description": "radv: use util_float_to_half_rtz",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "8b8af6d398a94cb07015c695fdfdb5c157aa72cf"
},

View 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;