Module: Mesa Branch: master Commit: 1a59cc777fb6c0383ed0c745000ca7409b1027d9 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=1a59cc777fb6c0383ed0c745000ca7409b1027d9
Author: Stuart Abercrombie <sabercrom...@chromium.org> Date: Thu Apr 11 10:57:43 2013 -0700 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 <marc...@chromium.org> --- src/gallium/drivers/i915/i915_state.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/i915/i915_state.c b/src/gallium/drivers/i915/i915_state.c index 37ad1ed..4a4faa5 100644 --- a/src/gallium/drivers/i915/i915_state.c +++ b/src/gallium/drivers/i915/i915_state.c @@ -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; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit