mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-10 08:10:14 +01:00
read-only mirror of https://gitlab.freedesktop.org/mesa/mesa
The nir to tgsi translator flattens all constants in the nir shader into uint32 immediates. In the svga driver, the vgpu10 shader translator then packs all these immediates into a constant buffer, and also optimizes it to prevent repetitions by only emitting a 32-bit constant once. This can cause problems with double sized constants, since either the lower or higher 32-bits of different 64-bit constant can be identical, and in the constant buffer that repeating 32-bit value will be emitted only once, so a 64-bit constant gets split into two non-contiguous 32-bit values. When this 64-bit constant is then invoked by a double instruction live ddiv or dmul, the source register can now have invalid swizzles like .xz or .xw since its 32-bit components are not contiguous. We have seen this happen in the piglit test - spec@arb_gpu_shader_fp64@execution@glsl-fs-loop-unroll-mul-fp64 which emits invalid swizzle values for double instructions. To fix this, introduce a new option in nir to tgsi shader translator that preserves uint64 constants. When a 64-bit immediate is translated into svga shader code, its 32-bit components are contiguous and aligned in the constant buffer, so accessing them only emits valid swizzles .xy and .zw. Other drivers using the nir to tgsi shader translater should not see any change in the tgsi shader emitted unless they too explicitly invoke the keep_double_immediates option like svga. Signed-off-by: Maaz Mombasawala <maaz.mombasawala@broadcom.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33749> |
||
|---|---|---|
| .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 | ||
| 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.