Re: [Mesa-dev] [PATCH 1/2] radeonsi: set AC_FUNC_ATTR_READNONE for image opcodes where it was missing

2019-04-11 Thread Samuel Pitoiset

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

2019-04-10 Thread Marek Olšák
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