diff options
author | marha <marha@users.sourceforge.net> | 2011-09-16 08:36:51 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2011-09-16 08:36:51 +0200 |
commit | 18ae1470a8dbcfe369ddf0d7e17e0ea665251ccd (patch) | |
tree | ecf208df0badb85d34d35990d9194b5182411a10 /mesalib/src/gallium/auxiliary/util/u_format.c | |
parent | 4420369d700d9db1563f8647e1889c6a0972ea2c (diff) | |
download | vcxsrv-18ae1470a8dbcfe369ddf0d7e17e0ea665251ccd.tar.gz vcxsrv-18ae1470a8dbcfe369ddf0d7e17e0ea665251ccd.tar.bz2 vcxsrv-18ae1470a8dbcfe369ddf0d7e17e0ea665251ccd.zip |
git update libXext libXdmcp mesa xkeyboard-config 16 sep 2011
X11/extensions: removed files that are in multiple extension modules
Diffstat (limited to 'mesalib/src/gallium/auxiliary/util/u_format.c')
-rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_format.c | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/mesalib/src/gallium/auxiliary/util/u_format.c b/mesalib/src/gallium/auxiliary/util/u_format.c index 34922ab18..700382a0f 100644 --- a/mesalib/src/gallium/auxiliary/util/u_format.c +++ b/mesalib/src/gallium/auxiliary/util/u_format.c @@ -67,6 +67,100 @@ util_format_is_float(enum pipe_format format) } +/** + * Return the number of logical channels in the given format by + * examining swizzles. + * XXX this could be made into a public function if useful elsewhere. + */ +static unsigned +nr_logical_channels(const struct util_format_description *desc) +{ + boolean swizzle_used[UTIL_FORMAT_SWIZZLE_MAX]; + + memset(swizzle_used, 0, sizeof(swizzle_used)); + + swizzle_used[desc->swizzle[0]] = TRUE; + swizzle_used[desc->swizzle[1]] = TRUE; + swizzle_used[desc->swizzle[2]] = TRUE; + swizzle_used[desc->swizzle[3]] = TRUE; + + return (swizzle_used[UTIL_FORMAT_SWIZZLE_X] + + swizzle_used[UTIL_FORMAT_SWIZZLE_Y] + + swizzle_used[UTIL_FORMAT_SWIZZLE_Z] + + swizzle_used[UTIL_FORMAT_SWIZZLE_W]); +} + + +/** Test if the format contains RGB, but not alpha */ +boolean +util_format_is_rgb_no_alpha(enum pipe_format format) +{ + const struct util_format_description *desc = + util_format_description(format); + + if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || + desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && + nr_logical_channels(desc) == 3) { + return TRUE; + } + return FALSE; +} + + +boolean +util_format_is_luminance(enum pipe_format format) +{ + const struct util_format_description *desc = + util_format_description(format); + + if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || + desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && + desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[1] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[2] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[3] == UTIL_FORMAT_SWIZZLE_1) { + return TRUE; + } + return FALSE; +} + + +boolean +util_format_is_luminance_alpha(enum pipe_format format) +{ + const struct util_format_description *desc = + util_format_description(format); + + if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || + desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && + desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[1] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[2] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[3] == UTIL_FORMAT_SWIZZLE_Y) { + return TRUE; + } + return FALSE; +} + + +boolean +util_format_is_intensity(enum pipe_format format) +{ + const struct util_format_description *desc = + util_format_description(format); + + if ((desc->colorspace == UTIL_FORMAT_COLORSPACE_RGB || + desc->colorspace == UTIL_FORMAT_COLORSPACE_SRGB) && + desc->swizzle[0] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[1] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[2] == UTIL_FORMAT_SWIZZLE_X && + desc->swizzle[3] == UTIL_FORMAT_SWIZZLE_X) { + return TRUE; + } + return FALSE; +} + + boolean util_format_is_supported(enum pipe_format format, unsigned bind) { |