Mesa (master): draw: use the instance id when fetching vertex data

Zack Rusin zack at kemper.freedesktop.org
Fri Jul 16 16:16:31 UTC 2010


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

Author: Zack Rusin <zackr at vmware.com>
Date:   Fri Jul 16 11:58:20 2010 -0400

draw: use the instance id when fetching vertex data

---

 src/gallium/auxiliary/draw/draw_llvm.c |   14 +++++++++++---
 1 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index 315544d..61c53a0 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -368,7 +368,8 @@ generate_fetch(LLVMBuilderRef builder,
                LLVMValueRef *res,
                struct pipe_vertex_element *velem,
                LLVMValueRef vbuf,
-               LLVMValueRef index)
+               LLVMValueRef index,
+               unsigned instance_id)
 {
    LLVMValueRef indices = LLVMConstInt(LLVMInt64Type(), velem->vertex_buffer_index, 0);
    LLVMValueRef vbuffer_ptr = LLVMBuildGEP(builder, vbuffers_ptr,
@@ -393,6 +394,11 @@ generate_fetch(LLVMBuilderRef builder,
    stride = LLVMBuildAdd(builder, stride,
                          LLVMConstInt(LLVMInt32Type(), velem->src_offset, 0),
                          "");
+   if (velem->instance_divisor) {
+      stride = LLVMBuildMul(builder, stride,
+                            LLVMConstInt(LLVMInt32Type(), instance_id, 0),
+                            "");
+   }
 
    /*lp_build_printf(builder, "vbuf index = %d, stride is %d\n", indices, stride);*/
    vbuffer_ptr = LLVMBuildGEP(builder, vbuffer_ptr, &stride, 1, "");
@@ -745,7 +751,8 @@ draw_llvm_generate(struct draw_llvm *llvm, struct draw_llvm_variant *variant)
             LLVMValueRef vb = LLVMBuildGEP(builder, vb_ptr,
                                            &vb_index, 1, "");
             generate_fetch(builder, vbuffers_ptr,
-                           &aos_attribs[j][i], velem, vb, true_index);
+                           &aos_attribs[j][i], velem, vb, true_index,
+                           draw->instance_id);
          }
       }
       convert_to_soa(builder, aos_attribs, inputs,
@@ -908,7 +915,8 @@ draw_llvm_generate_elts(struct draw_llvm *llvm, struct draw_llvm_variant *varian
             LLVMValueRef vb = LLVMBuildGEP(builder, vb_ptr,
                                            &vb_index, 1, "");
             generate_fetch(builder, vbuffers_ptr,
-                           &aos_attribs[j][i], velem, vb, true_index);
+                           &aos_attribs[j][i], velem, vb, true_index,
+                           draw->instance_id);
          }
       }
       convert_to_soa(builder, aos_attribs, inputs,




More information about the mesa-commit mailing list