diff options
author | José Fonseca <[email protected]> | 2007-12-11 00:46:44 +0000 |
---|---|---|
committer | José Fonseca <[email protected]> | 2007-12-11 00:51:12 +0000 |
commit | 609538f57c93c6b6166777a329d80c46fef86f0b (patch) | |
tree | 6f3baf48ae2bbc884758e8680f1327780defeade /src/mesa/pipe | |
parent | 7d1894c6558c5cc7f503142cda11b8a12ea24e65 (diff) |
Add inline funtion to comput format size based on code in st_format.c.
Including state_tracker/st_format.h from pipe drivers is not an option
since it uses GL* types and pipe/p_util.h will clash with main/imports.h.
Diffstat (limited to 'src/mesa/pipe')
-rw-r--r-- | src/mesa/pipe/p_format.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/mesa/pipe/p_format.h b/src/mesa/pipe/p_format.h index 8f11bfab76b..95a50c18af2 100644 --- a/src/mesa/pipe/p_format.h +++ b/src/mesa/pipe/p_format.h @@ -366,4 +366,51 @@ static INLINE char *pf_sprint_name( char *str, uint format ) return str; } +static INLINE uint pf_get_component_bits( uint format, uint comp ) +{ + uint size; + + if (pf_swizzle_x(format) == comp) { + size = pf_size_x(format); + } + else if (pf_swizzle_y(format) == comp) { + size = pf_size_y(format); + } + else if (pf_swizzle_z(format) == comp) { + size = pf_size_z(format); + } + else if (pf_swizzle_w(format) == comp) { + size = pf_size_w(format); + } + else { + size = 0; + } + return size << (pf_exp8(format) * 3); +} + +static INLINE uint pf_get_bits( uint format ) +{ + if (pf_layout(format) == PIPE_FORMAT_LAYOUT_RGBAZS) { + return + pf_get_component_bits( format, PIPE_FORMAT_COMP_R ) + + pf_get_component_bits( format, PIPE_FORMAT_COMP_G ) + + pf_get_component_bits( format, PIPE_FORMAT_COMP_B ) + + pf_get_component_bits( format, PIPE_FORMAT_COMP_A ) + + pf_get_component_bits( format, PIPE_FORMAT_COMP_Z ) + + pf_get_component_bits( format, PIPE_FORMAT_COMP_S ); + } + else { + assert( pf_layout(format) == PIPE_FORMAT_LAYOUT_YCBCR ); + + /* TODO */ + assert( 0 ); + return 0; + } +} + +static INLINE uint pf_get_size( uint format ) { + assert(pf_get_bits(format) % 8 == 0); + return pf_get_bits(format) / 8; +} + #endif |