| /* | |
| * Copyright 2019 Google Inc. | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "GrContext_Base.h" | |
| #include "GrBaseContextPriv.h" | |
| #include "GrCaps.h" | |
| #include "GrSkSLFPFactoryCache.h" | |
| #ifdef SK_DISABLE_EXPLICIT_GPU_RESOURCE_ALLOCATION | |
| static const bool kDefaultExplicitlyAllocateGPUResources = false; | |
| #else | |
| static const bool kDefaultExplicitlyAllocateGPUResources = true; | |
| #endif | |
| static int32_t next_id() { | |
| static std::atomic<int32_t> nextID{1}; | |
| int32_t id; | |
| do { | |
| id = nextID++; | |
| } while (id == SK_InvalidGenID); | |
| return id; | |
| } | |
| GrContext_Base::GrContext_Base(GrBackendApi backend, | |
| const GrContextOptions& options, | |
| uint32_t contextID) | |
| : fBackend(backend) | |
| , fOptions(options) | |
| , fContextID(SK_InvalidGenID == contextID ? next_id() : contextID) { | |
| } | |
| GrContext_Base::~GrContext_Base() { } | |
| bool GrContext_Base::init(sk_sp<const GrCaps> caps, sk_sp<GrSkSLFPFactoryCache> FPFactoryCache) { | |
| SkASSERT(caps && FPFactoryCache); | |
| fCaps = caps; | |
| fFPFactoryCache = FPFactoryCache; | |
| return true; | |
| } | |
| bool GrContext_Base::explicitlyAllocateGPUResources() const { | |
| if (GrContextOptions::Enable::kNo == fOptions.fExplicitlyAllocateGPUResources) { | |
| return false; | |
| } | |
| if (GrContextOptions::Enable::kYes == fOptions.fExplicitlyAllocateGPUResources) { | |
| return true; | |
| } | |
| return kDefaultExplicitlyAllocateGPUResources; | |
| } | |
| const GrCaps* GrContext_Base::caps() const { return fCaps.get(); } | |
| sk_sp<const GrCaps> GrContext_Base::refCaps() const { return fCaps; } | |
| sk_sp<GrSkSLFPFactoryCache> GrContext_Base::fpFactoryCache() { return fFPFactoryCache; } | |
| /////////////////////////////////////////////////////////////////////////////////////////////////// | |
| sk_sp<const GrCaps> GrBaseContextPriv::refCaps() const { | |
| return fContext->refCaps(); | |
| } | |
| sk_sp<GrSkSLFPFactoryCache> GrBaseContextPriv::fpFactoryCache() { | |
| return fContext->fpFactoryCache(); | |
| } |