mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 00:40:25 +01:00
util: add util_format_is_luminance/intensity/rgb(), etc
Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
0763b978ee
commit
ba6f1f2c29
2 changed files with 112 additions and 1 deletions
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue