Mesa (master): gallivm: Add a function to generate lp_type for a format.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Nov 28 19:14:54 UTC 2012


Module: Mesa
Branch: master
Commit: 71c6fe76c05aa7fc1300cb13e6507abbea5a1e19
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=71c6fe76c05aa7fc1300cb13e6507abbea5a1e19

Author: James Benton <jbenton at vmware.com>
Date:   Wed May 30 14:38:52 2012 +0100

gallivm: Add a function to generate lp_type for a format.

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

---

 .../auxiliary/gallivm/lp_bld_format_aos_array.c    |    8 +----
 src/gallium/auxiliary/gallivm/lp_bld_type.h        |   30 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 7 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c b/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c
index b163fbc..609b9d4 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_format_aos_array.c
@@ -58,13 +58,7 @@ lp_build_fetch_rgba_aos_array(struct gallivm_state *gallivm,
    LLVMValueRef ptr, res = NULL;
    struct lp_type src_type;
 
-   memset(&src_type, 0, sizeof src_type);
-   src_type.floating = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT;
-   src_type.fixed    = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FIXED;
-   src_type.sign     = format_desc->channel[0].type != UTIL_FORMAT_TYPE_UNSIGNED;
-   src_type.norm     = format_desc->channel[0].normalized;
-   src_type.width    = format_desc->channel[0].size;
-   src_type.length   = format_desc->nr_channels;
+   lp_type_from_format_desc(&src_type, format_desc);
 
    assert(src_type.length <= dst_type.length);
 
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_type.h b/src/gallium/auxiliary/gallivm/lp_bld_type.h
index 75310e0..6ce5501 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_type.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_type.h
@@ -37,6 +37,7 @@
 #define LP_BLD_TYPE_H
 
 
+#include "util/u_format.h"
 #include "pipe/p_compiler.h"
 #include "gallivm/lp_bld.h"
 
@@ -165,6 +166,35 @@ struct lp_build_context
 };
 
 
+/**
+ * Converts a format description into an lp_type.
+ *
+ * Only works with "array formats".
+ *
+ * e.g. With PIPE_FORMAT_R32G32B32A32_FLOAT returns an lp_type with float[4]
+ */
+static INLINE void
+lp_type_from_format_desc(struct lp_type* type, const struct util_format_description *format_desc)
+{
+   assert(util_format_is_array(format_desc));
+
+   memset(type, 0, sizeof(struct lp_type));
+   type->floating = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FLOAT;
+   type->fixed    = format_desc->channel[0].type == UTIL_FORMAT_TYPE_FIXED;
+   type->sign     = format_desc->channel[0].type != UTIL_FORMAT_TYPE_UNSIGNED;
+   type->norm     = format_desc->channel[0].normalized;
+   type->width    = format_desc->channel[0].size;
+   type->length   = format_desc->nr_channels;
+}
+
+
+static INLINE void
+lp_type_from_format(struct lp_type* type, enum pipe_format format)
+{
+   lp_type_from_format_desc(type, util_format_description(format));
+}
+
+
 static INLINE unsigned
 lp_type_width(struct lp_type type)
 {




More information about the mesa-commit mailing list