pvr: Handle PVR_SUB_COMMAND_FLAG_TRANSFER_SERIALIZE_WITH_FRAG.
The flag was previously named PVR_SUB_COMMAND_FLAG_WAIT_ON_PREVIOUS_FRAG. Since the next fragment job is also made to wait for the transfer job to complete, the previous name might have been a bit misleading. Signed-off-by: Karmjit Mahil <Karmjit.Mahil@imgtec.com> Reviewed-by: Frank Binns <frank.binns@imgtec.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19957>
This commit is contained in:
@@ -5604,7 +5604,7 @@ pvr_resolve_unemitted_resolve_attachments(struct pvr_cmd_buffer *cmd_buffer,
|
|||||||
dst_view->vk.image->format = dst_format;
|
dst_view->vk.image->format = dst_format;
|
||||||
|
|
||||||
state->current_sub_cmd->flags |=
|
state->current_sub_cmd->flags |=
|
||||||
PVR_SUB_COMMAND_FLAG_WAIT_ON_PREVIOUS_FRAG;
|
PVR_SUB_COMMAND_FLAG_TRANSFER_SERIALIZE_WITH_FRAG;
|
||||||
|
|
||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return result;
|
return result;
|
||||||
|
@@ -118,7 +118,7 @@ enum pvr_event_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum pvr_sub_command_flags {
|
enum pvr_sub_command_flags {
|
||||||
PVR_SUB_COMMAND_FLAG_WAIT_ON_PREVIOUS_FRAG = BITFIELD_BIT(0),
|
PVR_SUB_COMMAND_FLAG_TRANSFER_SERIALIZE_WITH_FRAG = BITFIELD_BIT(0),
|
||||||
PVR_SUB_COMMAND_FLAG_OCCLUSION_QUERY = BITFIELD_BIT(1),
|
PVR_SUB_COMMAND_FLAG_OCCLUSION_QUERY = BITFIELD_BIT(1),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -429,6 +429,8 @@ static VkResult pvr_process_event_cmd_barrier(
|
|||||||
uint32_t src_syncobj_count = 0;
|
uint32_t src_syncobj_count = 0;
|
||||||
VkResult result;
|
VkResult result;
|
||||||
|
|
||||||
|
assert(sub_cmd->type == PVR_EVENT_TYPE_BARRIER);
|
||||||
|
|
||||||
assert(!(src_mask & ~PVR_PIPELINE_STAGE_ALL_BITS));
|
assert(!(src_mask & ~PVR_PIPELINE_STAGE_ALL_BITS));
|
||||||
assert(!(dst_mask & ~PVR_PIPELINE_STAGE_ALL_BITS));
|
assert(!(dst_mask & ~PVR_PIPELINE_STAGE_ALL_BITS));
|
||||||
|
|
||||||
@@ -726,9 +728,7 @@ static VkResult pvr_process_cmd_buffer(
|
|||||||
sub_cmd,
|
sub_cmd,
|
||||||
&cmd_buffer->sub_cmds,
|
&cmd_buffer->sub_cmds,
|
||||||
link) {
|
link) {
|
||||||
/* TODO: Process PVR_SUB_COMMAND_FLAG_WAIT_ON_PREVIOUS_FRAG and
|
/* TODO: Process PVR_SUB_COMMAND_FLAG_OCCLUSION_QUERY flag. */
|
||||||
* PVR_SUB_COMMAND_FLAG_OCCLUSION_QUERY flags.
|
|
||||||
*/
|
|
||||||
|
|
||||||
switch (sub_cmd->type) {
|
switch (sub_cmd->type) {
|
||||||
case PVR_SUB_CMD_TYPE_GRAPHICS:
|
case PVR_SUB_CMD_TYPE_GRAPHICS:
|
||||||
@@ -755,7 +755,30 @@ static VkResult pvr_process_cmd_buffer(
|
|||||||
per_cmd_buffer_syncobjs);
|
per_cmd_buffer_syncobjs);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PVR_SUB_CMD_TYPE_TRANSFER:
|
case PVR_SUB_CMD_TYPE_TRANSFER: {
|
||||||
|
const bool serialize_with_frag =
|
||||||
|
sub_cmd->flags & PVR_SUB_COMMAND_FLAG_TRANSFER_SERIALIZE_WITH_FRAG;
|
||||||
|
|
||||||
|
if (serialize_with_frag) {
|
||||||
|
struct pvr_sub_cmd_event frag_to_transfer_barrier = {
|
||||||
|
.type = PVR_EVENT_TYPE_BARRIER,
|
||||||
|
.barrier = {
|
||||||
|
.wait_for_stage_mask = PVR_PIPELINE_STAGE_FRAG_BIT,
|
||||||
|
.wait_at_stage_mask = PVR_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
result = pvr_process_event_cmd_barrier(device,
|
||||||
|
&frag_to_transfer_barrier,
|
||||||
|
barriers,
|
||||||
|
per_cmd_buffer_syncobjs,
|
||||||
|
per_submit_syncobjs,
|
||||||
|
queue_syncobjs,
|
||||||
|
previous_queue_syncobjs);
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
result = pvr_process_transfer_cmds(device,
|
result = pvr_process_transfer_cmds(device,
|
||||||
queue,
|
queue,
|
||||||
&sub_cmd->transfer,
|
&sub_cmd->transfer,
|
||||||
@@ -764,8 +787,31 @@ static VkResult pvr_process_cmd_buffer(
|
|||||||
wait_count,
|
wait_count,
|
||||||
stage_flags,
|
stage_flags,
|
||||||
per_cmd_buffer_syncobjs);
|
per_cmd_buffer_syncobjs);
|
||||||
|
|
||||||
|
if (serialize_with_frag) {
|
||||||
|
struct pvr_sub_cmd_event transfer_to_frag_barrier = {
|
||||||
|
.type = PVR_EVENT_TYPE_BARRIER,
|
||||||
|
.barrier = {
|
||||||
|
.wait_for_stage_mask = PVR_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
.wait_at_stage_mask = PVR_PIPELINE_STAGE_FRAG_BIT,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
if (result != VK_SUCCESS)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
result = pvr_process_event_cmd_barrier(device,
|
||||||
|
&transfer_to_frag_barrier,
|
||||||
|
barriers,
|
||||||
|
per_cmd_buffer_syncobjs,
|
||||||
|
per_submit_syncobjs,
|
||||||
|
queue_syncobjs,
|
||||||
|
previous_queue_syncobjs);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY:
|
case PVR_SUB_CMD_TYPE_OCCLUSION_QUERY:
|
||||||
result = pvr_process_occlusion_query_cmd(
|
result = pvr_process_occlusion_query_cmd(
|
||||||
device,
|
device,
|
||||||
|
Reference in New Issue
Block a user