#ifndef CORE_SHADER_RECOMPILER_SHADERDISKCACHE_HPP #define CORE_SHADER_RECOMPILER_SHADERDISKCACHE_HPP #include "CompiledVariant.hpp" #include #include #include #include #include #include #include namespace ShaderRecompiler::ShaderDiskCache { inline constexpr std::uint32_t FormatVersion = 27; enum class LoadStatus { Loaded, Absent, KeyMismatch, Rejected, }; struct Counters { std::uint64_t hits = 0; std::uint64_t misses = 0; std::uint64_t writes = 0; std::uint64_t loadFailures = 0; std::uint64_t writeFailures = 0; std::uint64_t bytesRead = 0; std::uint64_t bytesWritten = 0; }; [[nodiscard]] std::uint64_t SourceVersion(); void BuildKey(const RecompileRequest& request, std::uint32_t hostSubgroupSize, std::vector& key); [[nodiscard]] std::string EntryName(std::span key); void EncodeResult(const RecompileResult& result, std::vector& out); [[nodiscard]] bool DecodeResult(std::span bytes, RecompileResult& result); [[nodiscard]] std::vector EncodeEntry(std::span key, const CompiledVariant& variant); [[nodiscard]] LoadStatus DecodeEntry(std::span file, std::span key, CompiledVariant& variant); [[nodiscard]] bool Enabled(); [[nodiscard]] std::filesystem::path EntryDirectory(); [[nodiscard]] bool Load(std::span key, CompiledVariant& variant); void Store(std::vector key, std::shared_ptr variant); void Flush(); [[nodiscard]] Counters Totals(); } #endif