diff options
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 13 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.h | 3 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 8 |
3 files changed, 22 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); } diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.h b/src/video_core/renderer_vulkan/renderer_vulkan.h index 5125fadcd7..87422dd935 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.h +++ b/src/video_core/renderer_vulkan/renderer_vulkan.h @@ -75,6 +75,9 @@ private: void RenderScreenshot(std::span<const Tegra::FramebufferConfig> framebuffers); void RenderAppletCaptureLayer(std::span<const Tegra::FramebufferConfig> framebuffers); + std::vector<Tegra::FramebufferConfig> applet_capture_layers; + std::vector<Tegra::FramebufferConfig> screenshot_layer_scratch; + Tegra::MaxwellDeviceMemoryManager& device_memory; Tegra::GPU& gpu; diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 130b5e4cc2..6e6120d1b1 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -592,6 +592,14 @@ void PipelineCache::LoadDiskResources(u64 title_id, std::stop_token stop_loading if (title_id == 0) { return; } + if (!pipeline_cache_filename.empty()) { + serialization_thread.WaitForRequests(); + if (use_vulkan_pipeline_cache && !vulkan_pipeline_cache_filename.empty()) { + SerializeVulkanPipelineCache(vulkan_pipeline_cache_filename, vulkan_pipeline_cache, + CACHE_VERSION); + } + } + const auto shader_dir{Common::FS::GetEdenPath(Common::FS::EdenPath::ShaderDir)}; const auto base_dir{shader_dir / fmt::format("{:016x}", title_id)}; if (!Common::FS::CreateDir(shader_dir) || !Common::FS::CreateDir(base_dir)) { |
