/* * 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 #include "src/core/SkOpts.h" #include "src/gpu/GrManagedResource.h" #include 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 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 SkOpts::hash(reinterpret_cast(&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, Key key) : fMtlSamplerState(mtlSamplerState) , fKey(key) {} mutable id fMtlSamplerState; Key fKey; }; #endif