Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 | |
| 2 /* | |
| 3 * Copyright 2014 Google Inc. | |
| 4 * | |
| 5 * Use of this source code is governed by a BSD-style license that can be | |
| 6 * found in the LICENSE file. | |
| 7 */ | |
| 8 | |
| 9 #ifndef GrResourceKey_DEFINED | |
| 10 #define GrResourceKey_DEFINED | |
| 11 | |
| 12 #include "GrTypes.h" | |
| 13 #include "GrBinHashKey.h" | |
| 14 | |
| 15 class GrResourceKey { | |
|
bsalomon
2014/08/27 18:14:33
This is lifted from GrResourceCache.h with the fol
| |
| 16 public: | |
| 17 static GrCacheID::Domain ScratchDomain() { | |
| 18 static const GrCacheID::Domain gDomain = GrCacheID::GenerateDomain(); | |
| 19 return gDomain; | |
| 20 } | |
| 21 | |
| 22 /** Uniquely identifies the GrGpuResource subclass in the key to avoid colli sions | |
| 23 across resource types. */ | |
| 24 typedef uint8_t ResourceType; | |
| 25 | |
| 26 /** Flags set by the GrGpuResource subclass. */ | |
| 27 typedef uint8_t ResourceFlags; | |
| 28 | |
| 29 /** Generate a unique ResourceType */ | |
| 30 static ResourceType GenerateResourceType(); | |
| 31 | |
| 32 /** Creates a key for resource */ | |
| 33 GrResourceKey(const GrCacheID& id, ResourceType type, ResourceFlags flags) { | |
| 34 this->init(id.getDomain(), id.getKey(), type, flags); | |
| 35 }; | |
| 36 | |
|
robertphillips
2014/08/27 19:11:29
one line ?
bsalomon
2014/08/27 20:37:40
Done.
| |
| 37 GrResourceKey(const GrResourceKey& src) { | |
| 38 fKey = src.fKey; | |
| 39 } | |
| 40 | |
|
robertphillips
2014/08/27 19:11:29
one line ?
bsalomon
2014/08/27 20:37:39
Done.
| |
| 41 GrResourceKey() { | |
| 42 fKey.reset(); | |
| 43 } | |
| 44 | |
| 45 void reset(const GrCacheID& id, ResourceType type, ResourceFlags flags) { | |
| 46 this->init(id.getDomain(), id.getKey(), type, flags); | |
| 47 } | |
| 48 | |
|
robertphillips
2014/08/27 19:11:30
one line ?
bsalomon
2014/08/27 20:37:40
Done.
| |
| 49 uint32_t getHash() const { | |
| 50 return fKey.getHash(); | |
| 51 } | |
| 52 | |
| 53 bool isScratch() const { | |
| 54 return ScratchDomain() == | |
| 55 *reinterpret_cast<const GrCacheID::Domain*>(fKey.getData() + | |
| 56 kCacheIDDomainOffset); | |
| 57 } | |
| 58 | |
| 59 ResourceType getResourceType() const { | |
| 60 return *reinterpret_cast<const ResourceType*>(fKey.getData() + | |
| 61 kResourceTypeOffset); | |
| 62 } | |
| 63 | |
| 64 ResourceFlags getResourceFlags() const { | |
| 65 return *reinterpret_cast<const ResourceFlags*>(fKey.getData() + | |
| 66 kResourceFlagsOffset); | |
| 67 } | |
| 68 | |
| 69 bool operator==(const GrResourceKey& other) const { return fKey == other.fKe y; } | |
| 70 | |
| 71 // A key indicating that the resource is not usable as a scratch resource. | |
|
bsalomon
2014/08/27 18:14:33
here
| |
| 72 static GrResourceKey& NullScratchKey() { | |
| 73 static const GrCacheID::Key kBogusKey = {0}; | |
| 74 static GrCacheID kBogusID(ScratchDomain(), kBogusKey); | |
| 75 static GrResourceKey kNullScratchKey(kBogusID, NoneResourceType(), 0); | |
| 76 return kNullScratchKey; | |
| 77 } | |
| 78 | |
| 79 bool isNullScratch() const { | |
|
bsalomon
2014/08/27 18:14:33
here
| |
| 80 return this->isScratch() && NoneResourceType() == this->getResourceType( ); | |
| 81 } | |
| 82 | |
| 83 private: | |
| 84 enum { | |
| 85 kCacheIDKeyOffset = 0, | |
| 86 kCacheIDDomainOffset = kCacheIDKeyOffset + sizeof(GrCacheID::Key), | |
| 87 kResourceTypeOffset = kCacheIDDomainOffset + sizeof(GrCacheID::Domain), | |
| 88 kResourceFlagsOffset = kResourceTypeOffset + sizeof(ResourceType), | |
| 89 kPadOffset = kResourceFlagsOffset + sizeof(ResourceFlags), | |
| 90 kKeySize = SkAlign4(kPadOffset), | |
| 91 kPadSize = kKeySize - kPadOffset | |
| 92 }; | |
| 93 | |
| 94 static ResourceType NoneResourceType() { | |
|
bsalomon
2014/08/27 18:14:33
here
robertphillips
2014/08/27 19:11:29
type -> gNoneResourceType ?
bsalomon
2014/08/27 20:37:39
Done.
| |
| 95 static const ResourceType type = GenerateResourceType(); | |
| 96 return type; | |
| 97 } | |
| 98 | |
| 99 void init(const GrCacheID::Domain domain, | |
| 100 const GrCacheID::Key& key, | |
| 101 ResourceType type, | |
| 102 ResourceFlags flags) { | |
| 103 union { | |
| 104 uint8_t fKey8[kKeySize]; | |
| 105 uint32_t fKey32[kKeySize / 4]; | |
| 106 } keyData; | |
| 107 | |
| 108 uint8_t* k = keyData.fKey8; | |
| 109 memcpy(k + kCacheIDKeyOffset, key.fData8, sizeof(GrCacheID::Key)); | |
| 110 memcpy(k + kCacheIDDomainOffset, &domain, sizeof(GrCacheID::Domain)); | |
| 111 memcpy(k + kResourceTypeOffset, &type, sizeof(ResourceType)); | |
| 112 memcpy(k + kResourceFlagsOffset, &flags, sizeof(ResourceFlags)); | |
| 113 memset(k + kPadOffset, 0, kPadSize); | |
| 114 fKey.setKeyData(keyData.fKey32); | |
| 115 } | |
| 116 GrBinHashKey<kKeySize> fKey; | |
| 117 }; | |
| 118 | |
| 119 #endif | |
| OLD | NEW |