// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later // SPDX-FileCopyrightText: Copyright 2025 lsfg-vk // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include "common/common_types.h" #include "video_core/renderer_vulkan/present/lsfg_common.h" namespace Vulkan { class Device; class LsfgShaders; class LsfgGenerate { public: LsfgGenerate() = default; LsfgGenerate(const Device& device, const LsfgShaders& shaders, LsfgResources& resources, vk::DescriptorPool& descriptor_pool, LsfgImagePair& frames, LsfgImage& motion, LsfgImage& detail1, LsfgImage& detail2); void SetTarget(const Device& device, size_t slot, u32 target, VkImageView view); void Dispatch(vk::CommandBuffer cmdbuf, u64 frame_count, size_t slot, u32 target, VkImage image, VkExtent2D extent); private: struct Target { std::array descriptor_sets{}; VkImageView view{}; }; struct Generation { std::array targets{}; VkBuffer buffer{}; }; LsfgImagePair* frames{}; LsfgImage* motion{}; LsfgImage* detail1{}; LsfgImage* detail2{}; VkSampler sampler{}; VkSampler edge_sampler{}; LsfgPass pass; std::array generations{}; vk::DescriptorSets owned_sets; }; } // namespace Vulkan