Mesa (master): mesa: Add blend barrier entry point and driver hook.

Francisco Jerez currojerez at kemper.freedesktop.org
Wed Aug 24 20:31:43 UTC 2016


Module: Mesa
Branch: master
Commit: 303fb5881c36b8c1270f3c8071705eea336c341b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=303fb5881c36b8c1270f3c8071705eea336c341b

Author: Francisco Jerez <currojerez at riseup.net>
Date:   Tue Jul  5 23:21:21 2016 -0700

mesa: Add blend barrier entry point and driver hook.

Both MESA_shader_framebuffer_fetch_non_coherent and the non-coherent
variant of KHR_blend_equation_advanced will use this driver hook to
request coherency between framebuffer reads and writes.  This
intentionally doesn't hook up glBlendBarrierMESA to the dispatch layer
since the extension isn't exposed to applications yet, see [1]
for more details.

[1] https://lists.freedesktop.org/archives/mesa-dev/2016-July/124028.html

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/mesa/main/barrier.c | 14 ++++++++++++++
 src/mesa/main/barrier.h |  3 +++
 src/mesa/main/dd.h      | 12 ++++++++++++
 3 files changed, 29 insertions(+)

diff --git a/src/mesa/main/barrier.c b/src/mesa/main/barrier.c
index 7ae8fc6..42a5e0f 100644
--- a/src/mesa/main/barrier.c
+++ b/src/mesa/main/barrier.c
@@ -108,3 +108,17 @@ _mesa_MemoryBarrierByRegion(GLbitfield barriers)
       ctx->Driver.MemoryBarrier(ctx, barriers);
    }
 }
+
+void GLAPIENTRY
+_mesa_BlendBarrierMESA(void)
+{
+   GET_CURRENT_CONTEXT(ctx);
+
+   if (!ctx->Extensions.MESA_shader_framebuffer_fetch_non_coherent) {
+      _mesa_error(ctx, GL_INVALID_OPERATION,
+                  "glBlendBarrier(not supported)");
+      return;
+   }
+
+   ctx->Driver.BlendBarrier(ctx);
+}
diff --git a/src/mesa/main/barrier.h b/src/mesa/main/barrier.h
index 8eee583..21dce90 100644
--- a/src/mesa/main/barrier.h
+++ b/src/mesa/main/barrier.h
@@ -47,4 +47,7 @@ _mesa_MemoryBarrier(GLbitfield barriers);
 void GLAPIENTRY
 _mesa_MemoryBarrierByRegion(GLbitfield barriers);
 
+void GLAPIENTRY
+_mesa_BlendBarrierMESA(void);
+
 #endif /* BARRIER_H */
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index a3dc191..257dc10 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -958,6 +958,18 @@ struct dd_function_table {
    /** @} */
 
    /**
+    * GL_MESA_shader_framebuffer_fetch_non_coherent rendering barrier.
+    *
+    * On return from this function any framebuffer contents written by
+    * previous draw commands are guaranteed to be visible from subsequent
+    * fragment shader invocations using the
+    * MESA_shader_framebuffer_fetch_non_coherent interface.
+    */
+   /** @{ */
+   void (*BlendBarrier)(struct gl_context *ctx);
+   /** @} */
+
+   /**
     * \name GL_ARB_compute_shader interface
     */
    /*@{*/




More information about the mesa-commit mailing list