radv: move subpass image transitions to radv_cmd_buffer_begin_subpass()
Instead of doing them in radv_cmd_buffer_set_subpass(). Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -2425,28 +2425,8 @@ static void radv_handle_subpass_image_transition(struct radv_cmd_buffer *cmd_buf
|
|||||||
|
|
||||||
void
|
void
|
||||||
radv_cmd_buffer_set_subpass(struct radv_cmd_buffer *cmd_buffer,
|
radv_cmd_buffer_set_subpass(struct radv_cmd_buffer *cmd_buffer,
|
||||||
const struct radv_subpass *subpass, bool transitions)
|
const struct radv_subpass *subpass)
|
||||||
{
|
{
|
||||||
if (transitions) {
|
|
||||||
radv_subpass_barrier(cmd_buffer, &subpass->start_barrier);
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < subpass->color_count; ++i) {
|
|
||||||
if (subpass->color_attachments[i].attachment != VK_ATTACHMENT_UNUSED)
|
|
||||||
radv_handle_subpass_image_transition(cmd_buffer,
|
|
||||||
subpass->color_attachments[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < subpass->input_count; ++i) {
|
|
||||||
radv_handle_subpass_image_transition(cmd_buffer,
|
|
||||||
subpass->input_attachments[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) {
|
|
||||||
radv_handle_subpass_image_transition(cmd_buffer,
|
|
||||||
subpass->depth_stencil_attachment);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_buffer->state.subpass = subpass;
|
cmd_buffer->state.subpass = subpass;
|
||||||
|
|
||||||
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_FRAMEBUFFER;
|
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_FRAMEBUFFER;
|
||||||
@@ -2629,7 +2609,7 @@ VkResult radv_BeginCommandBuffer(
|
|||||||
if (result != VK_SUCCESS)
|
if (result != VK_SUCCESS)
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
radv_cmd_buffer_set_subpass(cmd_buffer, subpass, false);
|
radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(cmd_buffer->device->trace_bo)) {
|
if (unlikely(cmd_buffer->device->trace_bo)) {
|
||||||
@@ -3419,7 +3399,25 @@ radv_cmd_buffer_begin_subpass(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
MAYBE_UNUSED unsigned cdw_max = radeon_check_space(cmd_buffer->device->ws,
|
MAYBE_UNUSED unsigned cdw_max = radeon_check_space(cmd_buffer->device->ws,
|
||||||
cmd_buffer->cs, 2048);
|
cmd_buffer->cs, 2048);
|
||||||
|
|
||||||
radv_cmd_buffer_set_subpass(cmd_buffer, subpass, true);
|
radv_subpass_barrier(cmd_buffer, &subpass->start_barrier);
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < subpass->color_count; ++i) {
|
||||||
|
if (subpass->color_attachments[i].attachment != VK_ATTACHMENT_UNUSED)
|
||||||
|
radv_handle_subpass_image_transition(cmd_buffer,
|
||||||
|
subpass->color_attachments[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; i < subpass->input_count; ++i) {
|
||||||
|
radv_handle_subpass_image_transition(cmd_buffer,
|
||||||
|
subpass->input_attachments[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (subpass->depth_stencil_attachment.attachment != VK_ATTACHMENT_UNUSED) {
|
||||||
|
radv_handle_subpass_image_transition(cmd_buffer,
|
||||||
|
subpass->depth_stencil_attachment);
|
||||||
|
}
|
||||||
|
|
||||||
|
radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
|
||||||
radv_cmd_buffer_clear_subpass(cmd_buffer);
|
radv_cmd_buffer_clear_subpass(cmd_buffer);
|
||||||
|
|
||||||
assert(cmd_buffer->cs->cdw <= cdw_max);
|
assert(cmd_buffer->cs->cdw <= cdw_max);
|
||||||
|
@@ -426,7 +426,7 @@ emit_color_clear(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
.depth_stencil_attachment = (struct radv_subpass_attachment) { VK_ATTACHMENT_UNUSED, VK_IMAGE_LAYOUT_UNDEFINED }
|
.depth_stencil_attachment = (struct radv_subpass_attachment) { VK_ATTACHMENT_UNUSED, VK_IMAGE_LAYOUT_UNDEFINED }
|
||||||
};
|
};
|
||||||
|
|
||||||
radv_cmd_buffer_set_subpass(cmd_buffer, &clear_subpass, false);
|
radv_cmd_buffer_set_subpass(cmd_buffer, &clear_subpass);
|
||||||
|
|
||||||
radv_CmdBindPipeline(cmd_buffer_h, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
radv_CmdBindPipeline(cmd_buffer_h, VK_PIPELINE_BIND_POINT_GRAPHICS,
|
||||||
pipeline);
|
pipeline);
|
||||||
@@ -450,7 +450,7 @@ emit_color_clear(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
radv_CmdDraw(cmd_buffer_h, 3, clear_rect->layerCount, 0, clear_rect->baseArrayLayer);
|
radv_CmdDraw(cmd_buffer_h, 3, clear_rect->layerCount, 0, clear_rect->baseArrayLayer);
|
||||||
}
|
}
|
||||||
|
|
||||||
radv_cmd_buffer_set_subpass(cmd_buffer, subpass, false);
|
radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1287,6 +1287,7 @@ radv_clear_cmask(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
image->cmask.size, value);
|
image->cmask.size, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t
|
uint32_t
|
||||||
radv_clear_fmask(struct radv_cmd_buffer *cmd_buffer,
|
radv_clear_fmask(struct radv_cmd_buffer *cmd_buffer,
|
||||||
struct radv_image *image, uint32_t value)
|
struct radv_image *image, uint32_t value)
|
||||||
|
@@ -678,7 +678,7 @@ radv_cmd_buffer_resolve_subpass(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
.depth_stencil_attachment = { .attachment = VK_ATTACHMENT_UNUSED },
|
.depth_stencil_attachment = { .attachment = VK_ATTACHMENT_UNUSED },
|
||||||
};
|
};
|
||||||
|
|
||||||
radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass, false);
|
radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass);
|
||||||
|
|
||||||
VkResult ret = build_resolve_pipeline(cmd_buffer->device, radv_format_meta_fs_key(dst_img->vk_format));
|
VkResult ret = build_resolve_pipeline(cmd_buffer->device, radv_format_meta_fs_key(dst_img->vk_format));
|
||||||
if (ret != VK_SUCCESS) {
|
if (ret != VK_SUCCESS) {
|
||||||
|
@@ -623,7 +623,7 @@ radv_cmd_buffer_resolve_subpass_fs(struct radv_cmd_buffer *cmd_buffer)
|
|||||||
.depth_stencil_attachment = { .attachment = VK_ATTACHMENT_UNUSED },
|
.depth_stencil_attachment = { .attachment = VK_ATTACHMENT_UNUSED },
|
||||||
};
|
};
|
||||||
|
|
||||||
radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass, false);
|
radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass);
|
||||||
|
|
||||||
emit_resolve(cmd_buffer,
|
emit_resolve(cmd_buffer,
|
||||||
src_iview,
|
src_iview,
|
||||||
|
@@ -1183,8 +1183,7 @@ radv_cmd_buffer_upload_alloc(struct radv_cmd_buffer *cmd_buffer,
|
|||||||
void **ptr);
|
void **ptr);
|
||||||
void
|
void
|
||||||
radv_cmd_buffer_set_subpass(struct radv_cmd_buffer *cmd_buffer,
|
radv_cmd_buffer_set_subpass(struct radv_cmd_buffer *cmd_buffer,
|
||||||
const struct radv_subpass *subpass,
|
const struct radv_subpass *subpass);
|
||||||
bool transitions);
|
|
||||||
bool
|
bool
|
||||||
radv_cmd_buffer_upload_data(struct radv_cmd_buffer *cmd_buffer,
|
radv_cmd_buffer_upload_data(struct radv_cmd_buffer *cmd_buffer,
|
||||||
unsigned size, unsigned alignmnet,
|
unsigned size, unsigned alignmnet,
|
||||||
|
Reference in New Issue
Block a user