1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 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 #include "src/gpu/ResourceKey.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "src/core/SkChecksum.h" 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Worker #include <atomic> 13*c8dee2aaSAndroid Build Coastguard Worker 14*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu { 15*c8dee2aaSAndroid Build Coastguard Worker GenerateResourceType()16*c8dee2aaSAndroid Build Coastguard WorkerScratchKey::ResourceType ScratchKey::GenerateResourceType() { 17*c8dee2aaSAndroid Build Coastguard Worker static std::atomic<int32_t> nextType{ResourceKey::kInvalidDomain + 1}; 18*c8dee2aaSAndroid Build Coastguard Worker 19*c8dee2aaSAndroid Build Coastguard Worker int32_t type = nextType.fetch_add(1, std::memory_order_relaxed); 20*c8dee2aaSAndroid Build Coastguard Worker if (type > SkTo<int32_t>(UINT16_MAX)) { 21*c8dee2aaSAndroid Build Coastguard Worker SK_ABORT("Too many Resource Types"); 22*c8dee2aaSAndroid Build Coastguard Worker } 23*c8dee2aaSAndroid Build Coastguard Worker 24*c8dee2aaSAndroid Build Coastguard Worker return static_cast<ResourceType>(type); 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker GenerateDomain()27*c8dee2aaSAndroid Build Coastguard WorkerUniqueKey::Domain UniqueKey::GenerateDomain() { 28*c8dee2aaSAndroid Build Coastguard Worker static std::atomic<int32_t> nextDomain{ResourceKey::kInvalidDomain + 1}; 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker int32_t domain = nextDomain.fetch_add(1, std::memory_order_relaxed); 31*c8dee2aaSAndroid Build Coastguard Worker if (domain > SkTo<int32_t>(UINT16_MAX)) { 32*c8dee2aaSAndroid Build Coastguard Worker SK_ABORT("Too many skgpu::UniqueKey Domains"); 33*c8dee2aaSAndroid Build Coastguard Worker } 34*c8dee2aaSAndroid Build Coastguard Worker 35*c8dee2aaSAndroid Build Coastguard Worker return static_cast<Domain>(domain); 36*c8dee2aaSAndroid Build Coastguard Worker } 37*c8dee2aaSAndroid Build Coastguard Worker ResourceKeyHash(const uint32_t * data,size_t size)38*c8dee2aaSAndroid Build Coastguard Workeruint32_t ResourceKeyHash(const uint32_t* data, size_t size) { 39*c8dee2aaSAndroid Build Coastguard Worker return SkChecksum::Hash32(data, size); 40*c8dee2aaSAndroid Build Coastguard Worker } 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Worker } // namespace skgpu 43*c8dee2aaSAndroid Build Coastguard Worker 44