diff options
author | Liam <byteslice@airmail.cc> | 2024-01-15 16:19:02 +0100 |
---|---|---|
committer | Liam <byteslice@airmail.cc> | 2024-01-31 17:27:21 +0100 |
commit | 2ed9586130a7b1de6aefc2aede464c4d3430d484 (patch) | |
tree | 0982d578a4fe40900ad53386092909f594c2422c /src/video_core/renderer_vulkan/present/fsr.h | |
parent | renderer_opengl: move out FSR shader source construction (diff) | |
download | yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.tar yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.tar.gz yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.tar.bz2 yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.tar.lz yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.tar.xz yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.tar.zst yuzu-2ed9586130a7b1de6aefc2aede464c4d3430d484.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan/present/fsr.h')
-rw-r--r-- | src/video_core/renderer_vulkan/present/fsr.h | 71 |
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 |