[Mesa-dev] [PATCH 03/17] mesa: fix deletion of inactive bound transform feedback object
Samuel Iglesias Gonsalvez
siglesias at igalia.com
Wed Jul 29 07:01:20 PDT 2015
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
forbidden.
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);
}
--
2.4.3
More information about the mesa-dev
mailing list