diff options
Diffstat (limited to 'src/video_core/renderer_vulkan/renderer_vulkan.cpp')
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index d815278c85..6290e79d93 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -292,8 +292,11 @@ void RendererVulkan::RenderScreenshot(std::span<const Tegra::FramebufferConfig> return; } + const auto screenshot_layers = Tegra::FilterLayerStack( + framebuffers, renderer_settings.screenshot_layer_stack, screenshot_layer_scratch); + const auto& layout{renderer_settings.screenshot_framebuffer_layout}; - const auto dst_buffer = RenderToBuffer(framebuffers, layout, VK_FORMAT_B8G8R8A8_UNORM, + const auto dst_buffer = RenderToBuffer(screenshot_layers, layout, VK_FORMAT_B8G8R8A8_UNORM, layout.width * layout.height * 4); std::memcpy(renderer_settings.screenshot_bits, dst_buffer.Mapped().data(), @@ -332,6 +335,12 @@ std::vector<u8> RendererVulkan::GetAppletCaptureBuffer() { void RendererVulkan::RenderAppletCaptureLayer( std::span<const Tegra::FramebufferConfig> framebuffers) { + const auto capture_layers = Tegra::FilterLayerStack( + framebuffers, Service::Nvnflinger::LayerStackId::LastFrame, applet_capture_layers); + + if (capture_layers.empty()) + return; + if (!applet_frame.image) { applet_frame.image = CreateWrappedImage(memory_allocator, CaptureImageSize, CaptureFormat); applet_frame.image_view = CreateWrappedImageView(device, applet_frame.image, CaptureFormat); @@ -340,7 +349,7 @@ void RendererVulkan::RenderAppletCaptureLayer( } scheduler.RequestOutsideRenderPassOperationContext(); - blit_applet.DrawToFrame(device, rasterizer, &applet_frame, framebuffers, VideoCore::Capture::Layout, 1, + blit_applet.DrawToFrame(device, rasterizer, &applet_frame, capture_layers, VideoCore::Capture::Layout, 1, CaptureFormat); } |
