Find a file
Brian Paul 593e36f956 st/mesa: implement "zombie" sampler views (v2)
When st_texture_release_all_sampler_views() is called the texture may
have sampler views belonging to several contexts.  If we unreference a
sampler view and its refcount hits zero, we need to be sure to destroy
the sampler view with the same context which created it.

This was not the case with the previous code which used
pipe_sampler_view_release().  That function could end up freeing a
sampler view with a context different than the one which created it.
In the case of the VMware svga driver, we detected this but leaked the
sampler view.  This led to a crash with google-chrome when the kernel
module had too many sampler views.  VMware bug 2274734.

Alternately, if we try to delete a sampler view with the correct
context, we may be "reaching into" a context which is active on
another thread.  That's not safe.

To fix these issues this patch adds a per-context list of "zombie"
sampler views.  These are views which are to be freed at some point
when the context is active.  Other contexts may safely add sampler
views to the zombie list at any time (it's mutex protected).  This
avoids the context/view ownership mix-ups we had before.

Tested with: google-chrome, google earth, Redway3D Watch/Turbine demos
a few Linux games.  If anyone can recomment some other multi-threaded,
multi-context GL apps to test, please let me know.

v2: avoid potential race issue by always adding sampler views to the
zombie list if the view's context doesn't match the current context,
ignoring the refcount.

Reviewed-by: Roland Scheidegger <sroland@vmware.com>
Reviewed-by: Neha Bhende <bhenden@vmware.com>
Reviewed-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Reviewed-By: Jose Fonseca <jfonseca@vmware.com>
2019-03-17 20:07:22 -06:00
.gitlab-ci gitlab-ci: only build the default (=latest) and oldest llvm versions 2019-03-08 15:59:27 +00:00
bin get-pick-list: Add --pretty=medium to the arguments for Cc patches 2019-02-13 08:59:30 -08:00
build-support configure: commit test files 2017-10-16 16:32:43 -07:00
docs docs: link to the meson_options.txt file gitlab.freedesktop.org 2019-03-17 20:07:22 -06:00
doxygen doxygen: Plumb through gallium/ to automated documentation 2016-05-30 17:53:45 +01:00
include panfrost: Adapt to uapi changes 2019-03-14 15:24:27 +01:00
m4 configure: allow building with python3 2018-10-31 19:15:50 +00:00
scons scons: Compatibility with Scons development version string 2019-03-12 14:22:34 +00:00
scripts appveyor: Revert commits adding Cygwin support. 2019-01-25 14:13:26 +00:00
src st/mesa: implement "zombie" sampler views (v2) 2019-03-17 20:07:22 -06:00
.dir-locals.el dir-locals.el: Adds White Space support 2016-11-14 19:17:49 +02:00
.editorconfig editorconfig: Add max_line_length property 2019-01-10 15:50:34 +02:00
.gitattributes Disable autocrlf for Visual Studio project files. 2008-02-28 12:34:01 +09:00
.gitignore .gitignore: list *.orig and *.rej 2017-09-06 17:48:50 +01:00
.gitlab-ci.yml gitlab-ci: Build turnip. 2019-03-16 14:38:51 +00:00
.mailmap .mailmap: Add a few more alises for myself 2019-02-13 12:03:41 -08:00
.travis.yml travis: fix osx meson build 2019-03-14 17:06:03 +00:00
Android.common.mk android: fix missing backspace for line continuation 2019-03-08 21:14:24 +00:00
Android.mk iris: add Android build 2019-02-21 10:26:10 -08:00
appveyor.yml appveyor: Revert commits adding Cygwin support. 2019-01-25 14:13:26 +00:00
autogen.sh autogen.sh: pass --force to autoreconf, quote ORIGDIR 2015-03-11 23:28:26 +00:00
CleanSpec.mk CleanSpec.mk: Remove HOST_OUT_release 2018-08-02 15:42:40 -06:00
common.py scons/svga: remove opt from the list of valid build types 2018-10-26 12:09:00 -06:00
configure.ac build: make passing an incorrect pointer type a hard error 2019-03-08 16:24:06 +00:00
install-gallium-links.mk gallium: Fix install-gallium-links.mk on non-bash /bin/sh 2016-10-10 08:56:12 -07:00
install-lib-links.mk install-lib-links: remove the .install-lib-links file 2015-02-24 15:33:25 +00:00
Makefile.am automake: Add --enable-autotools to distcheck flags 2019-01-30 19:32:44 +00:00
meson.build turnip: guard -Dvulkan-driver=freedreno 2019-03-11 10:02:13 -07:00
meson_options.txt turnip: guard -Dvulkan-driver=freedreno 2019-03-11 10:02:13 -07:00
README.rst README: Drop the badges from the readme 2019-02-07 12:46:17 -06:00
REVIEWERS REVIEWERS: add Vulkan reviewer group 2018-11-13 17:25:02 +00:00
SConstruct scons: Require python 2.7 2018-08-16 13:52:56 -07:00
VERSION bump version for 19.0 branch 2019-01-29 15:30:25 -08: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.html
<https://mesa3d.org/install.html>`_), but the recommended way is to use
Meson (`docs/meson.html <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.html <https://mesa3d.org/bugs.html>`_).


Contributing
------------

Contributions are welcome, and step-by-step instructions can be found in our
documentation (`docs/submittingpatches.html
<https://mesa3d.org/submittingpatches.html>`_).

Note that Mesa uses email mailing-lists for patches submission, review and
discussions.