From 7e943732bf025bb7ead5ee3e104b88c020f9f422 Mon Sep 17 00:00:00 2001 From: swurl Date: Sun, 11 May 2025 23:58:25 +0000 Subject: fix a large variety of issues (#101) - GLASM/SPIR-V mixup on Android - potential greenscreen fix (thx suyu) - save memory layout and add 10gb/12gb options - potential samsung gaming hub fix - fix layout of controller UI - fix default settings to sensible defaults. - note to TotK that you should increase memory layout - Error checking for Windows linking - fix an IDE error - improved migration system w/threading and busy indicator - disabled citron migration for now - replaced some user-facing legacy strings with eden - Added 10GB and 12GB DRAM layouts - Fix Android black screen issues - add discord link & update FAQ/Quickstart - update links in about page - add back rich presence - add Don't show again for desktop pre alpha banner - add citron warning to android and polaris to desktop Signed-off-by: swurl Co-authored-by: Pavel Barabanov Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/101 Co-authored-by: swurl Co-committed-by: swurl --- src/video_core/renderer_vulkan/renderer_vulkan.cpp | 114 ++++++++++++++------- 1 file changed, 78 insertions(+), 36 deletions(-) (limited to 'src/video_core/renderer_vulkan/renderer_vulkan.cpp') diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index 3260ef8cc2..30f5ff7a75 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -1,6 +1,9 @@ // SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-FileCopyrightText: Copyright 2025 eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + #include #include #include @@ -99,52 +102,91 @@ Device CreateDevice(const vk::Instance& instance, const vk::InstanceDispatch& dl } RendererVulkan::RendererVulkan(Core::Frontend::EmuWindow& emu_window, - Tegra::MaxwellDeviceMemoryManager& device_memory_, Tegra::GPU& gpu_, - std::unique_ptr context_) try - : RendererBase(emu_window, std::move(context_)), device_memory(device_memory_), gpu(gpu_), - library(OpenLibrary(context.get())), - // Create raw Vulkan instance first - instance(CreateInstance(*library, dld, VK_API_VERSION_1_1, render_window.GetWindowInfo().type, - Settings::values.renderer_debug.GetValue())), - // Now create RAII wrappers for the resources in the correct order - managed_instance(MakeManagedInstance(instance, dld)), - // Create debug messenger if debug is enabled - debug_messenger(Settings::values.renderer_debug ? CreateDebugUtilsCallback(instance) - : vk::DebugUtilsMessenger{}), - managed_debug_messenger(Settings::values.renderer_debug - ? MakeManagedDebugUtilsMessenger(debug_messenger, instance, dld) - : ManagedDebugUtilsMessenger{}), - // Create surface - surface(CreateSurface(instance, render_window.GetWindowInfo())), - managed_surface(MakeManagedSurface(surface, instance, dld)), - device(CreateDevice(instance, dld, *surface)), - memory_allocator(device), state_tracker(), - scheduler(device, state_tracker), - swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width, - render_window.GetFramebufferLayout().height), - present_manager(instance, render_window, device, memory_allocator, scheduler, swapchain, - *surface), - blit_swapchain(device_memory, device, memory_allocator, present_manager, scheduler, - PresentFiltersForDisplay), - blit_capture(device_memory, device, memory_allocator, present_manager, scheduler, - PresentFiltersForDisplay), - blit_applet(device_memory, device, memory_allocator, present_manager, scheduler, - PresentFiltersForAppletCapture), - rasterizer(render_window, gpu, device_memory, device, memory_allocator, state_tracker, - scheduler), - applet_frame() { - - if (Settings::values.renderer_force_max_clock.GetValue() && device.ShouldBoostClocks()) { + Tegra::MaxwellDeviceMemoryManager& device_memory_, + Tegra::GPU& gpu_, + std::unique_ptr context_) +try + : RendererBase(emu_window, std::move(context_)) + , device_memory(device_memory_) + , gpu(gpu_) + , library(OpenLibrary(context.get())) + , + // Create raw Vulkan instance first + instance(CreateInstance(*library, + dld, + VK_API_VERSION_1_1, + render_window.GetWindowInfo().type, + Settings::values.renderer_debug.GetValue())) + , + // Now create RAII wrappers for the resources in the correct order + managed_instance(MakeManagedInstance(instance, dld)) + , + // Create debug messenger if debug is enabled + debug_messenger(Settings::values.renderer_debug ? CreateDebugUtilsCallback(instance) + : vk::DebugUtilsMessenger{}) + , managed_debug_messenger(Settings::values.renderer_debug + ? MakeManagedDebugUtilsMessenger(debug_messenger, instance, dld) + : ManagedDebugUtilsMessenger{}) + , + // Create surface + surface(CreateSurface(instance, render_window.GetWindowInfo())) + , managed_surface(MakeManagedSurface(surface, instance, dld)) + , device(CreateDevice(instance, dld, *surface)) + , memory_allocator(device) + , state_tracker() + , scheduler(device, state_tracker) + , swapchain(*surface, + device, + scheduler, + render_window.GetFramebufferLayout().width, + render_window.GetFramebufferLayout().height) + , present_manager(instance, + render_window, + device, + memory_allocator, + scheduler, + swapchain, +#ifdef ANDROID + surface) + , +#else + *surface) + , +#endif + blit_swapchain(device_memory, + device, + memory_allocator, + present_manager, + scheduler, + PresentFiltersForDisplay) + , blit_capture(device_memory, + device, + memory_allocator, + present_manager, + scheduler, + PresentFiltersForDisplay) + , blit_applet(device_memory, + device, + memory_allocator, + present_manager, + scheduler, + PresentFiltersForAppletCapture) + , rasterizer(render_window, gpu, device_memory, device, memory_allocator, state_tracker, scheduler) + , applet_frame() { + + if (Settings::values.renderer_force_max_clock.GetValue() && device.ShouldBoostClocks()) { turbo_mode.emplace(instance, dld); scheduler.RegisterOnSubmit([this] { turbo_mode->QueueSubmitted(); }); } +#ifndef ANDROID // Release ownership from the old instance and surface instance.release(); surface.release(); if (Settings::values.renderer_debug) { debug_messenger.release(); } +#endif Report(); } catch (const vk::Exception& exception) { -- cgit v1.2.3