// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include "common/math_util.h" #include "video_core/vulkan_common/vulkan_wrapper.h" namespace Layout { struct FramebufferLayout; } namespace Tegra { struct FramebufferConfig; } namespace Vulkan { class Device; struct Frame; class Layer; class Scheduler; class RasterizerVulkan; class WindowAdaptPass final { public: explicit WindowAdaptPass(const Device& device, VkFormat frame_format, vk::Sampler&& sampler, vk::ShaderModule&& fragment_shader); ~WindowAdaptPass(); void Draw(RasterizerVulkan& rasterizer, Scheduler& scheduler, size_t image_index, std::list& layers, std::span configs, const Layout::FramebufferLayout& layout, Frame* dst); VkDescriptorSetLayout GetDescriptorSetLayout(); VkRenderPass GetRenderPass(); private: void CreateDescriptorSetLayout(); void CreatePipelineLayout(); void CreateVertexShader(); void CreateRenderPass(VkFormat frame_format); void CreatePipelines(); private: const Device& device; vk::DescriptorSetLayout descriptor_set_layout; vk::PipelineLayout pipeline_layout; vk::Sampler sampler; vk::ShaderModule vertex_shader; vk::ShaderModule fragment_shader; vk::RenderPass render_pass; vk::Pipeline opaque_pipeline; vk::Pipeline premultiplied_pipeline; vk::Pipeline coverage_pipeline; }; } // namespace Vulkan