i915g: Release old fragment shader sampler views with current pipe
We were trying to use a destroy method from a deleted context. This fix is based on what's in the svga driver. Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
This commit is contained in:
committed by
Stéphane Marchesin
parent
417d8917d4
commit
1a59cc777f
@@ -711,13 +711,18 @@ static void i915_set_fragment_sampler_views(struct pipe_context *pipe,
|
||||
!memcmp(i915->fragment_sampler_views, views, num * sizeof(struct pipe_sampler_view *)))
|
||||
return;
|
||||
|
||||
for (i = 0; i < num; i++)
|
||||
for (i = 0; i < num; i++) {
|
||||
/* Note: we're using pipe_sampler_view_release() here to work around
|
||||
* a possible crash when the old view belongs to another context that
|
||||
* was already destroyed.
|
||||
*/
|
||||
pipe_sampler_view_release(pipe, &i915->fragment_sampler_views[i]);
|
||||
pipe_sampler_view_reference(&i915->fragment_sampler_views[i],
|
||||
views[i]);
|
||||
}
|
||||
|
||||
for (i = num; i < i915->num_fragment_sampler_views; i++)
|
||||
pipe_sampler_view_reference(&i915->fragment_sampler_views[i],
|
||||
NULL);
|
||||
pipe_sampler_view_release(pipe, &i915->fragment_sampler_views[i]);
|
||||
|
||||
i915->num_fragment_sampler_views = num;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user