<p dir="ltr"><br>
On Jan 8, 2016 6:59 PM, "Ian Romanick" <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>> wrote:<br>
><br>
> From: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
><br>
> Some meta operations can be called recursively.  Future changes (the<br>
> "Don't pollute the ... namespace" changes) will cause objects with<br>
> invalid names to be used.  If a nested meta operation tries to restore<br>
> an object named 0xDEADBEEF, it will fail.<br>
><br>
> Signed-off-by: Ian Romanick <<a href="mailto:ian.d.romanick@intel.com">ian.d.romanick@intel.com</a>><br>
> ---<br>
>  src/mesa/drivers/common/meta.h      | 3 ++-<br>
>  src/mesa/drivers/common/meta_blit.c | 9 +++++----<br>
>  2 files changed, 7 insertions(+), 5 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/common/meta.h b/src/mesa/drivers/common/meta.h<br>
> index 268824c..856dcdb 100644<br>
> --- a/src/mesa/drivers/common/meta.h<br>
> +++ b/src/mesa/drivers/common/meta.h<br>
> @@ -310,7 +310,8 @@ struct fb_tex_blit_state<br>
>  {<br>
>     GLint baseLevelSave, maxLevelSave;<br>
>     struct gl_sampler_object *samp_obj;<br>
> -   GLuint samplerSave, stencilSamplingSave;<br>
> +   struct gl_sampler_object *samp_obj_save;<br>
> +   GLuint stencilSamplingSave;<br>
>     GLuint tempTex;<br>
>  };<br>
><br>
> diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c<br>
> index 6c03f5d..fc4c87a 100644<br>
> --- a/src/mesa/drivers/common/meta_blit.c<br>
> +++ b/src/mesa/drivers/common/meta_blit.c<br>
> @@ -810,9 +810,9 @@ void<br>
>  _mesa_meta_fb_tex_blit_begin(const struct gl_context *ctx,<br>
>                               struct fb_tex_blit_state *blit)<br>
>  {<br>
> -   blit->samplerSave =<br>
> -      ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler ?<br>
> -      ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler->Name : 0;<br>
> +   blit->samp_obj_save = NULL;</p>
<p dir="ltr">I'm a bit confused here.  Why are we stomping this to null?  If it's ever not null then it either hasn't been initialized or we failed at reference counting.  Why not just assert == null instead?</p>
<p dir="ltr">> +   _mesa_reference_sampler_object(ctx, &blit->samp_obj_save,<br>
> +                                  ctx->Texture.Unit[ctx->Texture.CurrentUnit].Sampler);<br>
>     blit->tempTex = 0;<br>
>  }<br>
><br>
> @@ -838,7 +838,8 @@ _mesa_meta_fb_tex_blit_end(struct gl_context *ctx, GLenum target,<br>
>        }<br>
>     }<br>
><br>
> -   _mesa_BindSampler(ctx->Texture.CurrentUnit, blit->samplerSave);<br>
> +   _mesa_bind_sampler(ctx, ctx->Texture.CurrentUnit, blit->samp_obj_save);<br>
> +   _mesa_reference_sampler_object(ctx, &blit->samp_obj_save, NULL);<br>
>     _mesa_DeleteSamplers(1, &blit->samp_obj->Name);<br>
>     blit->samp_obj = NULL;<br>
><br>
> --<br>
> 2.5.0<br>
><br>
> _______________________________________________<br>
> mesa-dev mailing list<br>
><a href="mailto:mesa-dev@lists.freedesktop.org"> mesa-dev@lists.freedesktop.org</a><br>
><a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev"> http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</p>