// SPDX-License-Identifier: MPL-2.0 // Copyright © 2022 Skyline Team and Contributors (https://github.com/skyline-emu/) #pragma once #include #include #include #include "common.h" #include "tic.h" namespace skyline::gpu::interconnect { class TexturePoolState : dirty::CachedManualDirty { public: struct EngineRegisters { const engine_common::TexHeaderPool &texHeaderPool; void DirtyBind(DirtyManager &manager, dirty::Handle handle) const; }; private: dirty::BoundSubresource engine; public: span textureHeaders; TexturePoolState(dirty::Handle dirtyHandle, DirtyManager &manager, const EngineRegisters &engine); void Flush(InterconnectContext &ctx); void PurgeCaches(); }; class Textures { private: std::shared_ptr nullTextureView{}; dirty::ManualDirtyState texturePool; tsl::robin_map, util::ObjectHash> textureHeaderStore; struct CacheEntry { TextureImageControl tic; TextureView *view; u64 sequenceNumber; }; std::vector textureHeaderCache; public: Textures(DirtyManager &manager, const TexturePoolState::EngineRegisters &engine); void MarkAllDirty(); TextureView *GetTexture(InterconnectContext &ctx, u32 index, Shader::TextureType shaderType); Shader::TextureType GetTextureType(InterconnectContext &ctx, u32 index); }; }