Mesa (main): gallium/util: add helper to clamp colors to valid range
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Dec 3 16:10:52 UTC 2021
Module: Mesa
Branch: main
Commit: fa1cd83fefb290a2da679261d8a0b558b1f69f1f
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=fa1cd83fefb290a2da679261d8a0b558b1f69f1f
Author: Juan A. Suarez Romero <jasuarez at igalia.com>
Date: Fri Oct 29 16:04:47 2021 +0200
gallium/util: add helper to clamp colors to valid range
v3 (Iago):
- Fix comment.
Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
Reviewed-by: Iago Toral Quiroga <itoral at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13409>
---
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
More information about the mesa-commit
mailing list