mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-21 10:50:23 +01:00
read-only mirror of https://gitlab.freedesktop.org/mesa/mesa
Mesa fixed pipeline texture loading on programmable pipeline hardware emits a generic fragment shader program which contains gl_TexCoord.xyzw as a vec4 and then expects to configure the varying assignments to the shader in the pipeline command stream, to select what is wired to the XYZW fragment shader inputs. This gl_TexCoord.xyzw is turned into texture load with projection (TGSI TXP opcode, similar for NIR). Texture load with projection does not exist in the Vivante GPU as a dedicated opcode and is emulated. The shader program first divides texture coordinates XYZ by projector W and then applies regular TEX opcode to load the texture (i.e. TEX(gl_TexCoord.xyzw/gl_TexCoord.wwww)). For point sprites, XY are the point coordinates from VS, Z=0 and W=1, always. The Vivante GPU can only configure varying to be either of -- point coord X, point coord Y, used, unused -- which covers XYZ, but not W. Z is fine because unused means 0. W used to be 0 too before this patch and that led to division by 0 in shader. The only known way to solve this is to set Z=0, W=1 in the shader program itself if the point sprites are enabled. This means we have to generate a special shader variant which does extra SET to set the W=1 in case the point sprites are enabled. In case of TGSI, emitting the SET.TRUE opcode permits setting W=1 without allocating additional constants. With NIR, use nir_lower_texcoord_replace() to lower TEXn to PNTC, which sets Z=0, W=1, and let NIR optimize the shader. Note that nir_lower_texcoord_replace() must be called before input linking is set up, as it might add new FS input. Also note that it should be possible to simply drop PIPE_CAP_POINT_SPRITE in the long run, ST would then apply the same optimization pass, but that option is so far misbehaving. And for etnaviv TGSI this is not applicable yet. This fixes neverball point sprites (exit cylinder stars) and eglretrace of gl4es pointsprite test: https://github.com/ptitSeb/gl4es/blob/master/traces/pointsprite.tgz Signed-off-by: Marek Vasut <marex@denx.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8618> |
||
|---|---|---|
| .appveyor | ||
| .gitlab/issue_templates | ||
| .gitlab-ci | ||
| bin | ||
| build-support | ||
| docs | ||
| doxygen | ||
| include | ||
| scons | ||
| src | ||
| subprojects | ||
| .dir-locals.el | ||
| .editorconfig | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .mailmap | ||
| .travis.yml | ||
| Android.common.mk | ||
| Android.mk | ||
| appveyor.yml | ||
| CleanSpec.mk | ||
| common.py | ||
| meson.build | ||
| meson_options.txt | ||
| README.rst | ||
| REVIEWERS | ||
| SConstruct | ||
| 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 `Freenode's #dri-devel <irc://chat.freenode.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.