mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-29 10:10:09 +01:00
aco: propagate p_wqm on an image_sample's coordinate p_create_vector
Closes: https://gitlab.freedesktop.org/mesa/mesa/issues/2156
Fixes: 93c8ebfa78 ('aco: Initial commit of independent AMD compiler')
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
This commit is contained in:
parent
1be220833c
commit
ff70ccad16
1 changed files with 12 additions and 9 deletions
|
|
@ -6588,11 +6588,6 @@ void visit_tex(isel_context *ctx, nir_tex_instr *instr)
|
|||
}
|
||||
}
|
||||
|
||||
if (!(has_ddx && has_ddy) && !has_lod && !level_zero &&
|
||||
instr->sampler_dim != GLSL_SAMPLER_DIM_MS &&
|
||||
instr->sampler_dim != GLSL_SAMPLER_DIM_SUBPASS_MS)
|
||||
coords = emit_wqm(ctx, coords, bld.tmp(coords.regClass()), true);
|
||||
|
||||
std::vector<Operand> args;
|
||||
if (has_offset)
|
||||
args.emplace_back(Operand(offset));
|
||||
|
|
@ -6608,7 +6603,7 @@ void visit_tex(isel_context *ctx, nir_tex_instr *instr)
|
|||
if (has_lod)
|
||||
args.emplace_back(lod);
|
||||
|
||||
Operand arg;
|
||||
Temp arg;
|
||||
if (args.size() > 1) {
|
||||
aco_ptr<Pseudo_instruction> vec{create_instruction<Pseudo_instruction>(aco_opcode::p_create_vector, Format::PSEUDO, args.size(), 1)};
|
||||
unsigned size = 0;
|
||||
|
|
@ -6620,12 +6615,20 @@ void visit_tex(isel_context *ctx, nir_tex_instr *instr)
|
|||
Temp tmp = bld.tmp(rc);
|
||||
vec->definitions[0] = Definition(tmp);
|
||||
ctx->block->instructions.emplace_back(std::move(vec));
|
||||
arg = Operand(tmp);
|
||||
arg = tmp;
|
||||
} else {
|
||||
assert(args[0].isTemp());
|
||||
arg = Operand(as_vgpr(ctx, args[0].getTemp()));
|
||||
arg = as_vgpr(ctx, args[0].getTemp());
|
||||
}
|
||||
|
||||
/* we don't need the bias, sample index, compare value or offset to be
|
||||
* computed in WQM but if the p_create_vector copies the coordinates, then it
|
||||
* needs to be in WQM */
|
||||
if (!(has_ddx && has_ddy) && !has_lod && !level_zero &&
|
||||
instr->sampler_dim != GLSL_SAMPLER_DIM_MS &&
|
||||
instr->sampler_dim != GLSL_SAMPLER_DIM_SUBPASS_MS)
|
||||
arg = emit_wqm(ctx, arg, bld.tmp(arg.regClass()), true);
|
||||
|
||||
if (instr->sampler_dim == GLSL_SAMPLER_DIM_BUF) {
|
||||
//FIXME: if (ctx->abi->gfx9_stride_size_workaround) return ac_build_buffer_load_format_gfx9_safe()
|
||||
|
||||
|
|
@ -6757,7 +6760,7 @@ void visit_tex(isel_context *ctx, nir_tex_instr *instr)
|
|||
}
|
||||
|
||||
tex.reset(create_instruction<MIMG_instruction>(opcode, Format::MIMG, 3, 1));
|
||||
tex->operands[0] = arg;
|
||||
tex->operands[0] = Operand(arg);
|
||||
tex->operands[1] = Operand(resource);
|
||||
tex->operands[2] = Operand(sampler);
|
||||
tex->dim = dim;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue