Re: [Mesa-dev] [PATCH 1/2] radeonsi: set AC_FUNC_ATTR_READNONE for image opcodes where it was missing
Reviewed-by: Samuel Pitoiset On 4/11/19 3:30 AM, Marek Olšák wrote: From: Marek Olšák --- src/amd/common/ac_llvm_build.c| 1 + src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 4 2 files changed, 5 insertions(+) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index a612dcefa1d..cfbca294c97 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -3293,20 +3293,21 @@ LLVMValueRef ac_unpack_param(struct ac_llvm_context *ctx, LLVMValueRef param, * addr[sample_index] = (fmask >> (addr[sample_index] * 4)) & 0xF; */ void ac_apply_fmask_to_sample(struct ac_llvm_context *ac, LLVMValueRef fmask, LLVMValueRef *addr, bool is_array_tex) { struct ac_image_args fmask_load = {}; fmask_load.opcode = ac_image_load; fmask_load.resource = fmask; fmask_load.dmask = 0xf; fmask_load.dim = is_array_tex ? ac_image_2darray : ac_image_2d; + fmask_load.attributes = AC_FUNC_ATTR_READNONE; fmask_load.coords[0] = addr[0]; fmask_load.coords[1] = addr[1]; if (is_array_tex) fmask_load.coords[2] = addr[2]; LLVMValueRef fmask_value = ac_build_image_opcode(ac, _load); fmask_value = LLVMBuildExtractElement(ac->builder, fmask_value, ac->i32_0, ""); diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c index 727def56f65..ed67976b421 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c @@ -1035,20 +1035,21 @@ static void resq_emit( if (inst->Memory.Texture == TGSI_TEXTURE_3D) target = TGSI_TEXTURE_2D_ARRAY; else target = inst->Memory.Texture; } struct ac_image_args args = {}; args.opcode = ac_image_get_resinfo; args.dim = ac_texture_dim_from_tgsi_target(ctx->screen, target); args.dmask = 0xf; + args.attributes = AC_FUNC_ATTR_READNONE; if (inst->Instruction.Opcode == TGSI_OPCODE_TXQ) { tex_fetch_ptrs(bld_base, emit_data, , NULL, NULL); args.lod = lp_build_emit_fetch(bld_base, inst, 0, TGSI_CHAN_X); } else { image_fetch_rsrc(bld_base, reg, false, target, ); args.lod = ctx->i32_0; } emit_data->output[emit_data->chan] = @@ -1265,20 +1266,21 @@ si_lower_gather4_integer(struct si_shader_context *ctx, lp_build_if(_ctx, >gallivm, LLVMBuildNot(builder, wa_, "")); } /* Query the texture size. */ resinfo.opcode = ac_image_get_resinfo; resinfo.dim = ac_texture_dim_from_tgsi_target(ctx->screen, target); resinfo.resource = args->resource; resinfo.sampler = args->sampler; resinfo.lod = ctx->ac.i32_0; resinfo.dmask = 0xf; + resinfo.attributes = AC_FUNC_ATTR_READNONE; LLVMValueRef texsize = fix_resinfo(ctx, target, ac_build_image_opcode(>ac, )); /* Compute -0.5 / size. */ for (unsigned c = 0; c < 2; c++) { half_texel[c] = LLVMBuildExtractElement(builder, texsize, LLVMConstInt(ctx->i32, c, 0), ""); @@ -1769,20 +1771,22 @@ static void si_llvm_emit_fbfetch(const struct lp_build_tgsi_action *action, fmask = ac_build_load_to_sgpr(>ac, ptr, LLVMConstInt(ctx->i32, SI_PS_IMAGE_COLORBUF0_FMASK / 2, 0)); ac_apply_fmask_to_sample(>ac, fmask, args.coords, ctx->shader->key.mono.u.ps.fbfetch_layered); } args.opcode = ac_image_load; args.resource = image; args.dmask = 0xf; + args.attributes = AC_FUNC_ATTR_READNONE; + if (ctx->shader->key.mono.u.ps.fbfetch_msaa) args.dim = ctx->shader->key.mono.u.ps.fbfetch_layered ? ac_image_2darraymsaa : ac_image_2dmsaa; else if (ctx->shader->key.mono.u.ps.fbfetch_is_1D) args.dim = ctx->shader->key.mono.u.ps.fbfetch_layered ? ac_image_1darray : ac_image_1d; else args.dim = ctx->shader->key.mono.u.ps.fbfetch_layered ? ac_image_2darray : ac_image_2d; ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev
[Mesa-dev] [PATCH 1/2] radeonsi: set AC_FUNC_ATTR_READNONE for image opcodes where it was missing
From: Marek Olšák --- src/amd/common/ac_llvm_build.c| 1 + src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c | 4 2 files changed, 5 insertions(+) diff --git a/src/amd/common/ac_llvm_build.c b/src/amd/common/ac_llvm_build.c index a612dcefa1d..cfbca294c97 100644 --- a/src/amd/common/ac_llvm_build.c +++ b/src/amd/common/ac_llvm_build.c @@ -3293,20 +3293,21 @@ LLVMValueRef ac_unpack_param(struct ac_llvm_context *ctx, LLVMValueRef param, * addr[sample_index] = (fmask >> (addr[sample_index] * 4)) & 0xF; */ void ac_apply_fmask_to_sample(struct ac_llvm_context *ac, LLVMValueRef fmask, LLVMValueRef *addr, bool is_array_tex) { struct ac_image_args fmask_load = {}; fmask_load.opcode = ac_image_load; fmask_load.resource = fmask; fmask_load.dmask = 0xf; fmask_load.dim = is_array_tex ? ac_image_2darray : ac_image_2d; + fmask_load.attributes = AC_FUNC_ATTR_READNONE; fmask_load.coords[0] = addr[0]; fmask_load.coords[1] = addr[1]; if (is_array_tex) fmask_load.coords[2] = addr[2]; LLVMValueRef fmask_value = ac_build_image_opcode(ac, _load); fmask_value = LLVMBuildExtractElement(ac->builder, fmask_value, ac->i32_0, ""); diff --git a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c index 727def56f65..ed67976b421 100644 --- a/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c +++ b/src/gallium/drivers/radeonsi/si_shader_tgsi_mem.c @@ -1035,20 +1035,21 @@ static void resq_emit( if (inst->Memory.Texture == TGSI_TEXTURE_3D) target = TGSI_TEXTURE_2D_ARRAY; else target = inst->Memory.Texture; } struct ac_image_args args = {}; args.opcode = ac_image_get_resinfo; args.dim = ac_texture_dim_from_tgsi_target(ctx->screen, target); args.dmask = 0xf; + args.attributes = AC_FUNC_ATTR_READNONE; if (inst->Instruction.Opcode == TGSI_OPCODE_TXQ) { tex_fetch_ptrs(bld_base, emit_data, , NULL, NULL); args.lod = lp_build_emit_fetch(bld_base, inst, 0, TGSI_CHAN_X); } else { image_fetch_rsrc(bld_base, reg, false, target, ); args.lod = ctx->i32_0; } emit_data->output[emit_data->chan] = @@ -1265,20 +1266,21 @@ si_lower_gather4_integer(struct si_shader_context *ctx, lp_build_if(_ctx, >gallivm, LLVMBuildNot(builder, wa_, "")); } /* Query the texture size. */ resinfo.opcode = ac_image_get_resinfo; resinfo.dim = ac_texture_dim_from_tgsi_target(ctx->screen, target); resinfo.resource = args->resource; resinfo.sampler = args->sampler; resinfo.lod = ctx->ac.i32_0; resinfo.dmask = 0xf; + resinfo.attributes = AC_FUNC_ATTR_READNONE; LLVMValueRef texsize = fix_resinfo(ctx, target, ac_build_image_opcode(>ac, )); /* Compute -0.5 / size. */ for (unsigned c = 0; c < 2; c++) { half_texel[c] = LLVMBuildExtractElement(builder, texsize, LLVMConstInt(ctx->i32, c, 0), ""); @@ -1769,20 +1771,22 @@ static void si_llvm_emit_fbfetch(const struct lp_build_tgsi_action *action, fmask = ac_build_load_to_sgpr(>ac, ptr, LLVMConstInt(ctx->i32, SI_PS_IMAGE_COLORBUF0_FMASK / 2, 0)); ac_apply_fmask_to_sample(>ac, fmask, args.coords, ctx->shader->key.mono.u.ps.fbfetch_layered); } args.opcode = ac_image_load; args.resource = image; args.dmask = 0xf; + args.attributes = AC_FUNC_ATTR_READNONE; + if (ctx->shader->key.mono.u.ps.fbfetch_msaa) args.dim = ctx->shader->key.mono.u.ps.fbfetch_layered ? ac_image_2darraymsaa : ac_image_2dmsaa; else if (ctx->shader->key.mono.u.ps.fbfetch_is_1D) args.dim = ctx->shader->key.mono.u.ps.fbfetch_layered ? ac_image_1darray : ac_image_1d; else args.dim = ctx->shader->key.mono.u.ps.fbfetch_layered ? ac_image_2darray : ac_image_2d; -- 2.17.1 ___ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev