|  | /* | 
|  | * 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 "include/private/GrContext_Base.h" | 
|  |  | 
|  | #include "src/gpu/GrBaseContextPriv.h" | 
|  | #include "src/gpu/GrCaps.h" | 
|  | #include "src/gpu/GrSkSLFPFactoryCache.h" | 
|  |  | 
|  | 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; | 
|  | } | 
|  |  | 
|  | 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; } | 
|  |  | 
|  | GrBackendFormat GrContext_Base::defaultBackendFormat(SkColorType skColorType, | 
|  | GrRenderable renderable) const { | 
|  | const GrCaps* caps = this->caps(); | 
|  |  | 
|  | GrColorType grColorType = SkColorTypeToGrColorType(skColorType); | 
|  |  | 
|  | GrBackendFormat format = caps->getDefaultBackendFormat(grColorType, renderable); | 
|  | if (!format.isValid()) { | 
|  | return GrBackendFormat(); | 
|  | } | 
|  |  | 
|  | SkASSERT(caps->isFormatTexturableAndUploadable(grColorType, format)); | 
|  | SkASSERT(renderable == GrRenderable::kNo || | 
|  | caps->isFormatAsColorTypeRenderable(grColorType, format)); | 
|  |  | 
|  | return format; | 
|  | } | 
|  |  | 
|  | /////////////////////////////////////////////////////////////////////////////////////////////////// | 
|  | sk_sp<const GrCaps> GrBaseContextPriv::refCaps() const { | 
|  | return fContext->refCaps(); | 
|  | } | 
|  |  | 
|  | sk_sp<GrSkSLFPFactoryCache> GrBaseContextPriv::fpFactoryCache() { | 
|  | return fContext->fpFactoryCache(); | 
|  | } |