diff --git a/src/freedreno/ir3/ir3_image.c b/src/freedreno/ir3/ir3_image.c index 23a34398088..f52c188944a 100644 --- a/src/freedreno/ir3/ir3_image.c +++ b/src/freedreno/ir3/ir3_image.c @@ -116,7 +116,7 @@ type_t ir3_get_type_for_image_intrinsic(const nir_intrinsic_instr *instr) { const nir_intrinsic_info *info = &nir_intrinsic_infos[instr->intrinsic]; - int bit_size = info->has_dest ? nir_dest_bit_size(instr->dest) : 32; + int bit_size = info->has_dest ? nir_dest_bit_size(instr->dest) : nir_src_bit_size(instr->src[3]); nir_alu_type type = nir_type_uint; switch (instr->intrinsic) { diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index 1b6bbe5ce0a..1fbc113a8ad 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -755,6 +755,8 @@ ir3_nir_lower_variant(struct ir3_shader_variant *so, nir_shader *s) (1 << nir_tex_src_ddy), ~0); + OPT(s, nir_fold_16bit_image_load_store_conversions); + /* Now that we stripped off the 16-bit conversions, legalize so that we * don't have a mix of 16- and 32-bit args that will need to be * collected together in the coordinate vector.