diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 28559048468..7125c35aba4 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -2158,7 +2158,7 @@ v3d_optimize_nir(struct v3d_compile *c, struct nir_shader *s) nir_move_options sink_opts = nir_move_const_undef | nir_move_comparisons | nir_move_copies | - nir_move_load_ubo | nir_move_load_uniform; + nir_move_load_ubo | nir_move_load_ssbo | nir_move_load_uniform; NIR_PASS(progress, s, nir_opt_sink, sink_opts); } diff --git a/src/compiler/nir/nir_schedule.c b/src/compiler/nir/nir_schedule.c index 025a6d722ed..d9aca42f9c5 100644 --- a/src/compiler/nir/nir_schedule.c +++ b/src/compiler/nir/nir_schedule.c @@ -1016,8 +1016,17 @@ nir_schedule_get_delay(nir_instr *instr) return 1; case nir_instr_type_intrinsic: - /* XXX: Pick a large number for UBO/SSBO/image/shared loads */ - return 1; + switch (nir_instr_as_intrinsic(instr)->intrinsic) { + case nir_intrinsic_load_ubo: + case nir_intrinsic_load_ssbo: + case nir_intrinsic_load_scratch: + case nir_intrinsic_load_shared: + case nir_intrinsic_image_load: + return 50; + default: + return 1; + } + break; case nir_instr_type_tex: /* Pick some large number to try to fetch textures early and sample them