From aa732f6f3072b02c1d7e89e8bb1e9079102d97a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 18 Jan 2025 17:56:03 -0500 Subject: [PATCH] nir/group_loads: handle more loads Part-of: --- src/compiler/nir/nir_group_loads.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/compiler/nir/nir_group_loads.c b/src/compiler/nir/nir_group_loads.c index 867c7601a84..64942bf6d55 100644 --- a/src/compiler/nir/nir_group_loads.c +++ b/src/compiler/nir/nir_group_loads.c @@ -76,24 +76,35 @@ static nir_instr * get_intrinsic_resource(nir_intrinsic_instr *intr) { /* This is also the list of intrinsics that are grouped. */ - /* load_ubo is ignored because it's usually cheap. */ switch (intr->intrinsic) { + /* Image loads. */ case nir_intrinsic_image_load: case nir_intrinsic_image_deref_load: + case nir_intrinsic_bindless_image_load: case nir_intrinsic_image_sparse_load: case nir_intrinsic_image_deref_sparse_load: - /* Group image_size too because it has the same latency as cache hits. */ - case nir_intrinsic_image_samples_identical: - case nir_intrinsic_image_deref_samples_identical: - case nir_intrinsic_bindless_image_samples_identical: - case nir_intrinsic_image_size: - case nir_intrinsic_image_deref_size: - case nir_intrinsic_bindless_image_load: case nir_intrinsic_bindless_image_sparse_load: - case nir_intrinsic_load_ssbo: + /* Fragment mask loads. (samples_identical also loads it) */ case nir_intrinsic_image_fragment_mask_load_amd: case nir_intrinsic_image_deref_fragment_mask_load_amd: case nir_intrinsic_bindless_image_fragment_mask_load_amd: + case nir_intrinsic_image_samples_identical: + case nir_intrinsic_image_deref_samples_identical: + case nir_intrinsic_bindless_image_samples_identical: + /* Queries */ + case nir_intrinsic_image_size: + case nir_intrinsic_image_deref_size: + case nir_intrinsic_bindless_image_size: + case nir_intrinsic_image_samples: + case nir_intrinsic_image_deref_samples: + case nir_intrinsic_bindless_image_samples: + case nir_intrinsic_image_levels: + case nir_intrinsic_image_deref_levels: + case nir_intrinsic_bindless_image_levels: + /* Other loads. */ + /* load_ubo is ignored because it's usually cheap. */ + case nir_intrinsic_load_ssbo: + case nir_intrinsic_load_global: return intr->src[0].ssa->parent_instr; default: return NULL;