r600: Disable SB if we use the ariable length DOT

sb doesn't know about this instruction, so don't try to run the
optimizer.

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23647>
This commit is contained in:
Gert Wollny 2023-06-14 14:33:25 +02:00 committed by Marge Bot
parent 269895c674
commit b79f6ec397
5 changed files with 6 additions and 0 deletions

View file

@ -240,6 +240,7 @@ int r600_pipe_shader_create(struct pipe_context *ctx,
use_sb &= !shader->shader.uses_atomics;
use_sb &= !shader->shader.uses_images;
use_sb &= !shader->shader.uses_helper_invocation;
use_sb &= !shader->shader.disable_sb;
/* SB can't handle READ_SCRATCH properly */
use_sb &= !(shader->shader.needs_scratch_space && rscreen->b.gfx_level < R700);

View file

@ -125,6 +125,7 @@ struct r600_shader {
uint8_t atomic_base;
uint8_t rat_base;
uint8_t image_size_const_offset;
boolean disable_sb;
};
union r600_shader_key {

View file

@ -2643,6 +2643,8 @@ emit_dot(const nir_alu_instr& alu, int n, Shader& shader)
ir->set_alu_flag(alu_dst_clamp);
shader.emit_instruction(ir);
shader.set_flag(Shader::sh_disble_sb);
return true;
}

View file

@ -1567,6 +1567,7 @@ Shader::get_shader_info(r600_shader *sh_info)
sh_info->needs_scratch_space = m_flags.test(sh_needs_scratch_space);
sh_info->uses_images = m_flags.test(sh_uses_images);
sh_info->uses_atomics = m_flags.test(sh_uses_atomics);
sh_info->disable_sb = m_flags.test(sh_disble_sb);
sh_info->has_txq_cube_array_z_comp = m_flags.test(sh_txs_cube_array_comp);
sh_info->indirect_files = m_indirect_files;
do_get_shader_info(sh_info);

View file

@ -227,6 +227,7 @@ public:
sh_indirect_atomic,
sh_mem_barrier,
sh_legacy_math_rules,
sh_disble_sb,
sh_flags_count
};