diff --git a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp index 6a9eb246f..3a54e0fff 100644 --- a/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp +++ b/src/shader_recompiler/backend/spirv/spirv_emit_context.cpp @@ -392,8 +392,9 @@ void EmitContext::DefineBuffers() { const bool is_storage = desc.IsStorage(sharp); const auto* data_types = True(desc.used_types & IR::Type::F32) ? &F32 : &U32; const Id data_type = (*data_types)[1]; - const Id record_array_type{is_storage ? TypeRuntimeArray(data_type) - : TypeArray(data_type, ConstU32(sharp.NumDwords()))}; + const Id record_array_type{ + is_storage ? TypeRuntimeArray(data_type) + : TypeArray(data_type, ConstU32(std::max(sharp.NumDwords(), 1U)))}; const Id struct_type{define_struct(record_array_type, desc.is_instance_data)}; const auto storage_class = diff --git a/src/video_core/renderer_vulkan/vk_swapchain.cpp b/src/video_core/renderer_vulkan/vk_swapchain.cpp index 8c268c9be..357cd504d 100644 --- a/src/video_core/renderer_vulkan/vk_swapchain.cpp +++ b/src/video_core/renderer_vulkan/vk_swapchain.cpp @@ -197,6 +197,11 @@ void Swapchain::SetSurfaceProperties() { void Swapchain::Destroy() { vk::Device device = instance.GetDevice(); + const auto wait_result = device.waitIdle(); + if (wait_result != vk::Result::eSuccess) { + LOG_WARNING(Render_Vulkan, "Failed to wait for device to become idle: {}", + vk::to_string(wait_result)); + } if (swapchain) { device.destroySwapchainKHR(swapchain); }