[Mesa-dev] [PATCH] draw/gs: fix extracting of the clip

Jose Fonseca jfonseca at vmware.com
Tue May 14 12:33:44 PDT 2013


Looks good to me. Thanks for the quick turnaround.

Jose

----- Original Message -----
> 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>
> ---
>  src/gallium/auxiliary/draw/draw_llvm.c |    6 ++++--
>  1 file 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
> --
> 1.7.10.4
> 


More information about the mesa-dev mailing list