lavapipe: add sync2 cmdbuf method implementations
nothing special here Reviewed-by: Jason Ekstrand <jason.ekstrand@collabora.com> Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15413>
This commit is contained in:

committed by
Marge Bot

parent
256e4d7949
commit
00a6676506
@@ -2973,32 +2973,41 @@ static void handle_execute_commands(struct vk_cmd_queue_entry *cmd,
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_event_set(struct vk_cmd_queue_entry *cmd,
|
||||
static void handle_event_set2(struct vk_cmd_queue_entry *cmd,
|
||||
struct rendering_state *state)
|
||||
{
|
||||
LVP_FROM_HANDLE(lvp_event, event, cmd->u.set_event.event);
|
||||
LVP_FROM_HANDLE(lvp_event, event, cmd->u.set_event2.event);
|
||||
|
||||
if (cmd->u.set_event.stage_mask == VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
|
||||
VkPipelineStageFlags2KHR src_stage_mask = 0;
|
||||
|
||||
for (uint32_t i = 0; i < cmd->u.set_event2.dependency_info->memoryBarrierCount; i++)
|
||||
src_stage_mask |= cmd->u.set_event2.dependency_info->pMemoryBarriers[i].srcStageMask;
|
||||
for (uint32_t i = 0; i < cmd->u.set_event2.dependency_info->bufferMemoryBarrierCount; i++)
|
||||
src_stage_mask |= cmd->u.set_event2.dependency_info->pBufferMemoryBarriers[i].srcStageMask;
|
||||
for (uint32_t i = 0; i < cmd->u.set_event2.dependency_info->imageMemoryBarrierCount; i++)
|
||||
src_stage_mask |= cmd->u.set_event2.dependency_info->pImageMemoryBarriers[i].srcStageMask;
|
||||
|
||||
if (src_stage_mask & VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT)
|
||||
state->pctx->flush(state->pctx, NULL, 0);
|
||||
event->event_storage = 1;
|
||||
}
|
||||
|
||||
static void handle_event_reset(struct vk_cmd_queue_entry *cmd,
|
||||
static void handle_event_reset2(struct vk_cmd_queue_entry *cmd,
|
||||
struct rendering_state *state)
|
||||
{
|
||||
LVP_FROM_HANDLE(lvp_event, event, cmd->u.reset_event.event);
|
||||
LVP_FROM_HANDLE(lvp_event, event, cmd->u.reset_event2.event);
|
||||
|
||||
if (cmd->u.reset_event.stage_mask == VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
|
||||
if (cmd->u.reset_event2.stage_mask == VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
|
||||
state->pctx->flush(state->pctx, NULL, 0);
|
||||
event->event_storage = 0;
|
||||
}
|
||||
|
||||
static void handle_wait_events(struct vk_cmd_queue_entry *cmd,
|
||||
static void handle_wait_events2(struct vk_cmd_queue_entry *cmd,
|
||||
struct rendering_state *state)
|
||||
{
|
||||
finish_fence(state);
|
||||
for (unsigned i = 0; i < cmd->u.wait_events.event_count; i++) {
|
||||
LVP_FROM_HANDLE(lvp_event, event, cmd->u.wait_events.events[i]);
|
||||
for (unsigned i = 0; i < cmd->u.wait_events2.event_count; i++) {
|
||||
LVP_FROM_HANDLE(lvp_event, event, cmd->u.wait_events2.events[i]);
|
||||
|
||||
while (event->event_storage != true);
|
||||
}
|
||||
@@ -3086,17 +3095,17 @@ static void handle_reset_query_pool(struct vk_cmd_queue_entry *cmd,
|
||||
}
|
||||
}
|
||||
|
||||
static void handle_write_timestamp(struct vk_cmd_queue_entry *cmd,
|
||||
static void handle_write_timestamp2(struct vk_cmd_queue_entry *cmd,
|
||||
struct rendering_state *state)
|
||||
{
|
||||
struct vk_cmd_write_timestamp *qcmd = &cmd->u.write_timestamp;
|
||||
struct vk_cmd_write_timestamp2 *qcmd = &cmd->u.write_timestamp2;
|
||||
LVP_FROM_HANDLE(lvp_query_pool, pool, qcmd->query_pool);
|
||||
if (!pool->queries[qcmd->query]) {
|
||||
pool->queries[qcmd->query] = state->pctx->create_query(state->pctx,
|
||||
PIPE_QUERY_TIMESTAMP, 0);
|
||||
}
|
||||
|
||||
if (!(qcmd->pipeline_stage == VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT))
|
||||
if (!(qcmd->stage == VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT))
|
||||
state->pctx->flush(state->pctx, NULL, 0);
|
||||
state->pctx->end_query(state->pctx, pool->queries[qcmd->query]);
|
||||
|
||||
@@ -3977,16 +3986,11 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp)
|
||||
ENQUEUE_CMD(CmdClearDepthStencilImage)
|
||||
ENQUEUE_CMD(CmdClearAttachments)
|
||||
ENQUEUE_CMD(CmdResolveImage2)
|
||||
ENQUEUE_CMD(CmdSetEvent)
|
||||
ENQUEUE_CMD(CmdResetEvent)
|
||||
ENQUEUE_CMD(CmdWaitEvents)
|
||||
ENQUEUE_CMD(CmdPipelineBarrier)
|
||||
ENQUEUE_CMD(CmdBeginQueryIndexedEXT)
|
||||
ENQUEUE_CMD(CmdEndQueryIndexedEXT)
|
||||
ENQUEUE_CMD(CmdBeginQuery)
|
||||
ENQUEUE_CMD(CmdEndQuery)
|
||||
ENQUEUE_CMD(CmdResetQueryPool)
|
||||
ENQUEUE_CMD(CmdWriteTimestamp)
|
||||
ENQUEUE_CMD(CmdCopyQueryPoolResults)
|
||||
ENQUEUE_CMD(CmdPushConstants)
|
||||
ENQUEUE_CMD(CmdBeginRenderPass)
|
||||
@@ -4026,6 +4030,11 @@ void lvp_add_enqueue_cmd_entrypoints(struct vk_device_dispatch_table *disp)
|
||||
ENQUEUE_CMD(CmdBeginRendering)
|
||||
ENQUEUE_CMD(CmdEndRendering)
|
||||
ENQUEUE_CMD(CmdSetDeviceMask)
|
||||
ENQUEUE_CMD(CmdPipelineBarrier2)
|
||||
ENQUEUE_CMD(CmdResetEvent2)
|
||||
ENQUEUE_CMD(CmdSetEvent2)
|
||||
ENQUEUE_CMD(CmdWaitEvents2)
|
||||
ENQUEUE_CMD(CmdWriteTimestamp2)
|
||||
|
||||
#undef ENQUEUE_CMD
|
||||
}
|
||||
@@ -4156,16 +4165,7 @@ static void lvp_execute_cmd_buffer(struct lvp_cmd_buffer *cmd_buffer,
|
||||
case VK_CMD_RESOLVE_IMAGE2:
|
||||
handle_resolve_image(cmd, state);
|
||||
break;
|
||||
case VK_CMD_SET_EVENT:
|
||||
handle_event_set(cmd, state);
|
||||
break;
|
||||
case VK_CMD_RESET_EVENT:
|
||||
handle_event_reset(cmd, state);
|
||||
break;
|
||||
case VK_CMD_WAIT_EVENTS:
|
||||
handle_wait_events(cmd, state);
|
||||
break;
|
||||
case VK_CMD_PIPELINE_BARRIER:
|
||||
case VK_CMD_PIPELINE_BARRIER2:
|
||||
/* skip flushes since every cmdbuf does a flush
|
||||
after iterating its cmds and so this is redundant
|
||||
*/
|
||||
@@ -4189,9 +4189,6 @@ static void lvp_execute_cmd_buffer(struct lvp_cmd_buffer *cmd_buffer,
|
||||
case VK_CMD_RESET_QUERY_POOL:
|
||||
handle_reset_query_pool(cmd, state);
|
||||
break;
|
||||
case VK_CMD_WRITE_TIMESTAMP:
|
||||
handle_write_timestamp(cmd, state);
|
||||
break;
|
||||
case VK_CMD_COPY_QUERY_POOL_RESULTS:
|
||||
handle_copy_query_pool_results(cmd, state);
|
||||
break;
|
||||
@@ -4308,6 +4305,18 @@ static void lvp_execute_cmd_buffer(struct lvp_cmd_buffer *cmd_buffer,
|
||||
case VK_CMD_SET_DEVICE_MASK:
|
||||
/* no-op */
|
||||
break;
|
||||
case VK_CMD_RESET_EVENT2:
|
||||
handle_event_reset2(cmd, state);
|
||||
break;
|
||||
case VK_CMD_SET_EVENT2:
|
||||
handle_event_set2(cmd, state);
|
||||
break;
|
||||
case VK_CMD_WAIT_EVENTS2:
|
||||
handle_wait_events2(cmd, state);
|
||||
break;
|
||||
case VK_CMD_WRITE_TIMESTAMP2:
|
||||
handle_write_timestamp2(cmd, state);
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unsupported command %s\n", vk_cmd_queue_type_names[cmd->type]);
|
||||
unreachable("Unsupported command");
|
||||
|
Reference in New Issue
Block a user