// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "common/math_util.h" #include "video_core/vulkan_common/vulkan_memory_allocator.h" #include "video_core/vulkan_common/vulkan_wrapper.h" namespace Vulkan { class Device; class Scheduler; class FSR { public: explicit FSR(const Device& device, MemoryAllocator& memory_allocator, size_t image_count, VkExtent2D output_size); VkImageView Draw(Scheduler& scheduler, size_t image_index, VkImageView image_view, VkExtent2D input_image_extent, const Common::Rectangle& crop_rect); private: void CreateDescriptorPool(); void CreateDescriptorSetLayout(); void CreateDescriptorSets(); void CreateImages(); void CreateSampler(); void CreateShaders(); void CreatePipeline(); void CreatePipelineLayout(); void UpdateDescriptorSet(std::size_t image_index, VkImageView image_view) const; const Device& device; MemoryAllocator& memory_allocator; size_t image_count; VkExtent2D output_size; vk::DescriptorPool descriptor_pool; vk::DescriptorSetLayout descriptor_set_layout; vk::DescriptorSets descriptor_sets; vk::PipelineLayout pipeline_layout; vk::ShaderModule easu_shader; vk::ShaderModule rcas_shader; vk::Pipeline easu_pipeline; vk::Pipeline rcas_pipeline; vk::Sampler sampler; std::vector images; std::vector image_views; }; } // namespace Vulkan