From d9eba433604860c0f00fb7fdab435b0727c38d8d Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 18 Mar 2016 23:30:58 +0100 Subject: [PATCH 1/2] vulkan: Do not create empty render pass. Fix a crash with radeon crimson drivers. --- rpcs3/Emu/RSX/VK/VKGSRender.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index 823697dd55..f85d7617b8 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -211,6 +211,9 @@ namespace { VkRenderPass precompute_render_pass(VkDevice dev, VkFormat color_format, u8 number_of_color_surface, VkFormat depth_format) { + // Some driver crashes when using empty render pass + if (number_of_color_surface == 0 && depth_format == VK_FORMAT_UNDEFINED) + return nullptr; /* Describe a render pass and framebuffer attachments */ std::vector attachments = {}; std::vector attachment_references; From e083c1471c09f00a6fefc8ff9eec77d320f14d26 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Fri, 18 Mar 2016 23:33:23 +0100 Subject: [PATCH 2/2] vulkan: Fix crash at exit --- rpcs3/Emu/RSX/VK/VKGSRender.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index f85d7617b8..610e7140e0 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -457,6 +457,11 @@ VKGSRender::~VKGSRender() //TODO: Properly destroy shader modules instead of calling clear... m_prog_buffer.clear(); + m_index_buffer.release(); + m_uniform_buffer.release(); + + + for (auto &render_pass : m_render_passes) if (render_pass) vkDestroyRenderPass(*m_device, render_pass, nullptr);