8#ifndef skgpu_graphite_PipelineDataCache_DEFINED
9#define skgpu_graphite_PipelineDataCache_DEFINED
32 DataRef data{&dataBlock};
33 const DataRef* existing = fDataPointers.
find(data);
35 return existing->fPointer;
38 T*
copy = T::Make(dataBlock, &fArena);
39 fDataPointers.
add(DataRef{
copy});
46 return fDataPointers.
count();
50 template <
typename Fn>
51 void foreach(Fn&& fn)
const {
52 fDataPointers.
foreach([fn](
const DataRef& ref){
61 bool operator==(
const DataRef& o)
const {
62 if (!fPointer || !o.fPointer) {
63 return !fPointer && !o.fPointer;
65 return *fPointer == *o.fPointer;
71 size_t operator()(
const DataRef& dataBlock)
const {
72 return dataBlock.fPointer ? dataBlock.fPointer->hash() : 0;
PipelineDataCache()=default
const T * insert(const T &dataBlock)
const T * find(const T &item) const
void foreach(Fn &&fn) const
PipelineDataCache< UniformDataBlock > UniformDataCache
PipelineDataCache< TextureDataBlock > TextureDataCache