/* * Copyright 2021 Google LLC * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_graphite_Recording_DEFINED #define skgpu_graphite_Recording_DEFINED #include "include/core/SkRefCnt.h" #include "include/private/SkChecksum.h" #include #include #include namespace skgpu::graphite { class CommandBuffer; class RecordingPriv; class Resource; class ResourceProvider; class TaskGraph; class Texture; class TextureInfo; class TextureProxy; class Recording final { public: ~Recording(); RecordingPriv priv(); #if GRAPHITE_TEST_UTILS bool isTargetProxyInstantiated() const; #endif private: friend class Recorder; // for ctor and LazyProxyData friend class RecordingPriv; // LazyProxyData is used if this recording should be replayed to a target that is provided on // replay, and it handles the target proxy's instantiation with the provided target. class LazyProxyData { public: LazyProxyData(const TextureInfo&); TextureProxy* lazyProxy(); sk_sp refLazyProxy(); bool lazyInstantiate(ResourceProvider*, sk_sp); private: sk_sp fTarget; sk_sp fTargetProxy; }; struct ProxyHash { std::size_t operator()(const sk_sp& proxy) const { return SkGoodHash()(proxy.get()); } }; Recording(std::unique_ptr, std::unordered_set, ProxyHash>&& nonVolatileLazyProxies, std::unordered_set, ProxyHash>&& volatileLazyProxies, std::unique_ptr targetProxyData); bool addCommands(CommandBuffer*, ResourceProvider*); void addResourceRef(sk_sp); std::unique_ptr fGraph; // We don't always take refs to all resources used by specific Tasks (e.g. a common buffer used // for uploads). Instead we'll just hold onto one ref for those Resources outside the Tasks. // Those refs are stored in the array here and will eventually be passed onto a CommandBuffer // when the Recording adds its commands. std::vector> fExtraResourceRefs; std::unordered_set, ProxyHash> fNonVolatileLazyProxies; std::unordered_set, ProxyHash> fVolatileLazyProxies; std::unique_ptr fTargetProxyData; }; } // namespace skgpu::graphite #endif // skgpu_graphite_Recording_DEFINED