xref: /aosp_15_r20/external/skia/src/gpu/graphite/GraphiteResourceKey.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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