diff --git a/.pick_status.json b/.pick_status.json index a8c5dae26bd..f2e64559918 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1304,7 +1304,7 @@ "description": "rusticl/kernel: assign sampler locations before DCEing variables", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "25b8a34b48fce99164f1cb853bcde86d1cf6cba5", "notes": null diff --git a/src/gallium/frontends/rusticl/core/kernel.rs b/src/gallium/frontends/rusticl/core/kernel.rs index 05296c0cd0e..63e9f7e864c 100644 --- a/src/gallium/frontends/rusticl/core/kernel.rs +++ b/src/gallium/frontends/rusticl/core/kernel.rs @@ -458,22 +458,8 @@ fn lower_and_optimize_nir( let mut args = KernelArg::from_spirv_nir(args, nir); let mut internal_args = Vec::new(); - let dv_opts = nir_remove_dead_variables_options { - can_remove_var: Some(can_remove_var), - can_remove_var_data: ptr::null_mut(), - }; - nir_pass!( - nir, - nir_remove_dead_variables, - nir_variable_mode::nir_var_uniform - | nir_variable_mode::nir_var_image - | nir_variable_mode::nir_var_mem_constant - | nir_variable_mode::nir_var_mem_shared - | nir_variable_mode::nir_var_function_temp, - &dv_opts, - ); - - // asign locations for inline samplers + // asign locations for inline samplers. + // IMPORTANT: this needs to happen before nir_remove_dead_variables. let mut last_loc = -1; for v in nir .variables_with_mode(nir_variable_mode::nir_var_uniform | nir_variable_mode::nir_var_image) @@ -501,6 +487,21 @@ fn lower_and_optimize_nir( } } + let dv_opts = nir_remove_dead_variables_options { + can_remove_var: Some(can_remove_var), + can_remove_var_data: ptr::null_mut(), + }; + nir_pass!( + nir, + nir_remove_dead_variables, + nir_variable_mode::nir_var_uniform + | nir_variable_mode::nir_var_image + | nir_variable_mode::nir_var_mem_constant + | nir_variable_mode::nir_var_mem_shared + | nir_variable_mode::nir_var_function_temp, + &dv_opts, + ); + nir_pass!(nir, nir_lower_readonly_images_to_tex, true); nir_pass!( nir,