[Mesa-dev] [PATCH 15/17] mesa/st: hook up resource transitions for semaphore calls
Andres Rodriguez
andresx7 at gmail.com
Thu Nov 2 03:57:18 UTC 2017
Signed-off-by: Andres Rodriguez <andresx7 at gmail.com>
---
src/mesa/state_tracker/st_cb_semaphoreobjects.c | 33 +++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_cb_semaphoreobjects.c b/src/mesa/state_tracker/st_cb_semaphoreobjects.c
index f6242c7..df9154b 100644
--- a/src/mesa/state_tracker/st_cb_semaphoreobjects.c
+++ b/src/mesa/state_tracker/st_cb_semaphoreobjects.c
@@ -51,6 +51,29 @@ st_import_semaphoreobj_fd(struct gl_context *ctx,
#endif
}
+static enum pipe_layout
+pipe_layout(GLenum gl_layout)
+{
+ switch (gl_layout) {
+ case GL_LAYOUT_GENERAL_EXT:
+ return PIPE_LAYOUT_GENERAL_EXT;
+ case PIPE_LAYOUT_COLOR_ATTACHMENT:
+ return PIPE_LAYOUT_COLOR_ATTACHMENT;
+ case PIPE_LAYOUT_DEPTH_STENCIL_ATTACHMENT:
+ return PIPE_LAYOUT_DEPTH_STENCIL_ATTACHMENT;
+ case PIPE_LAYOUT_DEPTH_STENCIL_READ_ONLY:
+ return PIPE_LAYOUT_DEPTH_STENCIL_READ_ONLY;
+ case PIPE_LAYOUT_SHADER_READ_ONLY:
+ return PIPE_LAYOUT_SHADER_READ_ONLY;
+ case PIPE_LAYOUT_TRANSFER_SRC:
+ return PIPE_LAYOUT_TRANSFER_SRC;
+ case PIPE_LAYOUT_TRANSFER_DST:
+ return PIPE_LAYOUT_TRANSFER_DST;
+ default:
+ unreachable("unexpected layout");
+ }
+}
+
static void
st_server_wait_semaphore(struct gl_context *ctx,
struct gl_semaphore_object *semObj,
@@ -65,6 +88,7 @@ st_server_wait_semaphore(struct gl_context *ctx,
struct pipe_context *pipe = st->pipe;
struct st_buffer_object *bufObj;
struct st_texture_object *texObj;
+ enum pipe_layout srcLayout;
for (unsigned i = 0; i < numBufferBarriers; i++) {
if (!bufObjs[i])
@@ -79,10 +103,12 @@ st_server_wait_semaphore(struct gl_context *ctx,
continue;
texObj = st_texture_object(texObjs[i]);
+ srcLayout = pipe_layout(srcLayouts[i]);
+
pipe->flush_resource(pipe, texObj->pt);
+ pipe->transition_resource(pipe, texObj->pt, srcLayout);
}
- /* TODO: layout transition */
_mesa_flush(ctx);
pipe->semobj_wait(pipe, st_obj->semaphore);
}
@@ -101,6 +127,7 @@ st_server_signal_semaphore(struct gl_context *ctx,
struct pipe_context *pipe = st->pipe;
struct st_buffer_object *bufObj;
struct st_texture_object *texObj;
+ enum pipe_layout dstLayout;
pipe->semobj_signal(pipe, st_obj->semaphore);
@@ -117,10 +144,12 @@ st_server_signal_semaphore(struct gl_context *ctx,
continue;
texObj = st_texture_object(texObjs[i]);
+ dstLayout = pipe_layout(dstLayouts[i]);
+
pipe->flush_resource(pipe, texObj->pt);
+ pipe->transition_resource(pipe, texObj->pt, dstLayout);
}
- /* TODO: layout transition */
_mesa_flush(ctx);
}
--
2.9.3
More information about the mesa-dev
mailing list