On Mon, May 20, 2013 at 04:49:19PM +0200, Vincent Lejeune wrote:
> ---

For the series:

Reviewed-by: Tom Stellard <thomas.stell...@amd.com>

>  src/gallium/drivers/r600/r600_llvm.c | 51 
> +++++++++++++++++-------------------
>  1 file changed, 24 insertions(+), 27 deletions(-)
> 
> diff --git a/src/gallium/drivers/r600/r600_llvm.c 
> b/src/gallium/drivers/r600/r600_llvm.c
> index c6c9123..26d40a2 100644
> --- a/src/gallium/drivers/r600/r600_llvm.c
> +++ b/src/gallium/drivers/r600/r600_llvm.c
> @@ -23,30 +23,40 @@
>  #define CONSTANT_BUFFER_0_ADDR_SPACE 8
>  #define CONSTANT_BUFFER_1_ADDR_SPACE (CONSTANT_BUFFER_0_ADDR_SPACE + 
> R600_UCP_CONST_BUFFER)
>  
> +static LLVMValueRef llvm_load_const_buffer(
> +     struct lp_build_tgsi_context * bld_base,
> +     LLVMValueRef OffsetValue,
> +     unsigned ConstantAddressSpace)
> +{
> +     LLVMValueRef offset[2] = {
> +             
> LLVMConstInt(LLVMInt64TypeInContext(bld_base->base.gallivm->context), 0, 
> false),
> +             OffsetValue
> +     };
> +
> +     LLVMTypeRef const_ptr_type = 
> LLVMPointerType(LLVMArrayType(LLVMVectorType(bld_base->base.elem_type, 4), 
> 1024),
> +                                                     ConstantAddressSpace);
> +     LLVMValueRef const_ptr = 
> LLVMBuildIntToPtr(bld_base->base.gallivm->builder, 
> lp_build_const_int32(bld_base->base.gallivm, 0), const_ptr_type, "");
> +     LLVMValueRef ptr = LLVMBuildGEP(bld_base->base.gallivm->builder, 
> const_ptr, offset, 2, "");
> +     return LLVMBuildLoad(bld_base->base.gallivm->builder, ptr, "");
> +}
> +
>  static LLVMValueRef llvm_fetch_const(
>       struct lp_build_tgsi_context * bld_base,
>       const struct tgsi_full_src_register *reg,
>       enum tgsi_opcode_type type,
>       unsigned swizzle)
>  {
> -     LLVMValueRef offset[2] = {
> -             
> LLVMConstInt(LLVMInt64TypeInContext(bld_base->base.gallivm->context), 0, 
> false),
> -             lp_build_const_int32(bld_base->base.gallivm, 
> reg->Register.Index)
> -     };
> +     LLVMValueRef offset = lp_build_const_int32(bld_base->base.gallivm, 
> reg->Register.Index);
>       if (reg->Register.Indirect) {
>               struct lp_build_tgsi_soa_context *bld = 
> lp_soa_context(bld_base);
>               LLVMValueRef index = 
> LLVMBuildLoad(bld_base->base.gallivm->builder, 
> bld->addr[reg->Indirect.Index][reg->Indirect.Swizzle], "");
> -             offset[1] = LLVMBuildAdd(bld_base->base.gallivm->builder, 
> offset[1], index, "");
> +             offset = LLVMBuildAdd(bld_base->base.gallivm->builder, offset, 
> index, "");
>       }
>       unsigned ConstantAddressSpace = CONSTANT_BUFFER_0_ADDR_SPACE ;
>       if (reg->Register.Dimension) {
>               ConstantAddressSpace += reg->Dimension.Index;
>       }
> -     LLVMTypeRef const_ptr_type = 
> LLVMPointerType(LLVMArrayType(LLVMVectorType(bld_base->base.elem_type, 4), 
> 1024),
> -                                                     ConstantAddressSpace);
> -     LLVMValueRef const_ptr = 
> LLVMBuildIntToPtr(bld_base->base.gallivm->builder, 
> lp_build_const_int32(bld_base->base.gallivm, 0), const_ptr_type, "");
> -     LLVMValueRef ptr = LLVMBuildGEP(bld_base->base.gallivm->builder, 
> const_ptr, offset, 2, "");
> -     LLVMValueRef cvecval = LLVMBuildLoad(bld_base->base.gallivm->builder, 
> ptr, "");
> +     LLVMValueRef cvecval = llvm_load_const_buffer(bld_base, offset, 
> ConstantAddressSpace);
>       LLVMValueRef cval = 
> LLVMBuildExtractElement(bld_base->base.gallivm->builder, cvecval, 
> lp_build_const_int32(bld_base->base.gallivm, swizzle), "");
>       return bitcast(bld_base, type, cval);
>  }
> @@ -250,14 +260,8 @@ static void llvm_emit_epilogue(struct 
> lp_build_tgsi_context * bld_base)
>                               LLVMValueRef adjusted_elements[4];
>                               for (reg_index = 0; reg_index < 2; reg_index 
> ++) {
>                                       for (chan = 0; chan < 
> TGSI_NUM_CHANNELS; chan++) {
> -                                             LLVMValueRef offset[2] = {
> -                                                     
> LLVMConstInt(LLVMInt64TypeInContext(bld_base->base.gallivm->context), 0, 
> false),
> -                                                     
> lp_build_const_int32(bld_base->base.gallivm, reg_index * 4 + chan)
> -                                             };
> -                                             LLVMTypeRef const_ptr_type = 
> LLVMPointerType(LLVMArrayType(LLVMVectorType(bld_base->base.elem_type, 4), 
> 1024), CONSTANT_BUFFER_1_ADDR_SPACE);
> -                                             LLVMValueRef const_ptr = 
> LLVMBuildIntToPtr(bld_base->base.gallivm->builder, 
> lp_build_const_int32(bld_base->base.gallivm, 0), const_ptr_type, "");
> -                                             LLVMValueRef ptr = 
> LLVMBuildGEP(bld_base->base.gallivm->builder, const_ptr, offset, 2, "");
> -                                             LLVMValueRef base_vector = 
> LLVMBuildLoad(bld_base->base.gallivm->builder, ptr, "");
> +                                             LLVMValueRef offset = 
> lp_build_const_int32(bld_base->base.gallivm, reg_index * 4 + chan);
> +                                             LLVMValueRef base_vector = 
> llvm_load_const_buffer(bld_base, offset, CONSTANT_BUFFER_1_ADDR_SPACE);
>                                               args[0] = output;
>                                               args[1] = base_vector;
>                                               adjusted_elements[chan] = 
> build_intrinsic(base->gallivm->builder,
> @@ -405,15 +409,8 @@ static void llvm_emit_tex(
>       if (emit_data->inst->Texture.Texture == TGSI_TEXTURE_BUFFER) {
>               switch (emit_data->inst->Instruction.Opcode) {
>               case TGSI_OPCODE_TXQ: {
> -                     LLVMValueRef offset[2] = {
> -                             
> LLVMConstInt(LLVMInt64TypeInContext(bld_base->base.gallivm->context), 0, 
> false),
> -                             lp_build_const_int32(bld_base->base.gallivm, 1)
> -                     };
> -                     LLVMTypeRef const_ptr_type = 
> LLVMPointerType(LLVMArrayType(LLVMVectorType(bld_base->base.elem_type, 4), 
> 1024),
> -                                                                     
> R600_BUFFER_INFO_CONST_BUFFER);
> -                     LLVMValueRef const_ptr = 
> LLVMBuildIntToPtr(bld_base->base.gallivm->builder, 
> lp_build_const_int32(bld_base->base.gallivm, 0), const_ptr_type, "");
> -                     LLVMValueRef ptr = 
> LLVMBuildGEP(bld_base->base.gallivm->builder, const_ptr, offset, 2, "");
> -                     LLVMValueRef cvecval = 
> LLVMBuildLoad(bld_base->base.gallivm->builder, ptr, "");
> +                     LLVMValueRef offset = 
> lp_build_const_int32(bld_base->base.gallivm, 1);
> +                     LLVMValueRef cvecval = llvm_load_const_buffer(bld_base, 
> offset, R600_BUFFER_INFO_CONST_BUFFER);
>                       emit_data->output[0] = cvecval;
>                       return;
>               }
> -- 
> 1.8.2.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to