summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_blit_screen.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_blit_screen.h')
-rw-r--r--src/video_core/renderer_vulkan/vk_blit_screen.h93
1 files changed, 30 insertions, 63 deletions
diff --git a/src/video_core/renderer_vulkan/vk_blit_screen.h b/src/video_core/renderer_vulkan/vk_blit_screen.h
index d7f8effa2..555b3d82e 100644
--- a/src/video_core/renderer_vulkan/vk_blit_screen.h
+++ b/src/video_core/renderer_vulkan/vk_blit_screen.h
@@ -30,16 +30,20 @@ namespace Service::android {
enum class PixelFormat : u32;
}
+namespace Settings {
+enum class AntiAliasing : u32;
+enum class ScalingFilter : u32;
+} // namespace Settings
+
namespace Vulkan {
+class AntiAliasPass;
class Device;
class FSR;
-class FXAA;
class RasterizerVulkan;
class Scheduler;
-class SMAA;
-class Swapchain;
class PresentManager;
+class WindowAdaptPass;
struct Frame;
@@ -54,103 +58,66 @@ struct FramebufferTextureInfo {
class BlitScreen {
public:
- explicit BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory,
- Core::Frontend::EmuWindow& render_window, const Device& device,
- MemoryAllocator& memory_manager, Swapchain& swapchain,
- PresentManager& present_manager, Scheduler& scheduler);
+ explicit BlitScreen(Tegra::MaxwellDeviceMemoryManager& device_memory, const Device& device,
+ MemoryAllocator& memory_allocator, PresentManager& present_manager,
+ Scheduler& scheduler);
~BlitScreen();
- void Recreate();
-
- void Draw(RasterizerVulkan& rasterizer, const Tegra::FramebufferConfig& framebuffer,
- const VkFramebuffer& host_framebuffer, const Layout::FramebufferLayout layout,
- VkExtent2D render_area);
-
- void DrawToSwapchain(RasterizerVulkan& rasterizer, Frame* frame,
- const Tegra::FramebufferConfig& framebuffer);
-
- [[nodiscard]] vk::Framebuffer CreateFramebuffer(const VkImageView& image_view,
- VkExtent2D extent);
+ void DrawToFrame(RasterizerVulkan& rasterizer, Frame* frame,
+ const Tegra::FramebufferConfig& framebuffer,
+ const Layout::FramebufferLayout& layout, size_t swapchain_images,
+ VkFormat current_swapchain_view_format);
- [[nodiscard]] vk::Framebuffer CreateFramebuffer(const VkImageView& image_view,
- VkExtent2D extent, vk::RenderPass& rd);
+ [[nodiscard]] vk::Framebuffer CreateFramebuffer(const Layout::FramebufferLayout& layout,
+ const VkImageView& image_view,
+ VkFormat current_view_format);
private:
- struct BufferData;
+ void WaitIdle();
+ void SetWindowAdaptPass(const Layout::FramebufferLayout& layout);
+ void SetAntiAliasPass();
- void CreateStaticResources();
- void CreateShaders();
- void CreateDescriptorPool();
- void CreateRenderPass();
- vk::RenderPass CreateRenderPassImpl(VkFormat format);
- void CreateDescriptorSetLayout();
- void CreateDescriptorSets();
- void CreatePipelineLayout();
- void CreateGraphicsPipeline();
- void CreateSampler();
+ void Draw(RasterizerVulkan& rasterizer, const Tegra::FramebufferConfig& framebuffer,
+ const Layout::FramebufferLayout& layout, Frame* dst);
- void CreateDynamicResources();
+ vk::Framebuffer CreateFramebuffer(const VkImageView& image_view, VkExtent2D extent,
+ VkRenderPass render_pass);
void RefreshResources(const Tegra::FramebufferConfig& framebuffer);
void ReleaseRawImages();
void CreateStagingBuffer(const Tegra::FramebufferConfig& framebuffer);
void CreateRawImages(const Tegra::FramebufferConfig& framebuffer);
- void UpdateDescriptorSet(VkImageView image_view, bool nn) const;
- void SetUniformData(BufferData& data, const Layout::FramebufferLayout layout) const;
- void SetVertexData(BufferData& data, const Tegra::FramebufferConfig& framebuffer,
- const Layout::FramebufferLayout layout, u32 texture_width,
- u32 texture_height) const;
-
- void CreateSMAA(VkExtent2D smaa_size);
- void CreateFSR();
-
u64 CalculateBufferSize(const Tegra::FramebufferConfig& framebuffer) const;
u64 GetRawImageOffset(const Tegra::FramebufferConfig& framebuffer) const;
Tegra::MaxwellDeviceMemoryManager& device_memory;
- Core::Frontend::EmuWindow& render_window;
const Device& device;
MemoryAllocator& memory_allocator;
- Swapchain& swapchain;
PresentManager& present_manager;
Scheduler& scheduler;
std::size_t image_count;
std::size_t image_index{};
- vk::ShaderModule vertex_shader;
- vk::ShaderModule bilinear_fragment_shader;
- vk::ShaderModule bicubic_fragment_shader;
- vk::ShaderModule gaussian_fragment_shader;
- vk::ShaderModule scaleforce_fragment_shader;
- vk::DescriptorPool descriptor_pool;
- vk::DescriptorSetLayout descriptor_set_layout;
- vk::PipelineLayout pipeline_layout;
- vk::Pipeline bilinear_pipeline;
- vk::Pipeline bicubic_pipeline;
- vk::Pipeline gaussian_pipeline;
- vk::Pipeline scaleforce_pipeline;
- vk::RenderPass renderpass;
- vk::DescriptorSets descriptor_sets;
- vk::Sampler nn_sampler;
- vk::Sampler sampler;
-
vk::Buffer buffer;
std::vector<u64> resource_ticks;
std::vector<vk::Image> raw_images;
std::vector<vk::ImageView> raw_image_views;
-
u32 raw_width = 0;
u32 raw_height = 0;
+
Service::android::PixelFormat pixel_format{};
VkFormat framebuffer_view_format;
VkFormat swapchain_view_format;
+ Settings::AntiAliasing anti_aliasing{};
+ Settings::ScalingFilter scaling_filter{};
+
std::unique_ptr<FSR> fsr;
- std::unique_ptr<SMAA> smaa;
- std::unique_ptr<FXAA> fxaa;
+ std::unique_ptr<AntiAliasPass> anti_alias;
+ std::unique_ptr<WindowAdaptPass> window_adapt;
};
} // namespace Vulkan