[Mesa-dev] RFC: Fixing XBMC crash with NV_vdpau_interop

Christian König deathsimple at vodafone.de
Tue Mar 25 10:33:37 PDT 2014


Am 24.03.2014 18:54, schrieb Roland Scheidegger:
> Am 23.03.2014 12:36, schrieb Christian König:
>> Am 22.03.2014 23:33, schrieb Brian Paul:
>>> On Sat, Mar 22, 2014 at 2:49 PM, Christian König
>>> <deathsimple at vodafone.de <mailto:deathsimple at vodafone.de>> wrote:
>>>
>>>      Hi guys,
>>>
>>>      recently some XBMC users complained about crashes with the
>>>      relatively new NV_vdpau_interop support.
>>>
>>>      That turned out to be a problem with how st_atom_texture.c caches
>>>      the sampler view for a texture. Since the texture in question is
>>>      shared between two GLX contexts the pipe object the sampler view
>>>      was originally created for doesn't necessary match the pipe object
>>>      it is used with.
>>>
>>>      Now my question is am I missing something or is this case really
>>>      not correctly supported? Where is the check if a texture is used
>>>      in more than one context? The attached patch fixes the issue, but
>>>      I'm not sure if it is the right approach.
>>>
>>>
>>> I've run into this too.  I think the best thing to do (short of
>>> removing the sampler view from the st_texture_object) is to walk over
>>> all the textures in the share group at context-destroy time, looking
>>> for sampler views belonging to the context being destroyed, then free
>>> those sampler views.
>> Yeah, that's also a problem, but not what I'm currently dealing with.
>>
>> My problem is that we pass a sampler view to a pipe context which
>> doesn't belong to this context. Surprisingly the driver doesn't crash
>> immediately, but instead works fine for at least some time.
>>
>> Our radeonsi driver keeps an internal reference to all sample views
>> bound to it, and so when some times later a new sampler view is bound we
>> unreference the sampler view in question and crash because the context
>> where this sampler view was created with no longer exists.
>>
>> So it's reference inside the driver that crashes, not the one in the
>> mesa state tracker. So there is probably nothing I can do except for
>> what the attached patch does and try to never bind a sampler view to a
>> context it doesn't belong to.
>>
>>> I could probably whip up a patch next week.
>> Would you mind if I try to fix that? Doesn't sounds so complicated to me.
>>
> Some texture sharing problems crop up from time to time due to this
> (textures being sharable by GL, but sampler views are strictly
> per-context in gallium).
> If the sampler view would be destroyed when the context is destroyed,
> wouldn't that also get rid of the reference in the driver (though I
> guess you should unbind that texture if it's still bound at that point)?
> Though arguably, you are not supposed to use sampler views belonging to
> another context even if said context still exists.
> So, I think recreating the sampler view when the current one belongs to
> a different context is fine, though maybe it would be better if the
> views would be separated from the st_texture_object and stored somewhere
> else in the context.
>
> Roland

Completely agree. I just send out two patches to the list to fix this.

The first one now properly destroys the sampler views when the contexts 
are destroyed.

The second one adds a small dynamically increasing array of samplers 
views to the texture, so that each context gets it's own entry in that 
array.

Please review,
Christian.


More information about the mesa-dev mailing list