09934730540bf6aa47e08b9bb1c6bf77a9493f4d
While a resource might be shared across different contexts all synchronization of commands is the resposibility of the user (OpenGL spec Chapter 5 "Shared Objects and Multiple Contexts"). Currently etnaviv tries to be extremely helpful by flushing foreign contexts when using a resource that is still pending there. This introduces a lot of issues, as context flushes can now happen at basically any time and also introduces a lot of overhead due to the needed tracking and locking. Get rid of all this cross-context tracking and flushing. The only real requirement here is that we need to track pending resources without mutating the state of the etna_resource, as this might be shared across multiple contexts and thus be used by multiple threads concurrently. Introduce a hash table to track the current pending resources and their states in the local context. A side-effect of this change is that we don't need to keep all used resources referenced until context flush time, as we don't need to mutate them anymore to track the status. This allows to free some of them a bit earlier. Note that this introduces a small possibility of a new resource matching the key of a already destroyed resource still in the pending_resources hashtable, but even if we get such a collision the worst outcome is a not strictly necessary flush of the local context being performed, which is acceptable if it doesn't happen very often. Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14466>
`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 `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://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.
Description
Languages
C
75.5%
C++
17.2%
Python
2.7%
Rust
1.8%
Assembly
1.5%
Other
1%