[Mesa-dev] [RFC PATCH 45/65] st/mesa: do not release sampler views for resident textures
Samuel Pitoiset
samuel.pitoiset at gmail.com
Wed May 24 08:50:15 UTC 2017
On 05/23/2017 10:11 PM, Marek Olšák wrote:
> I don't think this change is necessary. Releasing sampler views
> doesn't release textures.
This issued has been reported by Feral directly. It happens in the
following scenario:
1) create a texture
2) get a texture handle
3) make it resident
4) bind the texture to a unit
5) draw
The sampler views are then released and this ended up with a
use-after-free at decompression time for the resident texture handle.
>
> Marek
>
> On Fri, May 19, 2017 at 6:52 PM, Samuel Pitoiset
> <samuel.pitoiset at gmail.com> wrote:
>> When a texture is referenced by one or more texture handles,
>> it might be resident and we shouldn't release the sampler views.
>>
>> Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>> ---
>> src/mesa/state_tracker/st_sampler_view.c | 6 ++++++
>> 1 file changed, 6 insertions(+)
>>
>> diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c
>> index c78a987486..690b50087c 100644
>> --- a/src/mesa/state_tracker/st_sampler_view.c
>> +++ b/src/mesa/state_tracker/st_sampler_view.c
>> @@ -115,6 +115,12 @@ st_texture_release_all_sampler_views(struct st_context *st,
>> {
>> GLuint i;
>>
>> + if (stObj->base.HandleAllocated) {
>> + /* Do not release sampler views when a texture is referenced by one or
>> + * more texture handles because the texture might be resident. */
>> + return;
>> + }
>> +
>> /* XXX This should use sampler_views[i]->pipe, not st->pipe */
>> for (i = 0; i < stObj->num_sampler_views; ++i)
>> pipe_sampler_view_release(st->pipe, &stObj->sampler_views[i]);
>> --
>> 2.13.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list