intel/nir: add options to storage image lowering

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Ivan Briano <ivan.briano@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22302>
This commit is contained in:
Lionel Landwerlin
2023-04-04 20:42:39 +03:00
committed by Marge Bot
parent d4f498a583
commit d04d701cc6
6 changed files with 57 additions and 12 deletions

View File

@@ -130,8 +130,17 @@ bool brw_nir_lower_conversions(nir_shader *nir);
bool brw_nir_lower_shading_rate_output(nir_shader *nir);
struct brw_nir_lower_storage_image_opts {
const struct intel_device_info *devinfo;
bool lower_loads;
bool lower_stores;
bool lower_atomics;
bool lower_get_size;
};
bool brw_nir_lower_storage_image(nir_shader *nir,
const struct intel_device_info *devinfo);
const struct brw_nir_lower_storage_image_opts *opts);
bool brw_nir_lower_mem_access_bit_sizes(nir_shader *shader,
const struct

View File

@@ -686,15 +686,19 @@ brw_nir_lower_storage_image_instr(nir_builder *b,
{
if (instr->type != nir_instr_type_intrinsic)
return false;
const struct intel_device_info *devinfo = cb_data;
const struct brw_nir_lower_storage_image_opts *opts = cb_data;
nir_intrinsic_instr *intrin = nir_instr_as_intrinsic(instr);
switch (intrin->intrinsic) {
case nir_intrinsic_image_deref_load:
return lower_image_load_instr(b, devinfo, intrin);
if (opts->lower_loads)
return lower_image_load_instr(b, opts->devinfo, intrin);
return false;
case nir_intrinsic_image_deref_store:
return lower_image_store_instr(b, devinfo, intrin);
if (opts->lower_stores)
return lower_image_store_instr(b, opts->devinfo, intrin);
return false;
case nir_intrinsic_image_deref_atomic_add:
case nir_intrinsic_image_deref_atomic_imin:
@@ -706,10 +710,14 @@ brw_nir_lower_storage_image_instr(nir_builder *b,
case nir_intrinsic_image_deref_atomic_xor:
case nir_intrinsic_image_deref_atomic_exchange:
case nir_intrinsic_image_deref_atomic_comp_swap:
return lower_image_atomic_instr(b, devinfo, intrin);
if (opts->lower_atomics)
return lower_image_atomic_instr(b, opts->devinfo, intrin);
return false;
case nir_intrinsic_image_deref_size:
return lower_image_size_instr(b, devinfo, intrin);
if (opts->lower_get_size)
return lower_image_size_instr(b, opts->devinfo, intrin);
return false;
default:
/* Nothing to do */
@@ -719,7 +727,7 @@ brw_nir_lower_storage_image_instr(nir_builder *b,
bool
brw_nir_lower_storage_image(nir_shader *shader,
const struct intel_device_info *devinfo)
const struct brw_nir_lower_storage_image_opts *opts)
{
bool progress = false;
@@ -733,7 +741,7 @@ brw_nir_lower_storage_image(nir_shader *shader,
progress |= nir_shader_instructions_pass(shader,
brw_nir_lower_storage_image_instr,
nir_metadata_none,
(void *)devinfo);
(void *)opts);
return progress;
}