From 55c7b24899d31f4dc29ade7fa07153a39f2c3d95 Mon Sep 17 00:00:00 2001 From: Sagar Ghuge Date: Thu, 18 Jan 2024 21:23:13 -0800 Subject: [PATCH] intel/fs: Adjust destination register size for untyped atomic on Xe2+ For 16-bit data type, we are padding 16-bit and using 32-bit data type, so we need to account for the padded portion while calculating the size_written. Rework: (Rohan) - Drop unnecessary fs_builder instance Signed-off-by: Sagar Ghuge Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/compiler/brw_fs_nir.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/intel/compiler/brw_fs_nir.cpp b/src/intel/compiler/brw_fs_nir.cpp index 535f344cc5b..cad25f7df2e 100644 --- a/src/intel/compiler/brw_fs_nir.cpp +++ b/src/intel/compiler/brw_fs_nir.cpp @@ -7737,26 +7737,32 @@ fs_nir_emit_surface_atomic(nir_to_brw_state &ntb, const fs_builder &bld, } srcs[SURFACE_LOGICAL_SRC_DATA] = data; + fs_inst *inst; + unsigned size_written = 0; /* Emit the actual atomic operation */ - switch (instr->def.bit_size) { case 16: { fs_reg dest32 = bld.vgrf(BRW_TYPE_UD); - bld.emit(SHADER_OPCODE_UNTYPED_ATOMIC_LOGICAL, - retype(dest32, dest.type), - srcs, SURFACE_LOGICAL_NUM_SRCS); + inst = bld.emit(SHADER_OPCODE_UNTYPED_ATOMIC_LOGICAL, + retype(dest32, dest.type), + srcs, SURFACE_LOGICAL_NUM_SRCS); + size_written = dest32.component_size(inst->exec_size); bld.MOV(retype(dest, BRW_TYPE_UW), dest32); break; } case 32: case 64: - bld.emit(SHADER_OPCODE_UNTYPED_ATOMIC_LOGICAL, - dest, srcs, SURFACE_LOGICAL_NUM_SRCS); + inst = bld.emit(SHADER_OPCODE_UNTYPED_ATOMIC_LOGICAL, + dest, srcs, SURFACE_LOGICAL_NUM_SRCS); + size_written = dest.component_size(inst->exec_size); break; default: unreachable("Unsupported bit size"); } + + assert(size_written); + inst->size_written = size_written * instr->def.num_components; } static void