.attachment = VK_ATTACHMENT_UNUSED,
.layout = VK_IMAGE_LAYOUT_GENERAL,
},
- .preserveAttachmentCount = 1,
- .pPreserveAttachments = (uint32_t[]) { 0 },
+ .preserveAttachmentCount = 0,
+ .pPreserveAttachments = NULL,
},
.dependencyCount = 0,
}, &device->meta_state.alloc, rp + dst_layout);
radv_decompress_resolve_src(cmd_buffer, src_image, src_image_layout,
region_count, regions);
+ if (!device->meta_state.resolve_fragment.rc[samples_log2].render_pass[fs_key][dst_layout]) {
+ VkResult ret = create_resolve_pipeline(device, samples_log2, radv_fs_key_format_exemplars[fs_key]);
+ if (ret != VK_SUCCESS) {
+ cmd_buffer->record_result = ret;
+ return;
+ }
+ }
+
rp = device->meta_state.resolve_fragment.rc[samples_log2].render_pass[fs_key][dst_layout];
radv_meta_save(&saved_state, cmd_buffer,
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)
+ if (dest_att.attachment == VK_ATTACHMENT_UNUSED)
continue;
struct radv_image_view *dest_iview = cmd_buffer->state.framebuffer->attachments[dest_att.attachment].attachment;
struct radv_subpass resolve_subpass = {
.color_count = 1,
.color_attachments = (struct radv_subpass_attachment[]) { dest_att },
- .depth_stencil_attachment = { .attachment = VK_ATTACHMENT_UNUSED },
+ .depth_stencil_attachment = NULL,
};
- radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass, false);
+ radv_cmd_buffer_set_subpass(cmd_buffer, &resolve_subpass);
emit_resolve(cmd_buffer,
src_iview,
&(VkExtent2D) { fb->width, fb->height });
}
- cmd_buffer->state.subpass = subpass;
+ radv_cmd_buffer_set_subpass(cmd_buffer, subpass);
+
radv_meta_restore(&saved_state, cmd_buffer);
}