summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
authorAndres Rodriguez <[email protected]>2017-10-18 15:11:27 -0400
committerAndres Rodriguez <[email protected]>2018-01-30 15:13:49 -0500
commit29b9bd0539ed21805228bdd0933e543eec16c670 (patch)
tree626520845aa591ab98eb2c353121a00399e32044 /src/mesa/main
parent89b52891fd37293e596c75f49fb5202d83155677 (diff)
mesa/st: add support for semaphore object signal/wait v4
Bits to implement ServerWaitSemaphoreObject/ServerSignalSemaphoreObject v2: - corresponding changes for gallium fence->semaphore rename - flushing moved to mesa/main v3: s/semaphore/fence for pipe objects v4: add bitmap flushing Signed-off-by: Andres Rodriguez <[email protected]> Reviewed-by: Marek Olšák <[email protected]>
Diffstat (limited to 'src/mesa/main')
-rw-r--r--src/mesa/main/dd.h14
-rw-r--r--src/mesa/main/externalobjects.c38
2 files changed, 45 insertions, 7 deletions
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 8216752ccaf..7a39f939c97 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -1156,14 +1156,24 @@ struct dd_function_table {
* server's command stream
*/
void (*ServerWaitSemaphoreObject)(struct gl_context *ctx,
- struct gl_semaphore_object *semObj);
+ struct gl_semaphore_object *semObj,
+ GLuint numBufferBarriers,
+ struct gl_buffer_object **bufObjs,
+ GLuint numTextureBarriers,
+ struct gl_texture_object **texObjs,
+ const GLenum *srcLayouts);
/**
* 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);
+ struct gl_semaphore_object *semObj,
+ GLuint numBufferBarriers,
+ struct gl_buffer_object **bufObjs,
+ GLuint numTextureBarriers,
+ struct gl_texture_object **texObjs,
+ const GLenum *dstLayouts);
/*@}*/
/**
diff --git a/src/mesa/main/externalobjects.c b/src/mesa/main/externalobjects.c
index 9ba70c8e7f8..8f31ba4c354 100644
--- a/src/mesa/main/externalobjects.c
+++ b/src/mesa/main/externalobjects.c
@@ -23,6 +23,7 @@
#include "macros.h"
#include "mtypes.h"
+#include "bufferobj.h"
#include "context.h"
#include "externalobjects.h"
#include "teximage.h"
@@ -716,7 +717,8 @@ _mesa_WaitSemaphoreEXT(GLuint semaphore,
{
GET_CURRENT_CONTEXT(ctx);
struct gl_semaphore_object *semObj;
-
+ struct gl_buffer_object **bufObjs;
+ struct gl_texture_object **texObjs;
if (!ctx->Extensions.EXT_semaphore) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glWaitSemaphoreEXT(unsupported)");
@@ -732,8 +734,20 @@ _mesa_WaitSemaphoreEXT(GLuint semaphore,
FLUSH_VERTICES(ctx, 0);
FLUSH_CURRENT(ctx, 0);
- /* TODO: memory barriers and layout transitions */
- ctx->Driver.ServerWaitSemaphoreObject(ctx, semObj);
+ bufObjs = alloca(sizeof(struct gl_buffer_object **) * numBufferBarriers);
+ for (unsigned i = 0; i < numBufferBarriers; i++) {
+ bufObjs[i] = _mesa_lookup_bufferobj(ctx, buffers[i]);
+ }
+
+ texObjs = alloca(sizeof(struct gl_texture_object **) * numTextureBarriers);
+ for (unsigned i = 0; i < numTextureBarriers; i++) {
+ texObjs[i] = _mesa_lookup_texture(ctx, textures[i]);
+ }
+
+ ctx->Driver.ServerWaitSemaphoreObject(ctx, semObj,
+ numBufferBarriers, bufObjs,
+ numTextureBarriers, texObjs,
+ srcLayouts);
}
void GLAPIENTRY
@@ -746,6 +760,8 @@ _mesa_SignalSemaphoreEXT(GLuint semaphore,
{
GET_CURRENT_CONTEXT(ctx);
struct gl_semaphore_object *semObj;
+ struct gl_buffer_object **bufObjs;
+ struct gl_texture_object **texObjs;
if (!ctx->Extensions.EXT_semaphore) {
_mesa_error(ctx, GL_INVALID_OPERATION, "glSignalSemaphoreEXT(unsupported)");
@@ -761,8 +777,20 @@ _mesa_SignalSemaphoreEXT(GLuint semaphore,
FLUSH_VERTICES(ctx, 0);
FLUSH_CURRENT(ctx, 0);
- /* TODO: memory barriers and layout transitions */
- ctx->Driver.ServerSignalSemaphoreObject(ctx, semObj);
+ bufObjs = alloca(sizeof(struct gl_buffer_object **) * numBufferBarriers);
+ for (unsigned i = 0; i < numBufferBarriers; i++) {
+ bufObjs[i] = _mesa_lookup_bufferobj(ctx, buffers[i]);
+ }
+
+ texObjs = alloca(sizeof(struct gl_texture_object **) * numTextureBarriers);
+ for (unsigned i = 0; i < numTextureBarriers; i++) {
+ texObjs[i] = _mesa_lookup_texture(ctx, textures[i]);
+ }
+
+ ctx->Driver.ServerSignalSemaphoreObject(ctx, semObj,
+ numBufferBarriers, bufObjs,
+ numTextureBarriers, texObjs,
+ dstLayouts);
}
void GLAPIENTRY