[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