Mesa (main): mesa: add gallium flush_flags param into ctx->Driver.Flush

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 17 02:54:23 UTC 2021


Module: Mesa
Branch: main
Commit: b7dc72380a474aeb3ff7179536727391116a3448
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=b7dc72380a474aeb3ff7179536727391116a3448

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat Jun 12 12:20:06 2021 -0400

mesa: add gallium flush_flags param into ctx->Driver.Flush

Acked-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11341>

---

 src/mesa/drivers/dri/i915/intel_context.c           |  2 +-
 src/mesa/drivers/dri/i965/brw_context.c             |  4 ++--
 src/mesa/drivers/dri/nouveau/nouveau_driver.c       |  4 ++--
 src/mesa/drivers/dri/r200/r200_blit.c               |  4 ++--
 src/mesa/drivers/dri/r200/r200_ioctl.c              |  2 +-
 src/mesa/drivers/dri/radeon/radeon_blit.c           |  4 ++--
 src/mesa/drivers/dri/radeon/radeon_buffer_objects.c |  2 +-
 src/mesa/drivers/dri/radeon/radeon_cmdbuf.h         |  2 +-
 src/mesa/drivers/dri/radeon/radeon_common.c         |  6 +++---
 src/mesa/drivers/dri/radeon/radeon_common.h         |  2 +-
 src/mesa/drivers/dri/radeon/radeon_fbo.c            |  8 ++++----
 src/mesa/drivers/dri/radeon/radeon_ioctl.h          |  2 +-
 src/mesa/drivers/dri/radeon/radeon_queryobj.c       |  4 ++--
 src/mesa/drivers/dri/radeon/radeon_screen.c         |  2 +-
 src/mesa/drivers/x11/xm_dd.c                        | 13 ++++++++++---
 src/mesa/main/context.c                             |  8 +++++---
 src/mesa/main/dd.h                                  |  2 +-
 src/mesa/main/performance_query.c                   |  2 +-
 src/mesa/state_tracker/st_cb_flush.c                |  4 ++--
 19 files changed, 43 insertions(+), 34 deletions(-)

diff --git a/src/mesa/drivers/dri/i915/intel_context.c b/src/mesa/drivers/dri/i915/intel_context.c
index a2b0382b874..d75a77b55f9 100644
--- a/src/mesa/drivers/dri/i915/intel_context.c
+++ b/src/mesa/drivers/dri/i915/intel_context.c
@@ -355,7 +355,7 @@ _intel_flush(struct gl_context *ctx, const char *file, int line)
 }
 
 static void
-intel_glFlush(struct gl_context *ctx)
+intel_glFlush(struct gl_context *ctx, unsigned gallium_flush_flags)
 {
    struct intel_context *intel = intel_context(ctx);
 
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 464a54338eb..bd473915334 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -302,7 +302,7 @@ brw_display_shared_buffer(struct brw_context *brw)
 }
 
 static void
-brw_glFlush(struct gl_context *ctx)
+brw_glFlush(struct gl_context *ctx, unsigned gallium_flush_flags)
 {
    struct brw_context *brw = brw_context(ctx);
 
@@ -342,7 +342,7 @@ brw_finish(struct gl_context * ctx)
 {
    struct brw_context *brw = brw_context(ctx);
 
-   brw_glFlush(ctx);
+   brw_glFlush(ctx, 0);
 
    if (brw->batch.last_bo)
       brw_bo_wait_rendering(brw->batch.last_bo);
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_driver.c b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
index 1698df6ab19..1165786a284 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_driver.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_driver.c
@@ -64,7 +64,7 @@ nouveau_get_string(struct gl_context *ctx, GLenum name)
 }
 
 static void
-nouveau_flush(struct gl_context *ctx)
+nouveau_flush(struct gl_context *ctx, unsigned gallium_flush_flags)
 {
 	struct nouveau_context *nctx = to_nouveau_context(ctx);
 	struct nouveau_pushbuf *push = context_push(ctx);
@@ -90,7 +90,7 @@ nouveau_finish(struct gl_context *ctx)
 	struct nouveau_pushbuf_refn refn =
 		{ nctx->fence, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR };
 
-	nouveau_flush(ctx);
+	nouveau_flush(ctx, 0);
 
 	if (!nouveau_pushbuf_space(push, 16, 0, 0) &&
 	    !nouveau_pushbuf_refn(push, &refn, 1)) {
diff --git a/src/mesa/drivers/dri/r200/r200_blit.c b/src/mesa/drivers/dri/r200/r200_blit.c
index ae4968fd95e..5c4f8170a3c 100644
--- a/src/mesa/drivers/dri/r200/r200_blit.c
+++ b/src/mesa/drivers/dri/r200/r200_blit.c
@@ -534,7 +534,7 @@ unsigned r200_blit(struct gl_context *ctx,
     }
 
     /* Flush is needed to make sure that source buffer has correct data */
-    radeonFlush(&r200->radeon.glCtx);
+    radeonFlush(&r200->radeon.glCtx, 0);
 
     rcommonEnsureCmdBufSpace(&r200->radeon, 102, __func__);
 
@@ -554,7 +554,7 @@ unsigned r200_blit(struct gl_context *ctx,
                      reg_width, reg_height,
                      flip_y);
 
-    radeonFlush(ctx);
+    radeonFlush(ctx, 0);
 
     /* We submitted those packets outside our state atom mechanism. Thus
      * make sure the atoms are resubmitted the next time. */
diff --git a/src/mesa/drivers/dri/r200/r200_ioctl.c b/src/mesa/drivers/dri/r200/r200_ioctl.c
index 2e0285cc6a2..b6643e1f9ea 100644
--- a/src/mesa/drivers/dri/r200/r200_ioctl.c
+++ b/src/mesa/drivers/dri/r200/r200_ioctl.c
@@ -61,7 +61,7 @@ static void r200Clear( struct gl_context *ctx, GLbitfield mask )
                    BUFFER_BIT_DEPTH | BUFFER_BIT_STENCIL |
                    BUFFER_BIT_COLOR0;
 
-   radeonFlush( ctx );
+   radeonFlush( ctx, 0 );
 
    hwmask = mask & hwbits;
    swmask = mask & ~hwbits;
diff --git a/src/mesa/drivers/dri/radeon/radeon_blit.c b/src/mesa/drivers/dri/radeon/radeon_blit.c
index c186e5bbdae..089f3d8ef74 100644
--- a/src/mesa/drivers/dri/radeon/radeon_blit.c
+++ b/src/mesa/drivers/dri/radeon/radeon_blit.c
@@ -386,7 +386,7 @@ unsigned r100_blit(struct gl_context *ctx,
     }
 
     /* Flush is needed to make sure that source buffer has correct data */
-    radeonFlush(ctx);
+    radeonFlush(ctx, 0);
 
     rcommonEnsureCmdBufSpace(&r100->radeon, 59, __func__);
 
@@ -406,7 +406,7 @@ unsigned r100_blit(struct gl_context *ctx,
                      reg_width, reg_height,
                      flip_y);
 
-    radeonFlush(ctx);
+    radeonFlush(ctx, 0);
 
     /* We submitted those packets outside our state atom mechanism. Thus
      * make sure they are all resubmitted the next time. */
diff --git a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
index 71fe9302cf7..26bfca15067 100644
--- a/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
+++ b/src/mesa/drivers/dri/radeon/radeon_buffer_objects.c
@@ -185,7 +185,7 @@ radeonMapBufferRange(struct gl_context * ctx,
        (access & (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT)) == GL_MAP_WRITE_BIT;
 
     if (write_only) {
-        ctx->Driver.Flush(ctx);
+        ctx->Driver.Flush(ctx, 0);
     }
 
     if (radeon_obj->bo == NULL) {
diff --git a/src/mesa/drivers/dri/radeon/radeon_cmdbuf.h b/src/mesa/drivers/dri/radeon/radeon_cmdbuf.h
index d34ca18a158..a047271903d 100644
--- a/src/mesa/drivers/dri/radeon/radeon_cmdbuf.h
+++ b/src/mesa/drivers/dri/radeon/radeon_cmdbuf.h
@@ -101,7 +101,7 @@ void rcommonBeginBatch(radeonContextPtr rmesa,
 static inline void radeon_firevertices(radeonContextPtr radeon)
 {
    if (radeon->cmdbuf.cs->cdw || radeon->dma.flush )
-      radeon->glCtx.Driver.Flush(&radeon->glCtx); /* +r6/r7 */
+      radeon->glCtx.Driver.Flush(&radeon->glCtx, 0); /* +r6/r7 */
 }
 
 #endif
diff --git a/src/mesa/drivers/dri/radeon/radeon_common.c b/src/mesa/drivers/dri/radeon/radeon_common.c
index 1b734d26a57..047f8559d7e 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.c
+++ b/src/mesa/drivers/dri/radeon/radeon_common.c
@@ -369,7 +369,7 @@ void radeon_viewport(struct gl_context *ctx)
 
 	if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) {
 		if (_mesa_is_front_buffer_drawing(ctx->DrawBuffer)) {
-			ctx->Driver.Flush(ctx);
+			ctx->Driver.Flush(ctx, 0);
 		}
 		radeon_update_renderbuffers(driContext, driContext->driDrawablePriv, GL_FALSE);
 		if (driContext->driDrawablePriv != driContext->driReadablePriv)
@@ -523,7 +523,7 @@ void radeonEmitState(radeonContextPtr radeon)
 }
 
 
-void radeonFlush(struct gl_context *ctx)
+void radeonFlush(struct gl_context *ctx, unsigned gallium_flush_flags)
 {
 	radeonContextPtr radeon = RADEON_CONTEXT(ctx);
 	if (RADEON_DEBUG & RADEON_IOCTL)
@@ -572,7 +572,7 @@ void radeonFinish(struct gl_context * ctx)
 	int i;
 
 	if (ctx->Driver.Flush)
-		ctx->Driver.Flush(ctx); /* +r6/r7 */
+		ctx->Driver.Flush(ctx, 0); /* +r6/r7 */
 
 	for (i = 0; i < fb->_NumColorDrawBuffers; i++) {
 		struct radeon_renderbuffer *rrb;
diff --git a/src/mesa/drivers/dri/radeon/radeon_common.h b/src/mesa/drivers/dri/radeon/radeon_common.h
index a39b9360efd..9553eb9909a 100644
--- a/src/mesa/drivers/dri/radeon/radeon_common.h
+++ b/src/mesa/drivers/dri/radeon/radeon_common.h
@@ -12,7 +12,7 @@ void radeonScissor(struct gl_context *ctx);
 
 extern uint32_t radeonGetAge(radeonContextPtr radeon);
 
-void radeonFlush(struct gl_context *ctx);
+void radeonFlush(struct gl_context *ctx, unsigned gallium_flush_flags);
 void radeonFinish(struct gl_context * ctx);
 void radeonEmitState(radeonContextPtr radeon);
 GLuint radeonCountStateEmitSize(radeonContextPtr radeon);
diff --git a/src/mesa/drivers/dri/radeon/radeon_fbo.c b/src/mesa/drivers/dri/radeon/radeon_fbo.c
index cff0c0d6f5f..b89f6cf4a17 100644
--- a/src/mesa/drivers/dri/radeon/radeon_fbo.c
+++ b/src/mesa/drivers/dri/radeon/radeon_fbo.c
@@ -534,7 +534,7 @@ radeon_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffe
   rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
 
   if (ctx->Driver.Flush)
-	  ctx->Driver.Flush(ctx); /* +r6/r7 */
+	  ctx->Driver.Flush(ctx, 0); /* +r6/r7 */
 
   if (rrb->bo)
     radeon_bo_unref(rrb->bo);
@@ -578,7 +578,7 @@ radeon_image_target_renderbuffer_storage(struct gl_context *ctx,
    rrb = radeon_renderbuffer(rb);
 
    if (ctx->Driver.Flush)
-      ctx->Driver.Flush(ctx); /* +r6/r7 */
+      ctx->Driver.Flush(ctx, 0); /* +r6/r7 */
 
    if (rrb->bo)
       radeon_bo_unref(rrb->bo);
@@ -720,7 +720,7 @@ radeon_framebuffer_renderbuffer(struct gl_context * ctx,
 {
 
 	if (ctx->Driver.Flush)
-		ctx->Driver.Flush(ctx); /* +r6/r7 */
+		ctx->Driver.Flush(ctx, 0); /* +r6/r7 */
 
 	radeon_print(RADEON_TEXTURE, RADEON_TRACE,
 		"%s(%p, fb %p, rb %p) \n",
@@ -829,7 +829,7 @@ radeon_finish_render_texture(struct gl_context *ctx, struct gl_renderbuffer *rb)
 	radeon_image->used_as_render_target = GL_FALSE;
 
     if (ctx->Driver.Flush)
-        ctx->Driver.Flush(ctx); /* +r6/r7 */
+        ctx->Driver.Flush(ctx, 0); /* +r6/r7 */
 }
 static void
 radeon_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
diff --git a/src/mesa/drivers/dri/radeon/radeon_ioctl.h b/src/mesa/drivers/dri/radeon/radeon_ioctl.h
index 701dcddfc7e..a4de035a572 100644
--- a/src/mesa/drivers/dri/radeon/radeon_ioctl.h
+++ b/src/mesa/drivers/dri/radeon/radeon_ioctl.h
@@ -76,7 +76,7 @@ extern void radeonEmitWait( r100ContextPtr rmesa, GLuint flags );
 
 extern void radeonFlushCmdBuf( r100ContextPtr rmesa, const char * );
 
-extern void radeonFlush( struct gl_context *ctx );
+extern void radeonFlush( struct gl_context *ctx, unsigned gallium_flush_flags );
 extern void radeonFinish( struct gl_context *ctx );
 extern void radeonInitIoctlFuncs( struct gl_context *ctx );
 extern void radeonGetAllParams( r100ContextPtr rmesa );
diff --git a/src/mesa/drivers/dri/radeon/radeon_queryobj.c b/src/mesa/drivers/dri/radeon/radeon_queryobj.c
index ae2c721ce66..b7864d419e1 100644
--- a/src/mesa/drivers/dri/radeon/radeon_queryobj.c
+++ b/src/mesa/drivers/dri/radeon/radeon_queryobj.c
@@ -91,7 +91,7 @@ static void radeonWaitQuery(struct gl_context *ctx, struct gl_query_object *q)
 
 	/* If the cmdbuf with packets for this query hasn't been flushed yet, do it now */
 	if (radeon_bo_is_referenced_by_cs(query->bo, radeon->cmdbuf.cs))
-		ctx->Driver.Flush(ctx);
+		ctx->Driver.Flush(ctx, 0);
 
 	radeon_print(RADEON_STATE, RADEON_VERBOSE, "%s: query id %d, bo %p, offset %d\n", __func__, q->Id, query->bo, query->curr_offset);
 
@@ -169,7 +169,7 @@ static void radeonCheckQuery(struct gl_context *ctx, struct gl_query_object *q)
 
 	/* Need to perform a flush, as per ARB_occlusion_query spec */
 	if (radeon_bo_is_referenced_by_cs(query->bo, radeon->cmdbuf.cs)) {
-		ctx->Driver.Flush(ctx);
+		ctx->Driver.Flush(ctx, 0);
 	}
 
 	if (radeon_bo_is_busy(query->bo, &domain) == 0) {
diff --git a/src/mesa/drivers/dri/radeon/radeon_screen.c b/src/mesa/drivers/dri/radeon/radeon_screen.c
index 67b3af674e6..3764a5d6538 100644
--- a/src/mesa/drivers/dri/radeon/radeon_screen.c
+++ b/src/mesa/drivers/dri/radeon/radeon_screen.c
@@ -192,7 +192,7 @@ radeonDRI2Flush(__DRIdrawable *drawable)
     radeonContextPtr rmesa;
 
     rmesa = (radeonContextPtr) drawable->driContextPriv->driverPrivate;
-    radeonFlush(&rmesa->glCtx);
+    radeonFlush(&rmesa->glCtx, 0);
 }
 
 static const struct __DRI2flushExtensionRec radeonFlushExtension = {
diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c
index 195684450a8..4b50a3ce9b3 100644
--- a/src/mesa/drivers/x11/xm_dd.c
+++ b/src/mesa/drivers/x11/xm_dd.c
@@ -51,7 +51,7 @@
 
 
 static void
-finish_or_flush( struct gl_context *ctx )
+finish(struct gl_context *ctx)
 {
    const XMesaContext xmesa = XMESA_CONTEXT(ctx);
    if (xmesa) {
@@ -62,6 +62,13 @@ finish_or_flush( struct gl_context *ctx )
 }
 
 
+static void
+flush(struct gl_context *ctx, unsigned gallium_flush_flags)
+{
+   finish(ctx);
+}
+
+
 /* Implements glColorMask() */
 static void
 color_mask(struct gl_context *ctx,
@@ -837,8 +844,8 @@ xmesa_init_driver_functions( XMesaVisual xmvisual,
 {
    driver->GetString = get_string;
    driver->UpdateState = xmesa_update_state;
-   driver->Flush = finish_or_flush;
-   driver->Finish = finish_or_flush;
+   driver->Flush = flush;
+   driver->Finish = finish;
    driver->ColorMask = color_mask;
    driver->Enable = enable;
    driver->Viewport = xmesa_viewport;
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index aedb50eafe9..8f3f9fc287a 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -184,7 +184,7 @@ _mesa_notifySwapBuffers(struct gl_context *ctx)
       _mesa_debug(ctx, "SwapBuffers\n");
    FLUSH_VERTICES(ctx, 0, 0);
    if (ctx->Driver.Flush) {
-      ctx->Driver.Flush(ctx);
+      ctx->Driver.Flush(ctx, 0);
    }
 }
 
@@ -1634,7 +1634,9 @@ _mesa_make_current( struct gl_context *newCtx,
        curCtx != newCtx &&
        curCtx->Const.ContextReleaseBehavior ==
        GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH) {
-      _mesa_flush(curCtx);
+      FLUSH_VERTICES(curCtx, 0, 0);
+      if (curCtx->Driver.Flush)
+         curCtx->Driver.Flush(curCtx, 0);
    }
 
    /* Call this periodically to detect when the user has begun using
@@ -1791,7 +1793,7 @@ _mesa_flush(struct gl_context *ctx)
 {
    FLUSH_VERTICES(ctx, 0, 0);
    if (ctx->Driver.Flush) {
-      ctx->Driver.Flush(ctx);
+      ctx->Driver.Flush(ctx, 0);
    }
 }
 
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 8db6848be95..da6d4a5e231 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -125,7 +125,7 @@ struct dd_function_table {
    /**
     * This is called whenever glFlush() is called.
     */
-   void (*Flush)( struct gl_context *ctx );
+   void (*Flush)(struct gl_context *ctx, unsigned gallium_flush_flags);
 
    /**
     * Clear the color/depth/stencil/accum buffer(s).
diff --git a/src/mesa/main/performance_query.c b/src/mesa/main/performance_query.c
index b3febdd57af..6698d508e16 100644
--- a/src/mesa/main/performance_query.c
+++ b/src/mesa/main/performance_query.c
@@ -641,7 +641,7 @@ _mesa_GetPerfQueryDataINTEL(GLuint queryHandle, GLuint flags,
 
    if (!obj->Ready) {
       if (flags == GL_PERFQUERY_FLUSH_INTEL) {
-         ctx->Driver.Flush(ctx);
+         ctx->Driver.Flush(ctx, 0);
       } else if (flags == GL_PERFQUERY_WAIT_INTEL) {
          ctx->Driver.WaitPerfQuery(ctx, obj);
          obj->Ready = true;
diff --git a/src/mesa/state_tracker/st_cb_flush.c b/src/mesa/state_tracker/st_cb_flush.c
index 12289d8cf4e..97e0c73dcfd 100644
--- a/src/mesa/state_tracker/st_cb_flush.c
+++ b/src/mesa/state_tracker/st_cb_flush.c
@@ -87,7 +87,7 @@ st_finish(struct st_context *st)
  * Called via ctx->Driver.Flush()
  */
 static void
-st_glFlush(struct gl_context *ctx)
+st_glFlush(struct gl_context *ctx, unsigned gallium_flush_flags)
 {
    struct st_context *st = st_context(ctx);
 
@@ -96,7 +96,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, 0);
+   st_flush(st, NULL, gallium_flush_flags);
 
    st_manager_flush_frontbuffer(st);
 }



More information about the mesa-commit mailing list