summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/present/fsr.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan/present/fsr.h')
-rw-r--r--src/video_core/renderer_vulkan/present/fsr.h71
1 files changed, 44 insertions, 27 deletions
diff --git a/src/video_core/renderer_vulkan/present/fsr.h b/src/video_core/renderer_vulkan/present/fsr.h
index 3505c1416..8602e8146 100644
--- a/src/video_core/renderer_vulkan/present/fsr.h
+++ b/src/video_core/renderer_vulkan/present/fsr.h
@@ -15,38 +15,55 @@ 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<f32>& crop_rect);
+ VkExtent2D extent);
+ VkImageView Draw(Scheduler& scheduler, size_t image_index, VkImage source_image,
+ VkImageView source_image_view, VkExtent2D input_image_extent,
+ const Common::Rectangle<f32>& crop_rect);
private:
- void CreateDescriptorPool();
- void CreateDescriptorSetLayout();
- void CreateDescriptorSets();
void CreateImages();
+ void CreateRenderPasses();
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<vk::Image> images;
- std::vector<vk::ImageView> image_views;
+ void CreateDescriptorPool();
+ void CreateDescriptorSetLayout();
+ void CreateDescriptorSets();
+ void CreatePipelineLayouts();
+ void CreatePipelines();
+
+ void UploadImages(Scheduler& scheduler);
+ void UpdateDescriptorSets(VkImageView image_view, size_t image_index);
+
+ const Device& m_device;
+ MemoryAllocator& m_memory_allocator;
+ const size_t m_image_count;
+ const VkExtent2D m_extent;
+
+ enum FsrStage {
+ Easu,
+ Rcas,
+ MaxFsrStage,
+ };
+
+ vk::DescriptorPool m_descriptor_pool;
+ vk::DescriptorSetLayout m_descriptor_set_layout;
+ vk::PipelineLayout m_pipeline_layout;
+ vk::ShaderModule m_vert_shader;
+ vk::ShaderModule m_easu_shader;
+ vk::ShaderModule m_rcas_shader;
+ vk::Pipeline m_easu_pipeline;
+ vk::Pipeline m_rcas_pipeline;
+ vk::RenderPass m_renderpass;
+ vk::Sampler m_sampler;
+
+ struct Images {
+ vk::DescriptorSets descriptor_sets;
+ std::array<vk::Image, MaxFsrStage> images;
+ std::array<vk::ImageView, MaxFsrStage> image_views;
+ std::array<vk::Framebuffer, MaxFsrStage> framebuffers;
+ };
+ std::vector<Images> m_dynamic_images;
+ bool m_images_ready{};
};
} // namespace Vulkan