[Mesa-dev] [PATCH 09/20] radeonsi: fix a crash in imageSize for cubemap arrays

Dave Airlie airlied at gmail.com
Mon Aug 29 20:36:02 UTC 2016


On 30 August 2016 at 01:28, Marek Olšák <maraeo at gmail.com> wrote:
> From: Marek Olšák <marek.olsak at amd.com>
>
> Sometimes it was f32, other times it was i32. Now it's always i32.

I think this is pretty much what radv does in the same situation.

Reviewed-by: Dave Airlie <airlied at redhat.com>
>
> This fixes:
> GL45-CTS.texture_cube_map_array.image_texture_size.texture_size_compute_sh
> ---
>  src/gallium/drivers/radeonsi/si_shader.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
> index 6eca5cf..f8884ef 100644
> --- a/src/gallium/drivers/radeonsi/si_shader.c
> +++ b/src/gallium/drivers/radeonsi/si_shader.c
> @@ -4098,21 +4098,21 @@ static void atomic_emit(
>
>  static void resq_fetch_args(
>                 struct lp_build_tgsi_context * bld_base,
>                 struct lp_build_emit_data * emit_data)
>  {
>         struct si_shader_context *ctx = si_shader_context(bld_base);
>         struct gallivm_state *gallivm = bld_base->base.gallivm;
>         const struct tgsi_full_instruction *inst = emit_data->inst;
>         const struct tgsi_full_src_register *reg = &inst->Src[0];
>
> -       emit_data->dst_type = LLVMVectorType(bld_base->base.elem_type, 4);
> +       emit_data->dst_type = ctx->v4i32;
>
>         if (reg->Register.File == TGSI_FILE_BUFFER) {
>                 emit_data->args[0] = shader_buffer_fetch_rsrc(ctx, reg);
>                 emit_data->arg_count = 1;
>         } else if (inst->Memory.Texture == TGSI_TEXTURE_BUFFER) {
>                 image_fetch_rsrc(bld_base, reg, false, &emit_data->args[0]);
>                 emit_data->arg_count = 1;
>         } else {
>                 emit_data->args[0] = bld_base->uint_bld.zero; /* mip level */
>                 image_fetch_rsrc(bld_base, reg, false, &emit_data->args[1]);
> @@ -4149,23 +4149,21 @@ static void resq_emit(
>                         builder, "llvm.SI.getresinfo.i32", emit_data->dst_type,
>                         emit_data->args, emit_data->arg_count,
>                         LLVMReadNoneAttribute);
>
>                 /* Divide the number of layers by 6 to get the number of cubes. */
>                 if (inst->Memory.Texture == TGSI_TEXTURE_CUBE_ARRAY) {
>                         LLVMValueRef imm2 = lp_build_const_int32(gallivm, 2);
>                         LLVMValueRef imm6 = lp_build_const_int32(gallivm, 6);
>
>                         LLVMValueRef z = LLVMBuildExtractElement(builder, out, imm2, "");
> -                       z = LLVMBuildBitCast(builder, z, bld_base->uint_bld.elem_type, "");
>                         z = LLVMBuildSDiv(builder, z, imm6, "");
> -                       z = LLVMBuildBitCast(builder, z, bld_base->base.elem_type, "");
>                         out = LLVMBuildInsertElement(builder, out, z, imm2, "");
>                 }
>         }
>
>         emit_data->output[emit_data->chan] = out;
>  }
>
>  static void set_tex_fetch_args(struct si_shader_context *ctx,
>                                struct lp_build_emit_data *emit_data,
>                                unsigned opcode, unsigned target,
> --
> 2.7.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list