r600/sfn: Fix location for reading cube array image dimensions

Fixes: 79ca456b48
        r600/sfn: rewrite NIR backend

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19755>
This commit is contained in:
Gert Wollny 2022-11-15 12:50:00 +01:00 committed by Marge Bot
parent d1a81db9ee
commit 35d6e290e4
7 changed files with 16 additions and 6 deletions

View file

@ -899,7 +899,7 @@ RatInstr::emit_image_size(nir_intrinsic_instr *intrin, Shader& shader)
shader.set_flag(Shader::sh_txs_cube_array_comp);
if (const_offset) {
unsigned lookup_resid = const_offset[0].u32;
unsigned lookup_resid = const_offset[0].u32 + shader.image_size_const_offset();
shader.emit_instruction(
new AluInstr(op1_mov,
dest[2],

View file

@ -455,7 +455,7 @@ Shader::translate_from_nir(nir_shader *nir,
break;
case MESA_SHADER_KERNEL:
case MESA_SHADER_COMPUTE:
shader = new ComputeShader(key);
shader = new ComputeShader(key, BITSET_COUNT(nir->info.samplers_used));
break;
default:
return nullptr;

View file

@ -243,6 +243,8 @@ public:
PRegister emit_load_to_register(PVirtualValue src);
virtual unsigned image_size_const_offset() { return 0;}
protected:
enum ESlots {
es_face,

View file

@ -30,8 +30,9 @@
namespace r600 {
ComputeShader::ComputeShader(UNUSED const r600_shader_key& key):
Shader("CS", 0)
ComputeShader::ComputeShader(UNUSED const r600_shader_key& key, int num_samplers):
Shader("CS", 0),
m_image_size_const_offset(num_samplers)
{
}

View file

@ -33,7 +33,9 @@ namespace r600 {
class ComputeShader : public Shader {
public:
ComputeShader(const r600_shader_key& key);
ComputeShader(const r600_shader_key& key, int num_samplers);
unsigned image_size_const_offset() override { return m_image_size_const_offset;}
private:
bool do_scan_instruction(nir_instr *instr) override;
@ -61,6 +63,7 @@ private:
std::array<PRegister, 3> m_local_invocation_id{nullptr};
PRegister m_zero_register{0};
int m_image_size_const_offset{0};
};
} // namespace r600

View file

@ -51,7 +51,8 @@ FragmentShader::FragmentShader(const r600_shader_key& key):
m_pos_input(127, false),
m_fs_write_all(false),
m_apply_sample_mask(key.ps.apply_sample_id_mask),
m_rat_base(key.ps.nr_cbufs)
m_rat_base(key.ps.nr_cbufs),
m_image_size_const_offset(key.ps.image_size_const_offset)
{
}

View file

@ -39,6 +39,8 @@ public:
bool process_stage_intrinsic(nir_intrinsic_instr *intr) override;
unsigned image_size_const_offset() override { return m_image_size_const_offset;}
protected:
static const int s_max_interpolators = 6;
bool interpolators_used(int i) const { return m_interpolators_used.test(i); }
@ -91,6 +93,7 @@ private:
int m_rat_base{0};
int m_pos_driver_loc{0};
int m_face_driver_loc{0};
int m_image_size_const_offset{0};
};
class FragmentShaderR600 : public FragmentShader {