Find a file
Iago Toral Quiroga ac11e00b15 nir/serialize: make alu src deserialization consistent for unused swizzles
Currently we have 3 paths for ALU serialization/deserialization in NIR:

1. If the ALU is qualified as packed_src_ssa_16bit (identity swizzle)
  - The write will store an object index only.
  - The read will only load the swizzles actually used, the rest are 0.
2. If the ALU is not qualified as packed_src_ssa_16bit, we have two cases:
  2.1 Up to vec4:
    - The write stores all 4 swizzle components.
    - The read loads all 4 swizzle components.
  2.2 vec8/16
    - The write stores only swizzle components used, the rest are 0.
    - The read loads only swizzle components used, the rest are 0.

This inconsistency in how these paths encode/decode unsused swizzle components
can cause issues in some scenarios where a backend compiler may receive
functionally equivalent NIR shaders from Mesa that won't produce the same sha1,
leading to unnecessary cache misses.

This patch makes path 2.1 always encode and decode unused swizzle components
as 0, making it consistent with the other paths.

This fixes issues where sometimes backends need to compile a shader twice
before it is effectively retrieved from the disk cache. This has been
observed at least with V3d and Panfrost.

The problem occurs when an ALU src with unused swizzle components is serialized
in the Mesa frontend using path 1, but when it later hits the backend it is
serialized using path 2.1. The backend uses the sha1 of the serialized NIR for
the cache key. On the second execution the Mesa frontend has a cache hit and
when it deserializes the alu src, it sets its unused components to 0 but that
will cause the backend to have a cache miss since that NIR doesn't match the one
it cached on the first execution.

By always making unused swizzle components decode and encode consistently to 0
in all paths we ensure the issue never happens and that NIR variants that only
differ in swizzle components that are not used lead to cache hits.

Reviewed-by: Alejandro Piñeiro <apinheiro@igalia.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Eric R. Smith <eric.smith@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37218>
2025-09-16 07:33:34 +02:00
.ci-farms Revert "ci: disable Collabora's farm due to maintenance" 2025-09-08 16:16:52 +00:00
.ci-farms-disabled Revert "ci: disable Collabora's farm due to maintenance" 2025-09-08 16:16:52 +00:00
.github/workflows meson: remove unused osmesa option 2025-06-23 06:42:50 +00:00
.gitlab docs: update gitlab docs urls 2025-02-23 00:31:59 +01:00
.gitlab-ci ci/crosvm: Add log sections for crosvm 2025-09-15 08:06:11 +00:00
.marge/hooks ci: pipeline_message: reset empty errors 2025-01-07 05:08:10 +00:00
android android: Only include libdrm_intel for i915 as iris do not depend on it 2025-09-04 07:53:36 +00:00
bin meson: Getting symbols-check.py works for mingw 2025-09-13 08:23:07 +00:00
build-support meson: move tsan-blacklist.txt to build-support with the other build support files 2024-05-01 07:05:12 +00:00
docs zink: support NV_representative_fragment_test 2025-09-13 11:28:44 +00:00
include meson: Remove non-unused inc_d3d9 2025-09-13 08:23:07 +00:00
licenses licenses: add missing licenses 2025-01-08 20:37:51 +00:00
src nir/serialize: make alu src deserialization consistent for unused swizzles 2025-09-16 07:33:34 +02:00
subprojects subprojects: fix ignore exception for files under packagefiles/ 2025-08-25 15:55:53 +00:00
.clang-format meson: enable the clang-format target 2023-05-29 11:57:08 +00:00
.clang-format-ignore ci: enforce formatting for RADV & ACO 2023-06-16 19:59:52 +00:00
.clang-format-include rocket: Initial commit of a driver for Rockchip's NPU 2025-07-28 08:06:38 +02:00
.dir-locals.el
.editorconfig editorconfig: move OpenCL configuration to root 2025-08-30 22:49:08 -07:00
.git-blame-ignore-revs freedreno: Add register renaming to .git-blame-ignore-revs 2025-07-03 12:50:04 +00:00
.gitattributes gitlab: Highlight .cl as C 2023-11-02 11:37:46 +00:00
.gitignore .gitignore: Add KDevelop *.kdev4 2025-07-24 16:12:10 +00:00
.gitlab-ci.yml ci/ci-tron: uprev the job submission template 2025-08-25 12:46:54 +00:00
.graphqlrc.yml
.mailmap mailmap: Update my name 2025-09-09 16:44:38 +00:00
.mr-label-maker.yml mr-label-maker.yml: remove remaining osmesa occurrences 2025-06-23 06:42:50 +00:00
.shellcheckrc ci: move shellcheck options to .shellcheckrc 2024-10-24 22:43:03 +00:00
CODEOWNERS intel: update code owners 2025-08-31 15:38:27 +00:00
meson.build meson: fix libcl assert() reproducibility 2025-09-15 12:18:37 +00:00
meson.options Remove VDPAU 2025-09-10 12:33:57 +00:00
README.rst docs: Match README installation guide with meson.rst 2024-07-27 11:53:53 +00:00
rustfmt.toml mesa: Add rustfmt.toml 2024-11-18 22:29:14 +00:00
VERSION VERSION: bump to 25.3 2025-07-16 13:50:24 +00:00

`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.