| /* | |
| * Copyright 2018 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef GrMtlSampler_DEFINED | |
| #define GrMtlSampler_DEFINED | |
| #import <Metal/Metal.h> | |
| #include "src/core/SkChecksum.h" | |
| #include "src/gpu/ganesh/GrManagedResource.h" | |
| #include <atomic> | |
| class GrSamplerState; | |
| class GrMtlGpu; | |
| // A wrapper for a MTLSamplerState object with caching support. | |
| class GrMtlSampler : public GrManagedResource { | |
| public: | |
| static GrMtlSampler* Create(const GrMtlGpu* gpu, GrSamplerState); | |
| ~GrMtlSampler() override { fMtlSamplerState = nil; } | |
| id<MTLSamplerState> mtlSampler() const { return fMtlSamplerState; } | |
| typedef uint32_t Key; | |
| // Helpers for hashing GrMtlSampler | |
| static Key GenerateKey(GrSamplerState); | |
| static const Key& GetKey(const GrMtlSampler& sampler) { return sampler.fKey; } | |
| static uint32_t Hash(const Key& key) { | |
| return SkChecksum::Hash32(&key, sizeof(Key)); | |
| } | |
| #ifdef SK_TRACE_MANAGED_RESOURCES | |
| /** output a human-readable dump of this resource's information | |
| */ | |
| void dumpInfo() const override { | |
| SkDebugf("GrMtlSampler: %p (%ld refs)\n", fMtlSamplerState, | |
| CFGetRetainCount((CFTypeRef)fMtlSamplerState)); | |
| } | |
| #endif | |
| void freeGPUData() const override { | |
| fMtlSamplerState = nil; | |
| } | |
| private: | |
| GrMtlSampler(id<MTLSamplerState> mtlSamplerState, Key key) | |
| : fMtlSamplerState(mtlSamplerState) | |
| , fKey(key) {} | |
| mutable id<MTLSamplerState> fMtlSamplerState; | |
| Key fKey; | |
| }; | |
| #endif |