diff --git a/.pick_status.json b/.pick_status.json index 5cf61a7c429..8fb29fe0c15 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -674,7 +674,7 @@ "description": "r600/sfn: gather info and set lowering 64 bit after nir_lower_io", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "89dad5618ddb5be50a9b3dceadf8e0addc831c7c", "notes": null diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp index 719b462b588..c8cbb4315b8 100644 --- a/src/gallium/drivers/r600/sfn/sfn_nir.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_nir.cpp @@ -732,10 +732,6 @@ r600_lower_and_optimize_nir(nir_shader *sh, enum amd_gfx_level gfx_level, struct pipe_stream_output_info *so_info) { - bool lower_64bit = - gfx_level < CAYMAN && - (sh->options->lower_int64_options || sh->options->lower_doubles_options) && - ((sh->info.bit_sizes_float | sh->info.bit_sizes_int) & 64); r600::sort_uniforms(sh); NIR_PASS_V(sh, r600_nir_fix_kcache_indirect_access); @@ -765,6 +761,13 @@ r600_lower_and_optimize_nir(nir_shader *sh, (nir_lower_io_lower_64bit_to_32 | nir_lower_io_use_interpolated_input_intrinsics)); + nir_shader_gather_info(sh, nir_shader_get_entrypoint(sh)); + + bool lower_64bit_io_to_vec2 = (sh->info.bit_sizes_float | sh->info.bit_sizes_int) & 64; + bool lower_64bit = + gfx_level < CAYMAN && + (sh->options->lower_int64_options || sh->options->lower_doubles_options) && + lower_64bit_io_to_vec2; if (sh->info.stage == MESA_SHADER_FRAGMENT) NIR_PASS_V(sh, r600_lower_fs_pos_input); @@ -813,7 +816,7 @@ r600_lower_and_optimize_nir(nir_shader *sh, NIR_PASS_V(sh, r600_nir_lower_int_tg4); NIR_PASS_V(sh, r600::r600_nir_lower_tex_to_backend, gfx_level); - if ((sh->info.bit_sizes_float | sh->info.bit_sizes_int) & 64) { + if (lower_64bit_io_to_vec2) { NIR_PASS_V(sh, r600::r600_nir_split_64bit_io); NIR_PASS_V(sh, r600::r600_split_64bit_alu_and_phi); NIR_PASS_V(sh, nir_split_64bit_vec3_and_vec4); @@ -826,7 +829,7 @@ r600_lower_and_optimize_nir(nir_shader *sh, if (lower_64bit) NIR_PASS_V(sh, r600::r600_nir_64_to_vec2); - if ((sh->info.bit_sizes_float | sh->info.bit_sizes_int) & 64) + if (lower_64bit_io_to_vec2) NIR_PASS_V(sh, r600::r600_split_64bit_uniforms_and_ubo); /* Lower to scalar to let some optimization work out better */