mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-18 06:10:36 +01:00
read-only mirror of https://gitlab.freedesktop.org/mesa/mesa
There are two problems with shared register allocation at the moment: 1. We weren't modelling physical edges correctly, and once we do, the current hack in RA for handling them won't work correctly. This means live-range splitting doesn't work. I've tried various strategies but none of them seems to fix this. 2. Spilling of shared registers to non-shared registers isn't implemented. Spilling of shared regs is significantly simpler than spilling non-shared regs, because (1) spilling and unspilling is significantly cheaper, just a single mov, and (2) we can swap "stack slots" (actually non-shared regs) so all the complexity of parallel copy handling isn't necessary. This means that it's much easier to integrate RA and spilling, while still using the tree-scan framework, so that we can spill instead of splitting live ranges. The other issue, of phi nodes with physical edges, we can handle by spilling those phis earlier. For this to work, we need to accurately insert physical edges based on divergence analysis or else every phi node would involve physical edges, which later commits will accomplish. This commit adds a shared register allocation pass which is a severely-cut-down version of RA and spilling. Everything to do with live range splitting is cut from RA, and everything to do with parallel copy handling and for spilling we simply always spill as long as soon as we encounter a case where it's necessary. This could be improved, especially the spilling strategy, but for now it keeps the pass simple and cuts down on code duplication. Unfortunately there's still some shared boilerplate with regular RA which seems unavoidable however. The new RA requires us to redo liveness information, which is significantly expensive, so we keep the ability of the old RA to handle shared registers and only use the new RA when it may be required: either something potentially requiring live-range splitting, or a too-high shared register limit. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22072> |
||
|---|---|---|
| .ci-farms | ||
| .ci-farms-disabled | ||
| .github/workflows | ||
| .gitlab | ||
| .gitlab-ci | ||
| android | ||
| bin | ||
| build-support | ||
| docs | ||
| include | ||
| src | ||
| subprojects | ||
| .clang-format | ||
| .clang-format-ignore | ||
| .clang-format-include | ||
| .dir-locals.el | ||
| .editorconfig | ||
| .git-blame-ignore-revs | ||
| .gitattributes | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .graphqlrc.yml | ||
| .mailmap | ||
| CODEOWNERS | ||
| meson.build | ||
| meson_options.txt | ||
| README.rst | ||
| VERSION | ||
`Mesa <https://mesa3d.org>`_ - The 3D Graphics Library ====================================================== Source ------ This repository lives at https://gitlab.freedesktop.org/mesa/mesa. Other repositories are likely forks, and code found there is not supported. Build & install --------------- You can find more information in our documentation (`docs/install.rst <https://mesa3d.org/install.html>`_), but the recommended way is to use Meson (`docs/meson.rst <https://mesa3d.org/meson.html>`_): .. code-block:: sh $ mkdir build $ cd build $ meson .. $ sudo ninja install Support ------- Many Mesa devs hang on IRC; if you're not sure which channel is appropriate, you should ask your question on `OFTC's #dri-devel <irc://irc.oftc.net/dri-devel>`_, someone will redirect you if necessary. Remember that not everyone is in the same timezone as you, so it might take a while before someone qualified sees your question. To figure out who you're talking to, or which nick to ping for your question, check out `Who's Who on IRC <https://dri.freedesktop.org/wiki/WhosWho/>`_. The next best option is to ask your question in an email to the mailing lists: `mesa-dev\@lists.freedesktop.org <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>`_ Bug reports ----------- If you think something isn't working properly, please file a bug report (`docs/bugs.rst <https://mesa3d.org/bugs.html>`_). Contributing ------------ Contributions are welcome, and step-by-step instructions can be found in our documentation (`docs/submittingpatches.rst <https://mesa3d.org/submittingpatches.html>`_). Note that Mesa uses gitlab for patches submission, review and discussions.