intel/fs: fix bindless/shared surface mistake

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 068bf1378d ("intel/fs: enable SSBO accesses through the bindless heap")
Tested-by: Karol Herbst <kherbst@redhat.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23536>
This commit is contained in:
Lionel Landwerlin
2023-06-09 01:05:34 +03:00
committed by Marge Bot
parent b3b12c2c27
commit 0cd9f0c3d3
2 changed files with 9 additions and 5 deletions

View File

@@ -373,7 +373,8 @@ public:
nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_surface_atomic(const brw::fs_builder &bld, void nir_emit_surface_atomic(const brw::fs_builder &bld,
nir_intrinsic_instr *instr, nir_intrinsic_instr *instr,
fs_reg surface); fs_reg surface,
bool bindless_surface);
void nir_emit_global_atomic(const brw::fs_builder &bld, void nir_emit_global_atomic(const brw::fs_builder &bld,
nir_intrinsic_instr *instr); nir_intrinsic_instr *instr);
void nir_emit_texture(const brw::fs_builder &bld, void nir_emit_texture(const brw::fs_builder &bld,

View File

@@ -3730,7 +3730,8 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
case nir_intrinsic_shared_atomic: case nir_intrinsic_shared_atomic:
case nir_intrinsic_shared_atomic_swap: case nir_intrinsic_shared_atomic_swap:
nir_emit_surface_atomic(bld, instr, brw_imm_ud(GFX7_BTI_SLM)); nir_emit_surface_atomic(bld, instr, brw_imm_ud(GFX7_BTI_SLM),
false /* bindless */);
break; break;
case nir_intrinsic_load_shared: { case nir_intrinsic_load_shared: {
@@ -5230,7 +5231,8 @@ fs_visitor::nir_emit_intrinsic(const fs_builder &bld, nir_intrinsic_instr *instr
case nir_intrinsic_ssbo_atomic: case nir_intrinsic_ssbo_atomic:
case nir_intrinsic_ssbo_atomic_swap: case nir_intrinsic_ssbo_atomic_swap:
nir_emit_surface_atomic(bld, instr, nir_emit_surface_atomic(bld, instr,
get_nir_buffer_intrinsic_index(bld, instr)); get_nir_buffer_intrinsic_index(bld, instr),
get_nir_src_bindless(instr->src[0]));
break; break;
case nir_intrinsic_get_ssbo_size: { case nir_intrinsic_get_ssbo_size: {
@@ -6146,7 +6148,8 @@ expand_to_32bit(const fs_builder &bld, const fs_reg &src)
void void
fs_visitor::nir_emit_surface_atomic(const fs_builder &bld, fs_visitor::nir_emit_surface_atomic(const fs_builder &bld,
nir_intrinsic_instr *instr, nir_intrinsic_instr *instr,
fs_reg surface) fs_reg surface,
bool bindless)
{ {
enum lsc_opcode op = lsc_aop_for_nir_intrinsic(instr); enum lsc_opcode op = lsc_aop_for_nir_intrinsic(instr);
int num_data = lsc_op_num_data_values(op); int num_data = lsc_op_num_data_values(op);
@@ -6168,7 +6171,7 @@ fs_visitor::nir_emit_surface_atomic(const fs_builder &bld,
fs_reg dest = get_nir_dest(instr->dest); fs_reg dest = get_nir_dest(instr->dest);
fs_reg srcs[SURFACE_LOGICAL_NUM_SRCS]; fs_reg srcs[SURFACE_LOGICAL_NUM_SRCS];
srcs[get_nir_src_bindless(instr->src[0]) ? srcs[bindless ?
SURFACE_LOGICAL_SRC_SURFACE_HANDLE : SURFACE_LOGICAL_SRC_SURFACE_HANDLE :
SURFACE_LOGICAL_SRC_SURFACE] = surface; SURFACE_LOGICAL_SRC_SURFACE] = surface;
srcs[SURFACE_LOGICAL_SRC_IMM_DIMS] = brw_imm_ud(1); srcs[SURFACE_LOGICAL_SRC_IMM_DIMS] = brw_imm_ud(1);