mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-13 07:40:24 +01:00
mesa: add support for semaphore object signal/wait v3
Memory synchronization is left for a future patch. v2: flush vertices/bitmaps moved to mesa/main v3: removed spaces before/after braces Signed-off-by: Andres Rodriguez <andresx7@gmail.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
260f7fcc46
commit
89b52891fd
2 changed files with 52 additions and 0 deletions
|
|
@ -1150,6 +1150,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);
|
||||
/*@}*/
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include "macros.h"
|
||||
#include "mtypes.h"
|
||||
#include "context.h"
|
||||
#include "externalobjects.h"
|
||||
#include "teximage.h"
|
||||
#include "texobj.h"
|
||||
|
|
@ -713,7 +714,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
|
||||
|
|
@ -724,7 +744,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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue