Previously, [SU]SCALED formats would hit the integer path and we would
generate:
((uint32_t)CLAMP(src[i], min, max)) & MASK
This is fine for unsigned scaled formats. However, for signed formats,
a negative float value cast to an unsigned integer yields undefined
results. On x86, it implicitly clamps to 0. This change makes us
generate:
((uint32_t)(int32_t)CLAMP(src[i], min, max)) & MASK
hich gets us correct casting.
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28793>