diff --git a/packages/graphics/Mesa/patches/Mesa-03-recreate-sampler-view-on-context-change.patch b/packages/graphics/Mesa/patches/Mesa-03-recreate-sampler-view-on-context-change.patch new file mode 100644 index 0000000000..174197a7cf --- /dev/null +++ b/packages/graphics/Mesa/patches/Mesa-03-recreate-sampler-view-on-context-change.patch @@ -0,0 +1,39 @@ +From 92e543c45da4581b1940178a94e6f2d66c749367 Mon Sep 17 00:00:00 2001 +From: Christian König +Date: Sat, 22 Mar 2014 20:30:07 +0000 +Subject: st/mesa: recreate sampler view on context change v3 + +With shared glx contexts it is possible that a texture is create and used +in one context and then used in another one resulting in incorrect +sampler view usage. + +v2: avoid template copy +v3: add XXX comment + +Signed-off-by: Christian König +Cc: "10.0 10.1" +Reviewed-by: Brian Paul +--- +diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c +index 3557a3f..75e6fac 100644 +--- a/src/mesa/state_tracker/st_atom_texture.c ++++ b/src/mesa/state_tracker/st_atom_texture.c +@@ -198,6 +198,16 @@ st_get_texture_sampler_view_from_stobj(struct st_texture_object *stObj, + if (!stObj->sampler_view) { + stObj->sampler_view = + st_create_texture_sampler_view_from_stobj(pipe, stObj, samp, format); ++ ++ } else if (stObj->sampler_view->context != pipe) { ++ /* Recreate view in correct context, use existing view as template */ ++ /* XXX: This isn't optimal, we should try to use more than one view. ++ Otherwise we create/destroy the view all the time ++ */ ++ struct pipe_sampler_view *sv = ++ pipe->create_sampler_view(pipe, stObj->pt, stObj->sampler_view); ++ pipe_sampler_view_reference(&stObj->sampler_view, NULL); ++ stObj->sampler_view = sv; + } + + return stObj->sampler_view; +-- +cgit v0.9.0.2-2-gbebe