diff options
author | Kenneth Graunke <[email protected]> | 2014-03-24 01:16:57 -0700 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2014-03-24 14:38:51 -0700 |
commit | 92234b1b2aaf6ba68e786498806cefd4bd99dabc (patch) | |
tree | a9d5beedbb0f1bde9c00b5614ff9d3bfaa65e3e9 /src/mesa/main/formats.c | |
parent | 0d99aef6c8a940e52afcbffa7091ff9c854ba120 (diff) |
mesa: Introduce a _mesa_format_has_color_component() helper.
When considering color write masks, we often want to know whether an
RGBA component actually contains any meaningful data. This function
provides an easy way to answer that question, and handles luminance,
intensity, and alpha formats correctly.
Signed-off-by: Kenneth Graunke <[email protected]>
Reviewed-by: Brian Paul <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
Reviewed-by: Ian Romanick <[email protected]>
Tested-by: Dylan Baker <[email protected]>
Diffstat (limited to 'src/mesa/main/formats.c')
-rw-r--r-- | src/mesa/main/formats.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index e74625f2369..fb2501c69a2 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -2207,6 +2207,35 @@ _mesa_format_num_components(mesa_format format) /** + * Returns true if a color format has data stored in the R/G/B/A channels, + * given an index from 0 to 3. + */ +bool +_mesa_format_has_color_component(mesa_format format, int component) +{ + const struct gl_format_info *info = _mesa_get_format_info(format); + + assert(info->BaseFormat != GL_DEPTH_COMPONENT && + info->BaseFormat != GL_DEPTH_STENCIL && + info->BaseFormat != GL_STENCIL_INDEX); + + switch (component) { + case 0: + return (info->RedBits + info->IntensityBits + info->LuminanceBits) > 0; + case 1: + return (info->GreenBits + info->IntensityBits + info->LuminanceBits) > 0; + case 2: + return (info->BlueBits + info->IntensityBits + info->LuminanceBits) > 0; + case 3: + return (info->AlphaBits + info->IntensityBits) > 0; + default: + assert(!"Invalid color component: must be 0..3"); + return false; + } +} + + +/** * Return number of bytes needed to store an image of the given size * in the given format. */ |