Mesa (master): draw/gs: fix extracting of the clip
Zack Rusin
zack at kemper.freedesktop.org
Tue May 14 19:42:06 UTC 2013
Module: Mesa
Branch: master
Commit: 013424678e2604a45c420ec403e6f12b82446b24
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=013424678e2604a45c420ec403e6f12b82446b24
Author: Zack Rusin <zackr at vmware.com>
Date: Tue May 14 03:47:36 2013 -0400
draw/gs: fix extracting of the clip
The indices are not consecutive when using the geometry shader,
which means we were extracting non existing values. Create
an array of linear indices and always use it instead of the passed
indices. Found by Jose.
Signed-off-by: Zack Rusin <zackr at vmware.com>
Reviewed-by: José Fonseca <jfonseca at vmware.com>
---
src/gallium/auxiliary/draw/draw_llvm.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
index 017d729..4a71955 100644
--- a/src/gallium/auxiliary/draw/draw_llvm.c
+++ b/src/gallium/auxiliary/draw/draw_llvm.c
@@ -871,6 +871,7 @@ store_aos_array(struct gallivm_state *gallivm,
LLVMBuilderRef builder = gallivm->builder;
LLVMValueRef attr_index = lp_build_const_int32(gallivm, attrib);
LLVMValueRef inds[LP_MAX_VECTOR_WIDTH / 32];
+ LLVMValueRef linear_inds[LP_MAX_VECTOR_WIDTH / 32];
LLVMValueRef io_ptrs[LP_MAX_VECTOR_WIDTH / 32];
int vector_length = soa_type.length;
int i;
@@ -878,10 +879,11 @@ store_aos_array(struct gallivm_state *gallivm,
debug_assert(TGSI_NUM_CHANNELS == 4);
for (i = 0; i < vector_length; i++) {
+ linear_inds[i] = lp_build_const_int32(gallivm, i);
if (indices) {
inds[i] = indices[i];
} else {
- inds[i] = lp_build_const_int32(gallivm, i);
+ inds[i] = linear_inds[i];
}
io_ptrs[i] = LLVMBuildGEP(builder, io_ptr, &inds[i], 1, "");
}
@@ -904,7 +906,7 @@ store_aos_array(struct gallivm_state *gallivm,
cliptmp = LLVMBuildOr(builder, val, clipmask, "");
for (i = 0; i < vector_length; i++) {
LLVMValueRef id_ptr = draw_jit_header_id(gallivm, io_ptrs[i]);
- val = LLVMBuildExtractElement(builder, cliptmp, inds[i], "");
+ val = LLVMBuildExtractElement(builder, cliptmp, linear_inds[i], "");
val = adjust_mask(gallivm, val);
LLVMBuildStore(builder, val, id_ptr);
#if DEBUG_STORE
More information about the mesa-commit
mailing list