1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2022 Google LLC 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef skgpu_graphite_RuntimeEffectDictionary_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_RuntimeEffectDictionary_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/effects/SkRuntimeEffect.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkTHash.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker class SkRuntimeEffect; 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker // We keep track of all SkRuntimeEffects that are used by a recording, along with their code 20*c8dee2aaSAndroid Build Coastguard Worker // snippet ID. This ensures that we have a live reference to every effect that we're going to 21*c8dee2aaSAndroid Build Coastguard Worker // paint, and gives us a way to retrieve their shader text when we see their code-snippet ID. 22*c8dee2aaSAndroid Build Coastguard Worker class RuntimeEffectDictionary { 23*c8dee2aaSAndroid Build Coastguard Worker public: find(int codeSnippetID)24*c8dee2aaSAndroid Build Coastguard Worker const SkRuntimeEffect* find(int codeSnippetID) const { 25*c8dee2aaSAndroid Build Coastguard Worker sk_sp<const SkRuntimeEffect>* effect = fDict.find(codeSnippetID); 26*c8dee2aaSAndroid Build Coastguard Worker return effect ? effect->get() : nullptr; 27*c8dee2aaSAndroid Build Coastguard Worker } 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker void set(int codeSnippetID, sk_sp<const SkRuntimeEffect> effect); 30*c8dee2aaSAndroid Build Coastguard Worker reset()31*c8dee2aaSAndroid Build Coastguard Worker void reset() { fDict.reset(); } 32*c8dee2aaSAndroid Build Coastguard Worker 33*c8dee2aaSAndroid Build Coastguard Worker private: 34*c8dee2aaSAndroid Build Coastguard Worker skia_private::THashMap<int, sk_sp<const SkRuntimeEffect>> fDict; 35*c8dee2aaSAndroid Build Coastguard Worker }; 36*c8dee2aaSAndroid Build Coastguard Worker 37*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_RuntimeEffectDictionary_DEFINED 40