freedreno/ir3: Don't leave holes the UBO upload plan.
authorEric Anholt <eric@anholt.net>
Tue, 6 Oct 2020 20:39:32 +0000 (13:39 -0700)
committerMarge Bot <eric+marge@anholt.net>
Thu, 8 Oct 2020 20:29:02 +0000 (20:29 +0000)
commit624a2aad66999ca53b05fd13c0957de8e59ac61e
tree2ea6fe9b2a2cfb48873e470a96ca0e86d9114955
parentddf468f96f8f0070da5fff50acf9e4cc0f7fd453
freedreno/ir3: Don't leave holes the UBO upload plan.

Shaders may not use a particular region of a UBO in a given shader (think
UBOs shared between stages, or between shaders), and by just always
extending the existing range for a given UBO, we'd waste bandwidth
uploading it, and also waste our precious const space in storing the
unused data.

Instead, only upload exactly the ranges we can use, and merge ranges when
they're neighbors.  We may end up with more upload packets, but the
bandwidth savings is surely going to be worth it (and if find we want a
distance threshold for merging with nearby uploads, that would be easy to
add).

total instructions in shared programs: 9266114 -> 9255092 (-0.12%)
total full in shared programs: 343162 -> 341709 (-0.42%)
total constlen in shared programs: 1454368 -> 1275236 (-12.32%)
total cat6 in shared programs: 93073 -> 82589 (-11.26%)
total (ss) in shared programs: 212402 -> 206404 (-2.82%)
total (sy) in shared programs: 122905 -> 114007 (-7.24%)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7036>
src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c