[Mesa-dev] [PATCH 2/4] gallivm: Allow indirection from TEMP registers too.
Brian Paul
brianp at vmware.com
Thu Dec 6 10:02:54 PST 2012
On 12/06/2012 10:35 AM, jfonseca at vmware.com wrote:
> From: José Fonseca<jfonseca at vmware.com>
>
> The ADDR file is cumbersome for native integer capable drivers. We
> should consider deprecating it eventually, but this just adds support
> for indirection from TEMP registers.
> ---
> src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c | 20 +++++++++++++++++---
> 1 file changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> index 9caac21..bd783b5 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_soa.c
> @@ -533,9 +533,23 @@ get_indirect_index(struct lp_build_tgsi_soa_context *bld,
> base = lp_build_const_int_vec(bld->bld_base.base.gallivm, uint_bld->type, reg_index);
>
> assert(swizzle< 4);
> - rel = LLVMBuildLoad(builder,
> - bld->addr[indirect_reg->Index][swizzle],
> - "load addr reg");
> + switch (indirect_reg->File) {
> + case TGSI_FILE_ADDRESS:
> + rel = LLVMBuildLoad(builder,
> + bld->addr[indirect_reg->Index][swizzle],
> + "load addr reg");
> + /* ADDR registers are uint */
> + break;
> + case TGSI_FILE_TEMPORARY:
> + rel = lp_get_temp_ptr_soa(bld, indirect_reg->Index, swizzle);
> + rel = LLVMBuildLoad(builder, rel, "load temp reg");
> + /* TEMP registers are float type */
> + rel = LLVMBuildBitCast(builder, rel, uint_bld->vec_type, "");
Is bitcasting right? I'd expect that if the temp register has float
values that we need to do a float->int conversion here.
> + break;
> + default:
> + assert(0);
> + rel = uint_bld->zero;
> + }
>
> index = lp_build_add(uint_bld, base, rel);
>
Looks OK otherwise.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list