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 | |
| 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')
| -rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_format.c | 94 | ||||
| -rw-r--r-- | mesalib/src/gallium/auxiliary/util/u_format.h | 19 | 
2 files changed, 112 insertions, 1 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)  { diff --git a/mesalib/src/gallium/auxiliary/util/u_format.h b/mesalib/src/gallium/auxiliary/util/u_format.h index 352710310..2eb3e1b80 100644 --- a/mesalib/src/gallium/auxiliary/util/u_format.h +++ b/mesalib/src/gallium/auxiliary/util/u_format.h @@ -105,7 +105,8 @@ enum util_format_swizzle {     UTIL_FORMAT_SWIZZLE_W = 3,     UTIL_FORMAT_SWIZZLE_0 = 4,     UTIL_FORMAT_SWIZZLE_1 = 5, -   UTIL_FORMAT_SWIZZLE_NONE = 6 +   UTIL_FORMAT_SWIZZLE_NONE = 6, +   UTIL_FORMAT_SWIZZLE_MAX = 7  /**< Number of enums counter (must be last) */  }; @@ -477,6 +478,22 @@ boolean  util_format_is_float(enum pipe_format format); +boolean +util_format_is_rgb_no_alpha(enum pipe_format format); + + +boolean +util_format_is_luminance(enum pipe_format format); + + +boolean +util_format_is_luminance_alpha(enum pipe_format format); + + +boolean +util_format_is_intensity(enum pipe_format format); + +  /**   * Whether the src format can be blitted to destation format with a simple   * memcpy. | 
