summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/externalobjects.c
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/externalobjects.c
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/externalobjects.c')
-rw-r--r--src/mesa/main/externalobjects.c38
1 files changed, 33 insertions, 5 deletions
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