Needed for VK_KHR_create_renderpass2.
Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
---
src/amd/vulkan/radv_cmd_buffer.c | 4 ++--
src/amd/vulkan/radv_meta_clear.c | 4 ++--
src/amd/vulkan/radv_meta_resolve.c | 14 +++++++-------
src/amd/vulkan/radv_meta_resolve_cs.c | 4 ++--
src/amd/vulkan/radv_meta_resolve_fs.c | 6 +++---
src/amd/vulkan/radv_pass.c | 28 +++++++++++++++++----------
src/amd/vulkan/radv_private.h | 15 +++++++++-----
7 files changed, 44 insertions(+), 31 deletions(-)
diff --git a/src/amd/vulkan/radv_cmd_buffer.c
b/src/amd/vulkan/radv_cmd_buffer.c
index 1ea023a811..0ddddf50f6 100644
--- a/src/amd/vulkan/radv_cmd_buffer.c
+++ b/src/amd/vulkan/radv_cmd_buffer.c
@@ -2054,7 +2054,7 @@ static void radv_subpass_barrier(struct
radv_cmd_buffer *cmd_buffer, const struc
}
static void radv_handle_subpass_image_transition(struct radv_cmd_buffer
*cmd_buffer,
- VkAttachmentReference
att)
+ struct
radv_subpass_attachment att)
{
unsigned idx = att.attachment;
struct radv_image_view *view =
cmd_buffer->state.framebuffer->attachments[idx].attachment;
@@ -3944,7 +3944,7 @@ void radv_CmdEndRenderPass(
for (unsigned i = 0; i <
cmd_buffer->state.framebuffer->attachment_count; ++i) {
VkImageLayout layout =
cmd_buffer->state.pass->attachments[i].final_layout;
radv_handle_subpass_image_transition(cmd_buffer,
- (VkAttachmentReference){i,
layout});
+ (struct radv_subpass_attachment){i,
layout});
}
vk_free(&cmd_buffer->pool->alloc,
cmd_buffer->state.attachments);
diff --git a/src/amd/vulkan/radv_meta_clear.c
b/src/amd/vulkan/radv_meta_clear.c
index 2c0bb37387..d7c9849734 100644
--- a/src/amd/vulkan/radv_meta_clear.c
+++ b/src/amd/vulkan/radv_meta_clear.c
@@ -366,10 +366,10 @@ emit_color_clear(struct radv_cmd_buffer
*cmd_buffer,
struct radv_subpass clear_subpass = {
.color_count = 1,
- .color_attachments = (VkAttachmentReference[]) {
+ .color_attachments = (struct radv_subpass_attachment[]) {
subpass->color_attachments[clear_att->colorAttachment]
},
- .depth_stencil_attachment = (VkAttachmentReference) {
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);
diff --git a/src/amd/vulkan/radv_meta_resolve.c
b/src/amd/vulkan/radv_meta_resolve.c
index d4d3552f31..b049237ba6 100644
--- a/src/amd/vulkan/radv_meta_resolve.c
+++ b/src/amd/vulkan/radv_meta_resolve.c
@@ -613,8 +613,8 @@ radv_cmd_buffer_resolve_subpass(struct
radv_cmd_buffer *cmd_buffer)
return;
for (uint32_t i = 0; i < subpass->color_count; ++i) {
- VkAttachmentReference src_att =
subpass->color_attachments[i];
- VkAttachmentReference dest_att =
subpass->resolve_attachments[i];
+ struct radv_subpass_attachment src_att =
subpass->color_attachments[i];
+ struct radv_subpass_attachment dest_att =
subpass->resolve_attachments[i];
if (src_att.attachment == VK_ATTACHMENT_UNUSED ||
dest_att.attachment == VK_ATTACHMENT_UNUSED)
@@ -641,8 +641,8 @@ radv_cmd_buffer_resolve_subpass(struct
radv_cmd_buffer *cmd_buffer)
RADV_META_SAVE_GRAPHICS_PIPELINE);
for (uint32_t i = 0; i < subpass->color_count; ++i) {
- VkAttachmentReference src_att =
subpass->color_attachments[i];
- VkAttachmentReference dest_att =
subpass->resolve_attachments[i];
+ struct radv_subpass_attachment src_att =
subpass->color_attachments[i];
+ struct radv_subpass_attachment dest_att =
subpass->resolve_attachments[i];
if (src_att.attachment == VK_ATTACHMENT_UNUSED ||
dest_att.attachment == VK_ATTACHMENT_UNUSED)
@@ -657,7 +657,7 @@ radv_cmd_buffer_resolve_subpass(struct
radv_cmd_buffer *cmd_buffer)
struct radv_subpass resolve_subpass = {
.color_count = 2,
- .color_attachments = (VkAttachmentReference[]) {
src_att, dest_att },
+ .color_attachments = (struct
radv_subpass_attachment[]) { src_att, dest_att },
.depth_stencil_attachment = { .attachment =
VK_ATTACHMENT_UNUSED },
};
@@ -684,8 +684,8 @@ radv_decompress_resolve_subpass_src(struct
radv_cmd_buffer *cmd_buffer)
struct radv_framebuffer *fb = cmd_buffer->state.framebuffer;
for (uint32_t i = 0; i < subpass->color_count; ++i) {
- VkAttachmentReference src_att =
subpass->color_attachments[i];
- VkAttachmentReference dest_att =
subpass->resolve_attachments[i];
+ struct radv_subpass_attachment src_att =
subpass->color_attachments[i];
+ struct radv_subpass_attachment dest_att =
subpass->resolve_attachments[i];
if (src_att.attachment == VK_ATTACHMENT_UNUSED ||
dest_att.attachment == VK_ATTACHMENT_UNUSED)
diff --git a/src/amd/vulkan/radv_meta_resolve_cs.c
b/src/amd/vulkan/radv_meta_resolve_cs.c
index 4a37892b86..daf11e0576 100644
--- a/src/amd/vulkan/radv_meta_resolve_cs.c
+++ b/src/amd/vulkan/radv_meta_resolve_cs.c
@@ -501,8 +501,8 @@ radv_cmd_buffer_resolve_subpass_cs(struct
radv_cmd_buffer *cmd_buffer)
RADV_META_SAVE_DESCRIPTORS);
for (uint32_t i = 0; i < subpass->color_count; ++i) {
- VkAttachmentReference src_att =
subpass->color_attachments[i];
- VkAttachmentReference dest_att =
subpass->resolve_attachments[i];
+ struct radv_subpass_attachment src_att =
subpass->color_attachments[i];
+ struct radv_subpass_attachment dest_att =
subpass->resolve_attachments[i];
struct radv_image_view *src_iview =
cmd_buffer->state.framebuffer->attachments[src_att.attachment].attachment;
struct radv_image_view *dst_iview =
cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment;
if (dest_att.attachment == VK_ATTACHMENT_UNUSED)
diff --git a/src/amd/vulkan/radv_meta_resolve_fs.c
b/src/amd/vulkan/radv_meta_resolve_fs.c
index ef8c1d8b1d..5f4f241893 100644
--- a/src/amd/vulkan/radv_meta_resolve_fs.c
+++ b/src/amd/vulkan/radv_meta_resolve_fs.c
@@ -611,8 +611,8 @@ radv_cmd_buffer_resolve_subpass_fs(struct
radv_cmd_buffer *cmd_buffer)
radv_decompress_resolve_subpass_src(cmd_buffer);
for (uint32_t i = 0; i < subpass->color_count; ++i) {
- VkAttachmentReference src_att =
subpass->color_attachments[i];
- VkAttachmentReference dest_att =
subpass->resolve_attachments[i];
+ struct radv_subpass_attachment src_att =
subpass->color_attachments[i];
+ struct radv_subpass_attachment dest_att =
subpass->resolve_attachments[i];
if (src_att.attachment == VK_ATTACHMENT_UNUSED ||
dest_att.attachment == VK_ATTACHMENT_UNUSED)
@@ -623,7 +623,7 @@ radv_cmd_buffer_resolve_subpass_fs(struct
radv_cmd_buffer *cmd_buffer)
struct radv_subpass resolve_subpass = {
.color_count = 1,
- .color_attachments = (VkAttachmentReference[]) {
dest_att },
+ .color_attachments = (struct
radv_subpass_attachment[]) { dest_att },
.depth_stencil_attachment = { .attachment =
VK_ATTACHMENT_UNUSED },
};
diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c
index 15fee444cd..0e0f767751 100644
--- a/src/amd/vulkan/radv_pass.c
+++ b/src/amd/vulkan/radv_pass.c
@@ -80,7 +80,7 @@ VkResult radv_CreateRenderPass(
// att->stencil_store_op =
pCreateInfo->pAttachments[i].stencilStoreOp;
}
uint32_t subpass_attachment_count = 0;
- VkAttachmentReference *p;
+ struct radv_subpass_attachment *p;
for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) {
const VkSubpassDescription *desc =
&pCreateInfo->pSubpasses[i];
@@ -94,7 +94,7 @@ VkResult radv_CreateRenderPass(
if (subpass_attachment_count) {
pass->subpass_attachments =
vk_alloc2(&device->alloc, pAllocator,
- subpass_attachment_count *
sizeof(VkAttachmentReference), 8,
+ subpass_attachment_count *
sizeof(struct radv_subpass_attachment), 8,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (pass->subpass_attachments == NULL) {
vk_free2(&device->alloc, pAllocator, pass);
@@ -119,8 +119,10 @@ VkResult radv_CreateRenderPass(
p += desc->inputAttachmentCount;
for (uint32_t j = 0; j <
desc->inputAttachmentCount; j++) {
- subpass->input_attachments[j]
- = desc->pInputAttachments[j];
+ subpass->input_attachments[j] = (struct
radv_subpass_attachment) {
+ .attachment =
desc->pInputAttachments[j].attachment,
+ .layout =
desc->pInputAttachments[j].layout,
+ };
if
(desc->pInputAttachments[j].attachment != VK_ATTACHMENT_UNUSED)
pass->attachments[desc->pInputAttachments[j].attachment].view_mask |=
subpass->view_mask;
}
@@ -131,8 +133,10 @@ VkResult radv_CreateRenderPass(
p += desc->colorAttachmentCount;
for (uint32_t j = 0; j <
desc->colorAttachmentCount; j++) {
- subpass->color_attachments[j]
- = desc->pColorAttachments[j];
+ subpass->color_attachments[j] = (struct
radv_subpass_attachment) {
+ .attachment =
desc->pColorAttachments[j].attachment,
+ .layout =
desc->pColorAttachments[j].layout,
+ };
if
(desc->pColorAttachments[j].attachment != VK_ATTACHMENT_UNUSED) {
pass->attachments[desc->pColorAttachments[j].attachment].view_mask |=
subpass->view_mask;
color_sample_count =
pCreateInfo->pAttachments[desc->pColorAttachments[j].attachment].samples;
@@ -147,8 +151,10 @@ VkResult radv_CreateRenderPass(
for (uint32_t j = 0; j <
desc->colorAttachmentCount; j++) {
uint32_t a =
desc->pResolveAttachments[j].attachment;
- subpass->resolve_attachments[j]
- = desc->pResolveAttachments[j];
+ subpass->resolve_attachments[j] = (struct
radv_subpass_attachment) {
+ .attachment =
desc->pResolveAttachments[j].attachment,
+ .layout =
desc->pResolveAttachments[j].layout,
+ };
if (a != VK_ATTACHMENT_UNUSED) {
subpass->has_resolve = true;
pass->attachments[desc->pResolveAttachments[j].attachment].view_mask |=
subpass->view_mask;
@@ -157,8 +163,10 @@ VkResult radv_CreateRenderPass(
}
if (desc->pDepthStencilAttachment) {
- subpass->depth_stencil_attachment =
- *desc->pDepthStencilAttachment;
+ subpass->depth_stencil_attachment = (struct
radv_subpass_attachment) {
+ .attachment =
desc->pDepthStencilAttachment->attachment,
+ .layout =
desc->pDepthStencilAttachment->layout,
+ };
if (desc->pDepthStencilAttachment->attachment !=
VK_ATTACHMENT_UNUSED) {
pass->attachments[desc->pDepthStencilAttachment->attachment].view_mask |=
subpass->view_mask;
depth_sample_count =
pCreateInfo->pAttachments[desc->pDepthStencilAttachment->attachment].samples;
diff --git a/src/amd/vulkan/radv_private.h
b/src/amd/vulkan/radv_private.h
index 4e4b3a6037..106e38a755 100644
--- a/src/amd/vulkan/radv_private.h
+++ b/src/amd/vulkan/radv_private.h
@@ -1706,13 +1706,18 @@ struct radv_subpass_barrier {
VkAccessFlags dst_access_mask;
};
+struct radv_subpass_attachment {
+ uint32_t attachment;
+ VkImageLayout layout;
+};