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_GraphiteResourceKey_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define skgpu_graphite_GraphiteResourceKey_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ResourceKey.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/graphite/ResourceTypes.h" 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::graphite { 15*c8dee2aaSAndroid Build Coastguard Worker 16*c8dee2aaSAndroid Build Coastguard Worker class GraphiteResourceKey : public skgpu::ResourceKey { 17*c8dee2aaSAndroid Build Coastguard Worker public: 18*c8dee2aaSAndroid Build Coastguard Worker /** Generate a unique ResourceType. */ 19*c8dee2aaSAndroid Build Coastguard Worker static ResourceType GenerateResourceType(); 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard Worker /** Creates an invalid key. It must be initialized using a Builder object before use. */ GraphiteResourceKey()22*c8dee2aaSAndroid Build Coastguard Worker GraphiteResourceKey() : fShareable(Shareable::kNo) {} 23*c8dee2aaSAndroid Build Coastguard Worker GraphiteResourceKey(const GraphiteResourceKey & that)24*c8dee2aaSAndroid Build Coastguard Worker GraphiteResourceKey(const GraphiteResourceKey& that) { *this = that; } 25*c8dee2aaSAndroid Build Coastguard Worker 26*c8dee2aaSAndroid Build Coastguard Worker /** reset() returns the key to the invalid state. */ 27*c8dee2aaSAndroid Build Coastguard Worker using ResourceKey::reset; 28*c8dee2aaSAndroid Build Coastguard Worker 29*c8dee2aaSAndroid Build Coastguard Worker using ResourceKey::isValid; 30*c8dee2aaSAndroid Build Coastguard Worker resourceType()31*c8dee2aaSAndroid Build Coastguard Worker ResourceType resourceType() const { return this->domain(); } 32*c8dee2aaSAndroid Build Coastguard Worker shareable()33*c8dee2aaSAndroid Build Coastguard Worker Shareable shareable() const { return fShareable; } 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker GraphiteResourceKey& operator=(const GraphiteResourceKey& that) { 36*c8dee2aaSAndroid Build Coastguard Worker this->ResourceKey::operator=(that); 37*c8dee2aaSAndroid Build Coastguard Worker fShareable = that.fShareable; 38*c8dee2aaSAndroid Build Coastguard Worker return *this; 39*c8dee2aaSAndroid Build Coastguard Worker } 40*c8dee2aaSAndroid Build Coastguard Worker 41*c8dee2aaSAndroid Build Coastguard Worker bool operator==(const GraphiteResourceKey& that) const { 42*c8dee2aaSAndroid Build Coastguard Worker bool result = this->ResourceKey::operator==(that); 43*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(!result || (result == (fShareable == that.fShareable))); 44*c8dee2aaSAndroid Build Coastguard Worker return result; 45*c8dee2aaSAndroid Build Coastguard Worker } 46*c8dee2aaSAndroid Build Coastguard Worker bool operator!=(const GraphiteResourceKey& that) const { 47*c8dee2aaSAndroid Build Coastguard Worker return !(*this == that); 48*c8dee2aaSAndroid Build Coastguard Worker } 49*c8dee2aaSAndroid Build Coastguard Worker 50*c8dee2aaSAndroid Build Coastguard Worker class Builder : public ResourceKey::Builder { 51*c8dee2aaSAndroid Build Coastguard Worker public: Builder(GraphiteResourceKey * key,ResourceType type,int data32Count,Shareable shareable)52*c8dee2aaSAndroid Build Coastguard Worker Builder(GraphiteResourceKey* key, ResourceType type, int data32Count, Shareable shareable) 53*c8dee2aaSAndroid Build Coastguard Worker : ResourceKey::Builder(key, type, data32Count) { 54*c8dee2aaSAndroid Build Coastguard Worker key->fShareable = shareable; 55*c8dee2aaSAndroid Build Coastguard Worker } 56*c8dee2aaSAndroid Build Coastguard Worker }; 57*c8dee2aaSAndroid Build Coastguard Worker 58*c8dee2aaSAndroid Build Coastguard Worker private: 59*c8dee2aaSAndroid Build Coastguard Worker Shareable fShareable; 60*c8dee2aaSAndroid Build Coastguard Worker }; 61*c8dee2aaSAndroid Build Coastguard Worker 62*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu::graphite 63*c8dee2aaSAndroid Build Coastguard Worker 64*c8dee2aaSAndroid Build Coastguard Worker #endif // skgpu_graphite_GraphiteResourceKey_DEFINED 65