Revert "st/mesa: execute glFlush asynchronously if no image has been imported/exported"

A number of the piglit glx tests use multiple contexts on a single
thread, and previously the flush in MakeCurrent() was enforcing the
ordering between draws on those different contexts.  When that flush
made ASYNC, now there is nothing ordering the draws because we have
two (or more) driver threads for a single frontend thread which is
using nothing more than glxMakeCurrent() to enforce the ordering.

This reverts commit 057a702a3f.

Fixes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4903
Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11278>
This commit is contained in:
Rob Clark 2021-06-09 13:29:50 -07:00 committed by Marge Bot
parent 3c5b7dca30
commit 5066839ffd
4 changed files with 1 additions and 12 deletions

View file

@ -309,7 +309,6 @@ dri2_create_image_from_renderbuffer2(__DRIcontext *context,
if (dri2_get_mapping_by_format(img->dri_format))
p_ctx->flush_resource(p_ctx, tex);
ctx->Shared->HasExternallySharedImages = true;
*error = __DRI_IMAGE_ERROR_SUCCESS;
return img;
}
@ -408,7 +407,6 @@ dri2_create_from_texture(__DRIcontext *context, int target, unsigned texture,
if (dri2_get_mapping_by_format(img->dri_format))
p_ctx->flush_resource(p_ctx, tex);
ctx->Shared->HasExternallySharedImages = true;
*error = __DRI_IMAGE_ERROR_SUCCESS;
return img;
}

View file

@ -3474,14 +3474,6 @@ struct gl_shared_state
* frequency changes.
*/
bool DisjointOperation;
/**
* Whether at least one image has been imported or exported, excluding
* the default framebuffer. If this is false, glFlush can be executed
* asynchronously because there is no invisible dependency on external
* users.
*/
bool HasExternallySharedImages;
};

View file

@ -192,7 +192,6 @@ st_get_egl_image(struct gl_context *ctx, GLeglImageOES image_handle,
return false;
}
ctx->Shared->HasExternallySharedImages = true;
return true;
}

View file

@ -98,7 +98,7 @@ st_glFlush(struct gl_context *ctx)
* synchronization issues. Calling finish() here will just hide
* problems that need to be fixed elsewhere.
*/
st_flush(st, NULL, ctx->Shared->HasExternallySharedImages ? 0 : PIPE_FLUSH_ASYNC);
st_flush(st, NULL, 0);
st_manager_flush_frontbuffer(st);
}