#ifndef EMULATOR_SRC_GRAPHICS_HOST_GPU_RENDERER_BLITHELPER_H_ #define EMULATOR_SRC_GRAPHICS_HOST_GPU_RENDERER_BLITHELPER_H_ #include "common/common.h" #include "graphics/host_gpu/vulkanCommon.h" #include #include namespace Libs::Graphics { class CommandScheduler; class Image; struct GraphicContext; class BlitHelper final { public: inline static constexpr auto ColorToMsDepthLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal; BlitHelper(GraphicContext& graphics, CommandScheduler& scheduler); ~BlitHelper(); KYTY_CLASS_NO_COPY(BlitHelper); void ReinterpretColorAsMsDepth(Image& source, Image& destination); private: struct PipelineKey { uint32_t samples = 1; vk::Format format = vk::Format::eUndefined; auto operator<=>(const PipelineKey&) const = default; }; struct Pipeline { PipelineKey key; vk::Pipeline handle = nullptr; }; [[nodiscard]] vk::Pipeline GetPipeline(PipelineKey key); GraphicContext& m_graphics; CommandScheduler& m_scheduler; vk::DescriptorSetLayout m_descriptor_layout = nullptr; vk::PipelineLayout m_pipeline_layout = nullptr; vk::ShaderModule m_vertex_shader = nullptr; vk::ShaderModule m_fragment_shader = nullptr; std::vector m_pipelines; }; } // namespace Libs::Graphics #endif // EMULATOR_SRC_GRAPHICS_HOST_GPU_RENDERER_BLITHELPER_H_