summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2007-12-11 00:46:44 +0000
committerJosé Fonseca <[email protected]>2007-12-11 00:51:12 +0000
commit609538f57c93c6b6166777a329d80c46fef86f0b (patch)
tree6f3baf48ae2bbc884758e8680f1327780defeade
parent7d1894c6558c5cc7f503142cda11b8a12ea24e65 (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.
-rw-r--r--src/mesa/pipe/p_format.h47
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