[Mesa-dev] [PATCH 03/17] mesa: fix deletion of inactive bound transform feedback object

Ian Romanick idr at freedesktop.org
Wed Jul 29 12:31:56 PDT 2015


On 07/29/2015 07:01 AM, Samuel Iglesias Gonsalvez wrote:
> When a transform feedback object is bound and not active, the OpenGL ES
> 3.0 and GL_ARB_transform_feedback2 specs don't explicitly disallow its
> deletion. Only the deletion of the default framebuffer object is
                                             ^^^^^^^^^^^
transform feedback

> forbidden.

This sounds like a spec bug or a test bug.  I've submitted a Khronos
spec bug.  I'd like to get some input from Khronos first.  Assuming this
is the correct behavior, this patch looks good.

> This patch follows what it is done for glDeleteTextures(), i.e.
> the binding reverts to 0 (the default framebuffer object).
> 
> Fixes:
> 
> dEQP-GLES3.functional.lifetime.delete_bound.transform_feedback
> 
> Signed-off-by: Samuel Iglesias Gonsalvez <siglesias at igalia.com>
> ---
>  src/mesa/main/transformfeedback.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/src/mesa/main/transformfeedback.c b/src/mesa/main/transformfeedback.c
> index 103011c..9944c62 100644
> --- a/src/mesa/main/transformfeedback.c
> +++ b/src/mesa/main/transformfeedback.c
> @@ -96,8 +96,19 @@ reference_transform_feedback_object(struct gl_transform_feedback_object **ptr,
>        assert(oldObj->RefCount > 0);
>        oldObj->RefCount--;
>  
> +      /* If the transform feedback object to delete (obj == NULL) is bound
> +       * then revert the binding to the default transform feedback object.
> +       */
> +      GET_CURRENT_CONTEXT(ctx);
> +      if (ctx && obj == NULL &&
> +          oldObj == ctx->TransformFeedback.CurrentObject &&
> +          oldObj != ctx->TransformFeedback.DefaultObject) {
> +         ctx->TransformFeedback.CurrentObject = NULL;
> +         reference_transform_feedback_object(&ctx->TransformFeedback.CurrentObject,
> +                                             ctx->TransformFeedback.DefaultObject);
> +      }
> +
>        if (oldObj->RefCount == 0) {
> -         GET_CURRENT_CONTEXT(ctx);
>           if (ctx)
>              ctx->Driver.DeleteTransformFeedback(ctx, oldObj);
>        }
> 



More information about the mesa-dev mailing list