nir: Deprecate NIR_PASS_V
NIR_PASS_V
is problematic for two reasons compared to NIR_PASS
:
- It cannot check metadata. At least 1 pass in common NIR failed to handle metadata and this was missed due to this macro, caught when migrating away from the macro.
- It runs
nir_validate
regardless of whether progress was made, since it doesn't know if the pass made progress. This is surprisingly hot in CTS runs, even after optimizing nir_validate.
The solution is two-fold:
- Require all NIR passes to return progress and update metadata correctly. The vast majority already do, and those that don't should IMO be changed for their own sake.
- Replace
NIR_PASS_V(...)
withNIR_PASS(_, ...)
. This requires the pass to return progress, and thus can work likeNIR_PASS
in terms of validation.
Migrating to the replacement macro cut my deqp-runner CTS runtime by about 3%, which is quite nice.
For each part of the codebase, there will be three steps to do the migration:
- Bulk replace
NIR_PASS_V(
withNIR_PASS(_,
. - Fix all the compile errors, where passes are called that don't yet return progress. Update the passes to return progress and handle metadata.
- Fix any metadata handling bugs uncovered by the above.
As far as NIR reworks go, this is pretty straightforward, and I expect will give us a CTS runtime win across the board, along with unifying the pass macros / pass signatures and improving our metadata conversion.
Tracker for migration:
-
mesa (!26976 (merged) ) -
glsl (!26976 (merged)) -
spirv -
vulkan runtime -
nir internal -
clc -
clover -
gallium -
llvmpipe -
lavapipe -
asahi -
panfrost -
freedreno -
lima -
i915g -
nouveau -
r300 -
r600 -
vc4 -
v3d -
d3d12 -
zink -
etnaviv -
radeonsi -
iris -
crocus -
anv -
radv -
hasvk -
v3dv -
turnip -
powervr -
nvk -
panvk
Edited by Alyssa Rosenzweig