[Mesa-dev] [PATCH 0/6] st/mesa: add locking around lazy texture/sampler updates
sroland at vmware.com
Fri Oct 6 23:26:16 UTC 2017
Am 07.10.2017 um 01:01 schrieb Nicolai Hähnle:
> On 07.10.2017 00:36, Roland Scheidegger wrote:
>> I can't help but think that there'd be none of those problems if those
>> views were actually used as specced by gallium initially: all sampler
>> views (and surfaces) are per context, and they simply cannot be used in
>> another context.
> That is actually the case today, with the exception that when a texture
> object is destroyed, all of sampler views are destroyed as well, from
> within whatever happens to be the current context. (This can be solved
> with some kind of "orphaned" list, but I'd rather not do that in st/mesa.)
> The problem is that when we need a sampler view for a texture, we have
> (a) the context pointer and (b) the texture object pointer, and we need
> to map those to a sampler view. This happens via a mutable per-texture
> object structure, access to which must be protected somehow.
Ah I see I didn't look close enough.
This is all just about protecting st_texture_object, which is global (as
per gl rules of texture objects). So yes locking I guess locking is
>> Am 06.10.2017 um 22:38 schrieb Nicolai Hähnle:
>>> Hi all,
>>> This series is a first result of debugging some random crashes in dEQP's
>>> multi-threaded EGL tests.
>>> The OpenGL spec is pretty clear that application must not modify a
>>> in one context while simultaneously using it for texturing (or even
>>> modifying) it in another context. Texturing simultaneously in multiple
>>> contexts is fine, though.
>>> This can lead to races when st_finalize_texture is called simultaneously
>>> for two contexts, or if two contexts simultaneously attempt to access
>>> sampler view array of a texture.
>>> This series should fix most (all?) issues where our internal data
>>> structures could become corrupted. I am aware of one remaining corner
>>> case that could lead to rendering corruption. It appears rather
>>> to fix, and it is documented in a comment of patch #5.
>>> Please review!
>>> src/gallium/auxiliary/util/u_inlines.h | 16 ++-
>>> src/gallium/include/pipe/p_context.h | 10 ++
>>> src/mesa/state_tracker/st_atom_sampler.c | 12 +-
>>> src/mesa/state_tracker/st_atom_texture.c | 12 --
>>> src/mesa/state_tracker/st_cb_texture.c | 59 +++++++--
>>> src/mesa/state_tracker/st_manager.c | 3 +
>>> src/mesa/state_tracker/st_sampler_view.c | 137 +++++++++++++++++----
>>> src/mesa/state_tracker/st_sampler_view.h | 7 ++
>>> src/mesa/state_tracker/st_texture.h | 23 +++-
>>> 9 files changed, 205 insertions(+), 74 deletions(-)
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
More information about the mesa-dev