From cb73a4dcc7710a7fea1643797b17e39858f4ae6a Mon Sep 17 00:00:00 2001 From: PavelBARABANOV Date: Thu, 24 Sep 2026 02:48:46 +0200 Subject: [PATCH] [renderer_vulkan] Skip post-processing on applet layers (#4474) - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Detect applet layers via the absence of the Recording bit in layer_stack_mask (only AppletId::Application sets it) and skip PostProcessChain creation and application for them. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4474 Reviewed-by: CamilleLaVey Reviewed-by: lizzie --- src/video_core/renderer_vulkan/present/layer.cpp | 11 +++++++++-- src/video_core/renderer_vulkan/present/layer.h | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/video_core/renderer_vulkan/present/layer.cpp b/src/video_core/renderer_vulkan/present/layer.cpp index 1868142f51..6d3e7721f6 100644 --- a/src/video_core/renderer_vulkan/present/layer.cpp +++ b/src/video_core/renderer_vulkan/present/layer.cpp @@ -98,7 +98,10 @@ void Layer::ConfigureDraw(const Device& device, PresentPushConstants* out_push_c RefreshResources(device, framebuffer); SetAntiAliasPass(device); #ifdef HAS_RESHADE - SetPostProcessPass(device); + const bool is_applet = + (framebuffer.layer_stack_mask & Service::Nvnflinger::LayerStackBit( + Service::Nvnflinger::LayerStackId::Recording)) == 0; + SetPostProcessPass(device, is_applet); #endif // Finish any pending renderpass @@ -228,7 +231,11 @@ void Layer::SetAntiAliasPass(const Device& device) { } #ifdef HAS_RESHADE -void Layer::SetPostProcessPass(const Device& device) { +void Layer::SetPostProcessPass(const Device& device, bool is_applet) { + if (is_applet) { + post_process.reset(); + return; + } const VkExtent2D render_area{ .width = Settings::values.resolution_info.ScaleUp(raw_width), .height = Settings::values.resolution_info.ScaleUp(raw_height), diff --git a/src/video_core/renderer_vulkan/present/layer.h b/src/video_core/renderer_vulkan/present/layer.h index f290ba5bb4..b965ef7c49 100644 --- a/src/video_core/renderer_vulkan/present/layer.h +++ b/src/video_core/renderer_vulkan/present/layer.h @@ -70,7 +70,7 @@ private: void RefreshResources(const Device& device, const Tegra::FramebufferConfig& framebuffer); void SetAntiAliasPass(const Device& device); #ifdef HAS_RESHADE - void SetPostProcessPass(const Device& device); + void SetPostProcessPass(const Device& device, bool is_applet); #endif void ReleaseRawImages();