// 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; constexpr size_t LSFG_GAMMA_STAGES = 5; constexpr size_t LSFG_GAMMA_TEMPS = 3; class LsfgGamma { public: LsfgGamma() = default; LsfgGamma(const Device& device, MemoryAllocator& memory_allocator, const LsfgShaders& shaders, LsfgResources& resources, vk::DescriptorPool& descriptor_pool, LsfgImageHistory& inputs, LsfgImage& flow_input, LsfgImage* previous); void Dispatch(vk::CommandBuffer cmdbuf, u64 frame_count, size_t slot); [[nodiscard]] LsfgImage& Output() { return out_image; } private: struct Generation { std::array first_descriptor_sets{}; std::array descriptor_sets{}; }; LsfgImageHistory* inputs{}; LsfgImage* flow_input{}; LsfgImage* previous{}; std::array passes; std::array generations{}; vk::DescriptorSets owned_sets; std::array temp1; LsfgImagePair temp2; LsfgImage out_image; }; } // namespace Vulkan