[Mesa-dev] [PATCH 12/22] mesa: add support for semaphore object signal/wait v2
Andres Rodriguez
andresx7 at gmail.com
Fri Dec 22 00:41:47 UTC 2017
Memory synchronization is left for a future patch.
v2: flush vertices/bitmaps moved to mesa/main
Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
---
src/mesa/main/dd.h | 14 ++++++++++++++
src/mesa/main/externalobjects.c | 38 ++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 66a8089..e43cf1c 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1160,6 +1160,20 @@ struct dd_function_table {
*/
void (*DeleteSemaphoreObject)(struct gl_context *ctx,
struct gl_semaphore_object *semObj);
+
+ /**
+ * Introduce an operation to wait for the semaphore object in the GL
+ * server's command stream
+ */
+ void (*ServerWaitSemaphoreObject)(struct gl_context *ctx,
+ struct gl_semaphore_object *semObj);
+
+ /**
+ * Introduce an operation to signal the semaphore object in the GL
+ * server's command stream
+ */
+ void (*ServerSignalSemaphoreObject)(struct gl_context *ctx,
+ struct gl_semaphore_object *semObj);
/*@}*/
/**
diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c
index d667e44..26c1f27 100644
--- a/src/mesa/main/externalobjects.c
+++ b/src/mesa/main/externalobjects.c
@@ -23,6 +23,7 @@
#include "macros.h"
#include "mtypes.h"
+#include "context.h"
#include "externalobjects.h"
#include "teximage.h"
#include "texobj.h"
@@ -712,7 +713,26 @@ _mesa_WaitSemaphoreEXT(GLuint semaphore,
const GLuint *textures,
const GLenum *srcLayouts)
{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_semaphore_object *semObj;
+
+
+ if (!ctx->Extensions.EXT_semaphore) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glWaitSemaphoreEXT(unsupported)");
+ return;
+ }
+
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ semObj = _mesa_lookup_semaphore_object(ctx, semaphore);
+ if (!semObj)
+ return;
+
+ FLUSH_VERTICES( ctx, 0 );
+ FLUSH_CURRENT( ctx, 0 );
+ /* TODO: memory barriers and layout transitions */
+ ctx->Driver.ServerWaitSemaphoreObject(ctx, semObj);
}
void GLAPIENTRY
@@ -723,7 +743,25 @@ _mesa_SignalSemaphoreEXT(GLuint semaphore,
const GLuint *textures,
const GLenum *dstLayouts)
{
+ GET_CURRENT_CONTEXT(ctx);
+ struct gl_semaphore_object *semObj;
+
+ if (!ctx->Extensions.EXT_semaphore) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "glSignalSemaphoreEXT(unsupported)");
+ return;
+ }
+
+ ASSERT_OUTSIDE_BEGIN_END(ctx);
+
+ semObj = _mesa_lookup_semaphore_object(ctx, semaphore);
+ if (!semObj)
+ return;
+
+ FLUSH_VERTICES( ctx, 0 );
+ FLUSH_CURRENT( ctx, 0 );
+ /* TODO: memory barriers and layout transitions */
+ ctx->Driver.ServerSignalSemaphoreObject(ctx, semObj);
}
void GLAPIENTRY
--
2.9.3
More information about the mesa-dev
mailing list