Mesa (master): draw: fix incorrect instancing divisor in LLVM code

Brian Paul brianp at kemper.freedesktop.org
Tue Jul 20 00:29:28 UTC 2010


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

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Jul 19 18:29:12 2010 -0600

draw: fix incorrect instancing divisor in LLVM code

---

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

diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index 6958c30..1ee8769 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -380,12 +380,15 @@ generate_fetch(LLVMBuilderRef builder,
    LLVMValueRef cond;
    LLVMValueRef stride;
 
-   cond = LLVMBuildICmp(builder, LLVMIntULE, index, vb_max_index, "");
-
    if (velem->instance_divisor) {
-      index = instance_id;
+      /* array index = instance_id / instance_divisor */
+      index = LLVMBuildUDiv(builder, instance_id,
+                            LLVMConstInt(LLVMInt32Type(), velem->instance_divisor, 0),
+                            "instance_divisor");
    }
 
+   /* limit index to min(inex, vb_max_index) */
+   cond = LLVMBuildICmp(builder, LLVMIntULE, index, vb_max_index, "");
    index = LLVMBuildSelect(builder, cond, index, vb_max_index, "");
 
    stride = LLVMBuildMul(builder, vb_stride, index, "");




More information about the mesa-commit mailing list