mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 07:08:04 +02:00
read-only mirror of https://gitlab.freedesktop.org/mesa/mesa
This adds a new bytewise copy propagation pass which chews through MKVEC and SWZ instructions. The word-based copy propagation pass only existed to chew through SPLIT/COLLECT but MKVEC is COLLECT for bytes and we had nothing to help with that. This is actually two passes in one: Byte propagation and swizzle propagation. Any time we see a MKVEC, we look at its sources only as bytes and chase individual bytes back, through other MKVEC and SWZ, to their generating instruction and make the MKVEC only consume the original bytes. If the MKVEC happens to construct something that's just a swizzle of another def (this is fairly common), we record that as well. The idea here is that a lot of MKVEC just consume other MKVEC and we can get rid of the intermediate ones or even the whole chain if it just ends up being a swizzle in the end. For SWZ instructions, we first look at them like a MKVEC of the individual bytes they consume. If that doesn't yield a single swizzled word, we then crawl through the words table, just accumulating swizzles. This gives us the best (closest to the generating instructions) coherent word. We could also replace SWZ with MKVEC and just do byte propagation but MKVEC is often 2 instructions whereas SWZ is often one (or folded into a source) so this is probably the better balance. Finally, we not only replace the MKVEC and SWZ instructions but we also attempt to propagate swizzles into individual ALU op sources. For v4i8 ops, this often fails since the full generality isn't always available but for fp16, we can almost always fold the swizzle into the consuming instruction. Reviewed-by: Lorenzo Rossi <lorenzo.rossi@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/40720> |
||
|---|---|---|
| .ci-farms | ||
| .ci-farms-disabled | ||
| .github/workflows | ||
| .gitlab | ||
| .gitlab-ci | ||
| .marge/hooks | ||
| android | ||
| bin | ||
| build-support | ||
| docs | ||
| include | ||
| licenses | ||
| 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 | ||
| .mr-label-maker.yml | ||
| .shellcheckrc | ||
| clippy.toml | ||
| CODEOWNERS | ||
| meson.build | ||
| meson.options | ||
| README.rst | ||
| rustfmt.toml | ||
| 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://docs.mesa3d.org/install.html>`_), but the recommended way is to use Meson (`docs/meson.rst <https://docs.mesa3d.org/meson.html>`_): .. code-block:: sh $ meson setup build $ ninja -C build/ $ sudo ninja -C build/ 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://docs.mesa3d.org/bugs.html>`_). Contributing ------------ Contributions are welcome, and step-by-step instructions can be found in our documentation (`docs/submittingpatches.rst <https://docs.mesa3d.org/submittingpatches.html>`_). Note that Mesa uses gitlab for patches submission, review and discussions.