From 02b124846f8dfb5a209d84ab348a032bffff7198 Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Tue, 17 Sep 2024 10:41:16 +0300 Subject: [PATCH] brw: fix TGM messages to use cmask lsc opcodes This is a restriction for TGM. Signed-off-by: Lionel Landwerlin Fixes: b55f7716 ("intel/brw: Switch to emitting MEMORY_*_LOGICAL opcodes") Reviewed-by: Kenneth Graunke Reviewed-by: Sagar Ghuge Part-of: --- src/intel/compiler/brw_lower_logical_sends.cpp | 6 ++++-- src/intel/compiler/brw_nir.c | 12 ++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/intel/compiler/brw_lower_logical_sends.cpp b/src/intel/compiler/brw_lower_logical_sends.cpp index 21d671cdbb4..951694a4793 100644 --- a/src/intel/compiler/brw_lower_logical_sends.cpp +++ b/src/intel/compiler/brw_lower_logical_sends.cpp @@ -1545,8 +1545,10 @@ lower_lsc_memory_logical_send(const fs_builder &bld, fs_inst *inst) } assert(inst->sfid); - inst->desc = lsc_msg_desc(devinfo, op, binding_type, addr_size, - data_size, components, transpose, cache_mode); + inst->desc = lsc_msg_desc(devinfo, op, binding_type, addr_size, data_size, + lsc_opcode_has_cmask(op) ? + (1 << components) - 1 : components, + transpose, cache_mode); /* Set up extended descriptors, fills src[0] and src[1]. */ setup_lsc_surface_descriptors(bld, inst, inst->desc, binding); diff --git a/src/intel/compiler/brw_nir.c b/src/intel/compiler/brw_nir.c index d6962e3614b..7035c244d98 100644 --- a/src/intel/compiler/brw_nir.c +++ b/src/intel/compiler/brw_nir.c @@ -2042,8 +2042,6 @@ enum lsc_opcode lsc_op_for_nir_intrinsic(const nir_intrinsic_instr *intrin) { switch (intrin->intrinsic) { - case nir_intrinsic_image_load: - case nir_intrinsic_bindless_image_load: case nir_intrinsic_load_ssbo: case nir_intrinsic_load_shared: case nir_intrinsic_load_global: @@ -2058,8 +2056,6 @@ lsc_op_for_nir_intrinsic(const nir_intrinsic_instr *intrin) case nir_intrinsic_load_scratch: return LSC_OP_LOAD; - case nir_intrinsic_image_store: - case nir_intrinsic_bindless_image_store: case nir_intrinsic_store_ssbo: case nir_intrinsic_store_shared: case nir_intrinsic_store_global: @@ -2069,6 +2065,14 @@ lsc_op_for_nir_intrinsic(const nir_intrinsic_instr *intrin) case nir_intrinsic_store_scratch: return LSC_OP_STORE; + case nir_intrinsic_image_load: + case nir_intrinsic_bindless_image_load: + return LSC_OP_LOAD_CMASK; + + case nir_intrinsic_image_store: + case nir_intrinsic_bindless_image_store: + return LSC_OP_STORE_CMASK; + default: assert(nir_intrinsic_has_atomic_op(intrin)); break;