// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include #include #include #include #include "common/common_types.h" namespace VideoCore { struct FxChainEntry { std::string file; std::string technique; std::map> values; bool operator==(const FxChainEntry&) const = default; }; struct FxChainSnapshot { std::vector entries; u64 generation{}; }; std::vector ParseFxChain(std::string_view value); std::string SerializeFxChain(std::span entries); void UseGlobalFxSettings(); void UsePerGameFxSettings(); class FxChain { public: static FxChain& Instance(); FxChainSnapshot Snapshot() const; std::vector Entries() const; size_t Size() const; void Append(std::string_view file, std::string_view technique); void Replace(size_t index, std::string_view file, std::string_view technique); void Remove(size_t index); void Move(size_t index, int delta); void Clear(); void SetEntries(std::vector next); void SetValue(size_t index, std::string_view uniform, const std::array& value); std::array GetValue(size_t index, std::string_view uniform) const; std::map> EntryValues(size_t index) const; bool HasValue(size_t index, std::string_view uniform) const; void ResetValues(size_t index); void LoadFromSettings(); void StoreToSettings() const; void DropUnknownEntries(); private: FxChain() = default; mutable std::mutex mutex; std::vector entries; std::atomic generation{1}; }; } // namespace VideoCore