From fa1cd83fefb290a2da679261d8a0b558b1f69f1f Mon Sep 17 00:00:00 2001 From: "Juan A. Suarez Romero" Date: Fri, 29 Oct 2021 16:04:47 +0200 Subject: [PATCH] gallium/util: add helper to clamp colors to valid range v3 (Iago): - Fix comment. Signed-off-by: Juan A. Suarez Romero Reviewed-by: Iago Toral Quiroga Part-of: --- src/gallium/auxiliary/util/u_helpers.c | 27 ++++++++++++++++++++++++++ src/gallium/auxiliary/util/u_helpers.h | 3 +++ 2 files changed, 30 insertions(+) diff --git a/src/gallium/auxiliary/util/u_helpers.c b/src/gallium/auxiliary/util/u_helpers.c index dd415b9909f..e0e91aab462 100644 --- a/src/gallium/auxiliary/util/u_helpers.c +++ b/src/gallium/auxiliary/util/u_helpers.c @@ -25,6 +25,7 @@ * **************************************************************************/ +#include "util/format/format_utils.h" #include "util/u_cpu_detect.h" #include "util/u_helpers.h" #include "util/u_inlines.h" @@ -518,3 +519,29 @@ util_init_pipe_vertex_state(struct pipe_screen *screen, state->input.elements[i] = elements[i]; state->input.full_velem_mask = full_velem_mask; } + +/** + * Clamp color value to format range. + */ +union pipe_color_union +util_clamp_color(enum pipe_format format, + const union pipe_color_union *color) +{ + union pipe_color_union clamp_color = *color; + int i; + + for (i = 0; i < util_format_get_nr_components(format); i++) { + uint8_t bits = util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, i); + + if (util_format_is_unorm(format)) + clamp_color.ui[i] = _mesa_unorm_to_unorm(clamp_color.ui[i], bits, bits); + else if (util_format_is_snorm(format)) + clamp_color.i[i] = _mesa_snorm_to_snorm(clamp_color.i[i], bits, bits); + else if (util_format_is_pure_uint(format)) + clamp_color.ui[i] = _mesa_unsigned_to_unsigned(clamp_color.ui[i], bits); + else if (util_format_is_pure_sint(format)) + clamp_color.i[i] = _mesa_signed_to_signed(clamp_color.i[i], bits); + } + + return clamp_color; +} diff --git a/src/gallium/auxiliary/util/u_helpers.h b/src/gallium/auxiliary/util/u_helpers.h index 9246d306ed8..299c6798088 100644 --- a/src/gallium/auxiliary/util/u_helpers.h +++ b/src/gallium/auxiliary/util/u_helpers.h @@ -130,6 +130,9 @@ util_init_pipe_vertex_state(struct pipe_screen *screen, uint32_t full_velem_mask, struct pipe_vertex_state *state); +union pipe_color_union util_clamp_color(enum pipe_format format, + const union pipe_color_union *color); + #ifdef __cplusplus } #endif