aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/renderer_vulkan.h
diff options
context:
space:
mode:
authorZephyron <zephyron@citron-emu.org>2025-03-28 18:25:36 +1000
committerMrPurple666 <antoniosacramento666usa@gmail.com>2025-04-12 23:39:19 -0300
commitb550c6e3cc67e2c92aeefa208fbc466c050977b9 (patch)
treee3ce22942d4af21f8c62bbf6a96d0ee7c7f28369 /src/video_core/renderer_vulkan/renderer_vulkan.h
parent991770b84f6b04ecaa4e4e3844cbaaa6fb0ba1ab (diff)
feat(vulkan): implement enhanced texture and shader management
This commit adds improved Vulkan functionality to the Citron emulator: - Add thread-safe texture management with automatic error recovery - Implement shader caching with validation support - Add robust error handling for Vulkan operations - Implement platform-specific initialization for Windows, Linux, and Android These enhancements improve stability when handling texture loading errors and provide better recovery mechanisms for Vulkan failures. Co-authored-by: boss.sfc <boss.sfc@citron-emu.org> Co-committed-by: boss.sfc <boss.sfc@citron-emu.org> Signed-off-by: Zephyron <zephyron@citron-emu.org>
Diffstat (limited to 'src/video_core/renderer_vulkan/renderer_vulkan.h')
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h
index fe1f6ce53d..e6efc887d1 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.h
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.h
@@ -1,4 +1,5 @@
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
+// SPDX-FileCopyrightText: Copyright 2025 citron Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -6,6 +7,7 @@
#include <memory>
#include <string>
#include <variant>
+#include <functional>
#include "common/dynamic_library.h"
#include "video_core/host1x/gpu_device_memory_manager.h"
@@ -17,6 +19,8 @@
#include "video_core/renderer_vulkan/vk_state_tracker.h"
#include "video_core/renderer_vulkan/vk_swapchain.h"
#include "video_core/renderer_vulkan/vk_turbo_mode.h"
+#include "video_core/renderer_vulkan/vk_texture_manager.h"
+#include "video_core/renderer_vulkan/vk_shader_util.h"
#include "video_core/vulkan_common/vulkan_device.h"
#include "video_core/vulkan_common/vulkan_memory_allocator.h"
#include "video_core/vulkan_common/vulkan_wrapper.h"
@@ -53,6 +57,9 @@ public:
return device.GetDriverName();
}
+ // Enhanced platform-specific initialization
+ void InitializePlatformSpecific();
+
private:
void InterpolateFrames(Frame* prev_frame, Frame* curr_frame);
Frame* previous_frame = nullptr; // Store the previous frame for interpolation
@@ -66,6 +73,10 @@ private:
void RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers);
void RenderAppletCaptureLayer(std::span<const Tegra::FramebufferConfig> framebuffers);
+ // Enhanced error handling
+ bool HandleVulkanError(VkResult result, const std::string& operation);
+ void RecoverFromError();
+
Tegra::MaxwellDeviceMemoryManager& device_memory;
Tegra::GPU& gpu;
@@ -88,6 +99,10 @@ private:
RasterizerVulkan rasterizer;
std::optional<TurboMode> turbo_mode;
+ // Enhanced texture and shader management
+ TextureManager texture_manager;
+ ShaderManager shader_manager;
+
Frame applet_frame;
};