nir: change 16bit image dest folding option to per type
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21404>
This commit is contained in:
@@ -5566,7 +5566,8 @@ struct nir_fold_tex_srcs_options {
|
||||
struct nir_fold_16bit_tex_image_options {
|
||||
nir_rounding_mode rounding_mode;
|
||||
nir_alu_type fold_tex_dest_types;
|
||||
bool fold_image_load_store_data;
|
||||
nir_alu_type fold_image_dest_types;
|
||||
bool fold_image_store_data;
|
||||
bool fold_image_srcs;
|
||||
unsigned fold_srcs_options_count;
|
||||
struct nir_fold_tex_srcs_options *fold_srcs_options;
|
||||
|
@@ -886,11 +886,14 @@ fold_16bit_destination(nir_ssa_def *ssa, nir_alu_type dest_type,
|
||||
}
|
||||
|
||||
static bool
|
||||
fold_16bit_load_data(nir_builder *b, nir_intrinsic_instr *instr,
|
||||
unsigned exec_mode, nir_rounding_mode rdm)
|
||||
fold_16bit_image_dest(nir_intrinsic_instr *instr, unsigned exec_mode,
|
||||
nir_alu_type allowed_types, nir_rounding_mode rdm)
|
||||
{
|
||||
nir_alu_type dest_type = nir_intrinsic_dest_type(instr);
|
||||
|
||||
if (!(nir_alu_type_get_base_type(dest_type) & allowed_types))
|
||||
return false;
|
||||
|
||||
if (!fold_16bit_destination(&instr->dest.ssa, dest_type, exec_mode, rdm))
|
||||
return false;
|
||||
|
||||
@@ -1016,7 +1019,7 @@ fold_16bit_tex_image(nir_builder *b, nir_instr *instr, void *params)
|
||||
case nir_intrinsic_bindless_image_store:
|
||||
case nir_intrinsic_image_deref_store:
|
||||
case nir_intrinsic_image_store:
|
||||
if (options->fold_image_load_store_data)
|
||||
if (options->fold_image_store_data)
|
||||
progress |= fold_16bit_store_data(b, intrinsic);
|
||||
if (options->fold_image_srcs)
|
||||
progress |= fold_16bit_image_srcs(b, intrinsic, 4);
|
||||
@@ -1024,8 +1027,10 @@ fold_16bit_tex_image(nir_builder *b, nir_instr *instr, void *params)
|
||||
case nir_intrinsic_bindless_image_load:
|
||||
case nir_intrinsic_image_deref_load:
|
||||
case nir_intrinsic_image_load:
|
||||
if (options->fold_image_load_store_data)
|
||||
progress |= fold_16bit_load_data(b, intrinsic, exec_mode, options->rounding_mode);
|
||||
if (options->fold_image_dest_types)
|
||||
progress |= fold_16bit_image_dest(intrinsic, exec_mode,
|
||||
options->fold_image_dest_types,
|
||||
options->rounding_mode);
|
||||
if (options->fold_image_srcs)
|
||||
progress |= fold_16bit_image_srcs(b, intrinsic, 3);
|
||||
break;
|
||||
|
Reference in New Issue
Block a user