Find a file
Francisco Jerez c3cdcd09ed
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run
intel/brw: Add NIR pass to vectorize dot products into DPAS matrix multiplications.
Add a new optimization pass that identifies sequences of scalar dot
product operations and combines them into DPAS (Dot Product Accumulate
Systolic) matrix multiplication instructions for XeHP+ EUs that have a
systolic array pipeline (AKA XMX engine).

This is possible because a matrix multiplication as performed by DPAS
can be expressed like:

  E^i_k = D^i_k + Sum_j A^i_j B^j_k

I.e. each scalar component of a matrix multiplication is just a
(possibly large) dot product.  This pass identifies such chains of
sdot_4x8_iadd dot products in the program and bins them according to
the A and B arguments used.  Sets of dot products with consecutive
components are transformed into a matrix product for each densely
occupied interval of indices within each bin, as long as there is an
efficient way to transpose one of the arguments in the register file.

This enables programs to opportunistically take advantage of the
systolic array pipeline for linear arithmetic, which has massively
greater throughput than the regular FPUs (roughly a factor of 4x the
throughput for the specific instructions replaced currently), without
the application having to be updated in order to take advantage of it
through a matrix multiplication API like KHR_cooperative_matrix.

The immediate motivation for this is getting the open source driver to
accelerate the matrix multiplications used for inference by the XeSS
ML-driven upscaling library, since the Mesa driver was currently
limited to the generic HLSL path that doesn't take advantage of the
XMX pipeline.  Alternative AI-driven upscaling libraries can be
supported in theory though this hasn't been pursued yet, and there are
some assumptions in the optimization pass that might get in the way
currently:

 - Currently only the sdot_4x8_iadd intrinsic is supported for no
   particular reason other than it being the intrinsic generated by
   the XeSS library in its multivendor path.  It would be
   straightforward to add support for additional types supported by
   the systolic pipeline.

 - Currently one of the arguments of the dot products is restricted to
   be an SSBO load because that's what we encounter in the XeSS
   library, but any other kind of memory load intrinsic could be
   supported easily.

 - Also accidental is the current limitation to run on Xe2+
   hardware. Getting it to work on XeHP (e.g. DG2) is theoretically
   possible beyond some minor differences so it will probably be a
   future area for improvement.

 - The limitation of the shader subgroup size to 16 done at the end of
   the optimization pass is less accidental, because on all Intel Xe
   platforms released so far the DPAS instruction is limited to run at
   a fixed execution width (8 on XeHP and 16 on Xe2-3), so the backend
   would need a way to expose variable-width DPAS intrinsics e.g. by
   lowering them using SIMD splitting.  I have some code to try to
   achieve that, but the naïf SIMD splitting approach of DPAS
   instructions appears to hurt more cases than it helps so I don't
   have a ready solution to lift this restriction yet.

Evaluating the impact of this on the performance of XeSS kernels using
our internal microbenchmarks shows a performance improvement for XeSS
inference between 26% and 44% depending on the quality preset and
resolution, with a geomean improvement of 35% across the rendering
modes tested.

Reviewed-by: Caio Oliveira <caio.oliveira@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41814>
2026-06-15 08:10:51 +00:00
.ci-farms ci: disable Collabora's farm due to maintenance 2026-06-15 06:47:55 +00:00
.ci-farms-disabled ci: disable Collabora's farm due to maintenance 2026-06-15 06:47:55 +00:00
.github/workflows meson: remove unused osmesa option 2025-06-23 06:42:50 +00:00
.gitlab radv: introduce RADV_EXPERIMENTAL envvar for experimental features 2026-03-30 07:27:01 +00:00
.gitlab-ci Uprev ANGLE to 8e09325ebad45c7e11630a79754361e965e5fab0 2026-06-12 18:04:00 +00:00
.marge/hooks marge/pipeline_message: print details for any pipeline that hasn't succeeded 2026-02-13 14:44:30 +00:00
android amd/virtio: enable Android amdgpu-virtio build option 2026-06-08 08:29:43 +00:00
bin Revert "people: update Marek's email" 2026-06-12 13:43:04 +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 panvk: Advertise VK_KHR_compute_shader_derivatives 2026-06-11 23:58:56 +00:00
include intel/dev: update PTL device names 2026-06-11 01:02:57 +00:00
licenses licenses: add missing licenses 2025-01-08 20:37:51 +00:00
src intel/brw: Add NIR pass to vectorize dot products into DPAS matrix multiplications. 2026-06-15 08:10:51 +00:00
subprojects subprojects: Pull in the Rust xml crate 2026-06-02 21:19:26 +00:00
.clang-format meson: Restore .clang-format for ninja clang-format target 2026-02-02 13:30:55 +00:00
.clang-format-ignore ethosu: Switch to the weight encoder from Regor 2026-03-23 07:45:55 +00:00
.clang-format-include kk: Enable code formatting enforcement 2026-05-25 15:30:32 +00:00
.dir-locals.el
.editorconfig editorconfig: Set for glsl files 2025-11-14 19:31:17 +00:00
.git-blame-ignore-revs radv: Add re-format commit to .git-blame-ignore-revs 2025-11-12 07:55:36 +00:00
.gitattributes gitlab: Highlight .cl as C 2023-11-02 11:37:46 +00:00
.gitignore Revert "add VK CTS validation report for a0 interpolation fix" 2026-02-10 18:07:18 +00:00
.gitlab-ci.yml ci: changing .gitlab-ci.yml itself also means the container jobs must exist 2026-03-18 14:19:02 +00:00
.graphqlrc.yml
.mailmap mailmap: Update my email 2026-03-12 23:36:00 +00:00
.mr-label-maker.yml mr-label-maker: Add rule for new trace replay config files 2026-05-11 08:02:05 +00:00
.shellcheckrc ci: move shellcheck options to .shellcheckrc 2024-10-24 22:43:03 +00:00
clippy.toml meson: Bump the minimum rust version to 1.85.0 2026-05-30 01:20:10 +00:00
CODEOWNERS CODEOWNERS: add Jay 2026-05-27 20:03:10 +00:00
meson.build util, llvmpipe: flush subnormals to zero on ARM/AArch64 2026-06-12 14:34:14 +00:00
meson.options tu: add option to override the build ID 2026-06-04 12:44:13 +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 26.2 2026-04-15 13:15:35 +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.