Mesa (master): gallivm: added clamp and int_to_float functions

Brian Paul brianp at kemper.freedesktop.org
Wed Feb 24 04:16:36 UTC 2010


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

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Feb 23 21:16:18 2010 -0700

gallivm: added clamp and int_to_float functions

---

 src/gallium/auxiliary/gallivm/lp_bld_arit.c |   41 ++++++++++++++++++++++++++-
 src/gallium/auxiliary/gallivm/lp_bld_arit.h |   10 ++++++
 2 files changed, 50 insertions(+), 1 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.c b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
index 54b31be..bbce31f 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_arit.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.c
@@ -614,6 +614,22 @@ lp_build_max(struct lp_build_context *bld,
 
 
 /**
+ * Generate clamp(a, min, max)
+ * Do checks for special cases.
+ */
+LLVMValueRef
+lp_build_clamp(struct lp_build_context *bld,
+               LLVMValueRef a,
+               LLVMValueRef min,
+               LLVMValueRef max)
+{
+   a = lp_build_min(bld, a, max);
+   a = lp_build_max(bld, a, min);
+   return a;
+}
+
+
+/**
  * Generate abs(a)
  */
 LLVMValueRef
@@ -693,6 +709,29 @@ lp_build_sgn(struct lp_build_context *bld,
 }
 
 
+/**
+ * Convert vector of int to vector of float.
+ */
+LLVMValueRef
+lp_build_int_to_float(struct lp_build_context *bld,
+                      LLVMValueRef a)
+{
+   const struct lp_type type = bld->type;
+
+   assert(type.floating);
+   /*assert(lp_check_value(type, a));*/
+
+   {
+      LLVMTypeRef vec_type = lp_build_vec_type(type);
+      /*LLVMTypeRef int_vec_type = lp_build_int_vec_type(type);*/
+      LLVMValueRef res;
+      res = LLVMBuildSIToFP(bld->builder, a, vec_type, "");
+      return res;
+   }
+}
+
+
+
 enum lp_build_round_sse41_mode
 {
    LP_BUILD_ROUND_SSE41_NEAREST = 0,
@@ -819,7 +858,7 @@ lp_build_ceil(struct lp_build_context *bld,
 
 /**
  * Convert to integer, through whichever rounding method that's fastest,
- * typically truncating to zero.
+ * typically truncating toward zero.
  */
 LLVMValueRef
 lp_build_itrunc(struct lp_build_context *bld,
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_arit.h b/src/gallium/auxiliary/gallivm/lp_bld_arit.h
index 62be4b9..da84b7c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_arit.h
+++ b/src/gallium/auxiliary/gallivm/lp_bld_arit.h
@@ -107,6 +107,12 @@ lp_build_max(struct lp_build_context *bld,
              LLVMValueRef b);
 
 LLVMValueRef
+lp_build_clamp(struct lp_build_context *bld,
+               LLVMValueRef a,
+               LLVMValueRef min,
+               LLVMValueRef max);
+
+LLVMValueRef
 lp_build_abs(struct lp_build_context *bld,
              LLVMValueRef a);
 
@@ -115,6 +121,10 @@ lp_build_sgn(struct lp_build_context *bld,
              LLVMValueRef a);
 
 LLVMValueRef
+lp_build_int_to_float(struct lp_build_context *bld,
+                      LLVMValueRef a);
+
+LLVMValueRef
 lp_build_round(struct lp_build_context *bld,
                LLVMValueRef a);
 




More information about the mesa-commit mailing list