summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/present/window_adapt_pass.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/renderer_vulkan/present/window_adapt_pass.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/present/window_adapt_pass.h b/src/video_core/renderer_vulkan/present/window_adapt_pass.h
new file mode 100644
index 000000000..0e2edfc31
--- /dev/null
+++ b/src/video_core/renderer_vulkan/present/window_adapt_pass.h
@@ -0,0 +1,58 @@
+// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <list>
+
+#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<Layer>& layers, std::span<const Tegra::FramebufferConfig> configs,
+ const Layout::FramebufferLayout& layout, Frame* dst);
+
+ VkDescriptorSetLayout GetDescriptorSetLayout();
+ VkRenderPass GetRenderPass();
+
+private:
+ void CreateDescriptorSetLayout();
+ void CreatePipelineLayout();
+ void CreateVertexShader();
+ void CreateRenderPass(VkFormat frame_format);
+ void CreatePipeline();
+
+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 pipeline;
+};
+
+} // namespace Vulkan