Mesa (master): gallivm: no longer do indirect addressing in get_temp_ptr()

Brian Paul brianp at kemper.freedesktop.org
Wed Jul 21 16:19:54 UTC 2010


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

Author: Brian Paul <brianp at vmware.com>
Date:   Wed Jul 21 09:15:30 2010 -0600

gallivm: no longer do indirect addressing in get_temp_ptr()

---

 src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c |   35 ++++++++++-------------
 1 files changed, 15 insertions(+), 20 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
index 0e45d74..de36102 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
@@ -408,25 +408,18 @@ static void lp_exec_mask_endsub(struct lp_exec_mask *mask, int *pc)
 
 /**
  * Return pointer to a temporary register channel (src or dest).
+ * Note that indirect addressing cannot be handled here.
  * \param index  which temporary register
  * \param chan  which channel of the temp register.
- * \param is_indirect  if true, add 'addr' to the index
- * \param addr  indirect addressing offset (should already have been
- *              multiplied by four).
  */
 static LLVMValueRef
 get_temp_ptr(struct lp_build_tgsi_soa_context *bld,
              unsigned index,
-             unsigned chan,
-             boolean is_indirect,
-             LLVMValueRef addr)
+             unsigned chan)
 {
    assert(chan < 4);
    if (bld->has_indirect_addressing) {
-      LLVMValueRef lindex =
-         LLVMConstInt(LLVMInt32Type(), index * 4 + chan, 0);
-      if (is_indirect)
-         lindex = lp_build_add(&bld->base, lindex, addr);
+      LLVMValueRef lindex = lp_build_const_int32(index * 4 + chan);
       return LLVMBuildGEP(bld->base.builder, bld->temps_array, &lindex, 1, "");
    }
    else {
@@ -578,9 +571,7 @@ emit_fetch(
       }
       else {
          LLVMValueRef temp_ptr;
-         temp_ptr = get_temp_ptr(bld, reg->Register.Index,
-                                 swizzle,
-                                 FALSE, NULL);
+         temp_ptr = get_temp_ptr(bld, reg->Register.Index, swizzle);
          res = LLVMBuildLoad(bld->base.builder, temp_ptr, "");
          if (!res)
             return bld->base.undef;
@@ -766,14 +757,18 @@ emit_store(
                          bld->outputs[reg->Register.Index][chan_index]);
       break;
 
-   case TGSI_FILE_TEMPORARY: {
-      LLVMValueRef temp_ptr = get_temp_ptr(bld, reg->Register.Index,
-                                           chan_index,
-                                           reg->Register.Indirect,
-                                           addr);
-      lp_exec_mask_store(&bld->exec_mask, pred, value, temp_ptr);
+   case TGSI_FILE_TEMPORARY:
+      if (reg->Register.Indirect) {
+         /* XXX not done yet */
+         debug_printf("WARNING: LLVM scatter store of temp regs"
+                      " not implemented\n");
+      }
+      else {
+         LLVMValueRef temp_ptr = get_temp_ptr(bld, reg->Register.Index,
+                                              chan_index);
+         lp_exec_mask_store(&bld->exec_mask, pred, value, temp_ptr);
+      }
       break;
-   }
 
    case TGSI_FILE_ADDRESS:
       lp_exec_mask_store(&bld->exec_mask, pred, value,




More information about the mesa-commit mailing list