mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 19:50:12 +01:00
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:
parent
d1a81db9ee
commit
35d6e290e4
7 changed files with 16 additions and 6 deletions
|
|
@ -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],
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue