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

Reply via email to