Skip to content

Commit 2bb540d

Browse files
committed
vulkan: Fix crashes when closing Iris and fix validation errors
1 parent 5f9d04c commit 2bb540d

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

frontend/imgui.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ static bool setup_vulkan_window(iris::instance* iris, ImGui_ImplVulkanH_Window*
5050
attachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
5151
attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
5252
attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
53-
attachment.initialLayout = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL;
53+
attachment.initialLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
5454
attachment.finalLayout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
5555

5656
wd->AttachmentDesc = attachment;
@@ -555,7 +555,7 @@ VkPipeline create_pipeline(iris::instance* iris, VkShaderModule vert_shader, VkS
555555
color_attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
556556
color_attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
557557
color_attachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
558-
color_attachment.finalLayout = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL;
558+
color_attachment.finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
559559

560560
VkAttachmentReference color_attachment_ref = {};
561561
color_attachment_ref.attachment = 0;
@@ -569,7 +569,7 @@ VkPipeline create_pipeline(iris::instance* iris, VkShaderModule vert_shader, VkS
569569
VkSubpassDependency dependency = {};
570570
dependency.srcSubpass = 0;
571571
dependency.dstSubpass = VK_SUBPASS_EXTERNAL;
572-
dependency.srcStageMask = 0;
572+
dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
573573
dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
574574
dependency.srcAccessMask = 0;
575575
dependency.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT;
@@ -871,6 +871,9 @@ bool init(iris::instance* iris) {
871871
}
872872

873873
void cleanup(iris::instance* iris) {
874+
vkQueueWaitIdle(iris->queue);
875+
vkDeviceWaitIdle(iris->device);
876+
874877
vulkan::free_texture(iris, iris->ps1_memory_card_icon);
875878
vulkan::free_texture(iris, iris->ps2_memory_card_icon);
876879
vulkan::free_texture(iris, iris->pocketstation_icon);

frontend/vulkan.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,6 +1017,9 @@ bool init(iris::instance* iris, bool enable_validation) {
10171017
}
10181018

10191019
void cleanup(iris::instance* iris) {
1020+
vkQueueWaitIdle(iris->queue);
1021+
vkDeviceWaitIdle(iris->device);
1022+
10201023
if (iris->descriptor_set_layout) vkDestroyDescriptorSetLayout(iris->device, iris->descriptor_set_layout, nullptr);
10211024
if (iris->descriptor_pool) vkDestroyDescriptorPool(iris->device, iris->descriptor_pool, nullptr);
10221025

@@ -1030,6 +1033,7 @@ void cleanup(iris::instance* iris) {
10301033
if (iris->vertex_buffer_memory) vkFreeMemory(iris->device, iris->vertex_buffer_memory, nullptr);
10311034
if (iris->index_buffer_memory) vkFreeMemory(iris->device, iris->index_buffer_memory, nullptr);
10321035
if (iris->pipeline) vkDestroyPipeline(iris->device, iris->pipeline, nullptr);
1036+
if (iris->surface) SDL_Vulkan_DestroySurface(iris->instance, iris->surface, nullptr);
10331037
if (iris->render_pass) vkDestroyRenderPass(iris->device, iris->render_pass, nullptr);
10341038
if (iris->pipeline_layout) vkDestroyPipelineLayout(iris->device, iris->pipeline_layout, nullptr);
10351039
if (iris->device) vkDestroyDevice(iris->device, nullptr);

0 commit comments

Comments
 (0)