Home | History | Annotate | Download | only in gpu
      1 /*
      2  * Copyright 2016 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "GrTextureContext.h"
      9 
     10 #include "GrContextPriv.h"
     11 #include "GrDrawingManager.h"
     12 #include "GrTextureOpList.h"
     13 
     14 #include "../private/GrAuditTrail.h"
     15 
     16 #define ASSERT_SINGLE_OWNER \
     17     SkDEBUGCODE(GrSingleOwner::AutoEnforce debug_SingleOwner(this->singleOwner());)
     18 #define RETURN_FALSE_IF_ABANDONED  if (this->drawingManager()->wasAbandoned()) { return false; }
     19 
     20 GrTextureContext::GrTextureContext(GrContext* context,
     21                                    GrDrawingManager* drawingMgr,
     22                                    sk_sp<GrTextureProxy> textureProxy,
     23                                    sk_sp<SkColorSpace> colorSpace,
     24                                    GrAuditTrail* auditTrail,
     25                                    GrSingleOwner* singleOwner)
     26         : GrSurfaceContext(context, drawingMgr, textureProxy->config(), std::move(colorSpace),
     27                            auditTrail, singleOwner)
     28         , fTextureProxy(std::move(textureProxy))
     29         , fOpList(sk_ref_sp(fTextureProxy->getLastTextureOpList())) {
     30     SkDEBUGCODE(this->validate();)
     31 }
     32 
     33 #ifdef SK_DEBUG
     34 void GrTextureContext::validate() const {
     35     SkASSERT(fTextureProxy);
     36     fTextureProxy->validate(fContext);
     37 
     38     if (fOpList && !fOpList->isClosed()) {
     39         SkASSERT(fTextureProxy->getLastOpList() == fOpList.get());
     40     }
     41 }
     42 #endif
     43 
     44 GrTextureContext::~GrTextureContext() {
     45     ASSERT_SINGLE_OWNER
     46 }
     47 
     48 GrRenderTargetProxy* GrTextureContext::asRenderTargetProxy() {
     49     // If the proxy can return an RTProxy it should've been wrapped in a RTContext
     50     SkASSERT(!fTextureProxy->asRenderTargetProxy());
     51     return nullptr;
     52 }
     53 
     54 sk_sp<GrRenderTargetProxy> GrTextureContext::asRenderTargetProxyRef() {
     55     // If the proxy can return an RTProxy it should've been wrapped in a RTContext
     56     SkASSERT(!fTextureProxy->asRenderTargetProxy());
     57     return nullptr;
     58 }
     59 
     60 GrOpList* GrTextureContext::getOpList() {
     61     ASSERT_SINGLE_OWNER
     62     SkDEBUGCODE(this->validate();)
     63 
     64     if (!fOpList || fOpList->isClosed()) {
     65         fOpList = this->drawingManager()->newTextureOpList(fTextureProxy.get());
     66     }
     67 
     68     return fOpList.get();
     69 }
     70