diff options
Diffstat (limited to 'src/gallium/auxiliary/util/u_pack_color.h')
-rw-r--r-- | src/gallium/auxiliary/util/u_pack_color.h | 41 |
1 files changed, 28 insertions, 13 deletions
diff --git a/src/gallium/auxiliary/util/u_pack_color.h b/src/gallium/auxiliary/util/u_pack_color.h index a2e0f26686..43eb0153ee 100644 --- a/src/gallium/auxiliary/util/u_pack_color.h +++ b/src/gallium/auxiliary/util/u_pack_color.h @@ -37,6 +37,7 @@ #include "pipe/p_compiler.h" #include "pipe/p_format.h" +#include "util/u_format.h" #include "util/u_math.h" @@ -128,11 +129,18 @@ util_pack_color_ub(ubyte r, ubyte g, ubyte b, ubyte a, } return; - /* XXX lots more cases to add */ + /* Handle other cases with a generic function. + */ default: - uc->ui = 0; /* keep compiler happy */ - debug_print_format("gallium: unhandled format in util_pack_color_ub()", format); - assert(0); + { + ubyte src[4]; + + src[0] = r; + src[1] = g; + src[2] = b; + src[3] = a; + util_format_write_4ub(format, src, 0, uc, 0, 0, 0, 1, 1); + } } } @@ -282,11 +290,18 @@ util_unpack_color_ub(enum pipe_format format, union util_color *uc, } return; - /* XXX lots more cases to add */ + /* Handle other cases with a generic function. + */ default: - debug_print_format("gallium: unhandled format in util_unpack_color_ub()", - format); - assert(0); + { + ubyte dst[4]; + + util_format_read_4ub(format, dst, 0, uc, 0, 0, 0, 1, 1); + *r = dst[0]; + *g = dst[1]; + *b = dst[2]; + *a = dst[3]; + } } } @@ -302,7 +317,7 @@ util_pack_color(const float rgba[4], enum pipe_format format, union util_color * ubyte b = 0; ubyte a = 0; - if (pf_size_x(format) <= 8) { + if (util_format_get_component_bits(format, UTIL_FORMAT_COLORSPACE_RGB, 0) <= 8) { /* format uses 8-bit components or less */ r = float_to_ubyte(rgba[0]); g = float_to_ubyte(rgba[1]); @@ -382,11 +397,11 @@ util_pack_color(const float rgba[4], enum pipe_format format, union util_color * uc->f[2] = rgba[2]; } return; - /* XXX lots more cases to add */ + + /* Handle other cases with a generic function. + */ default: - uc->ui = 0; /* keep compiler happy */ - debug_print_format("gallium: unhandled format in util_pack_color()", format); - assert(0); + util_format_write_4f(format, rgba, 0, uc, 0, 0, 0, 1, 1); } } |