| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2011 Google Inc. | 3 * Copyright 2011 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "GrContext.h" | 9 #include "GrContext.h" |
| 10 | |
| 11 #include "GrBatchFontCache.h" | |
| 12 #include "GrBatchFlushState.h" | |
| 13 #include "GrBatchTest.h" | |
| 14 #include "GrCaps.h" | |
| 15 #include "GrContextOptions.h" | 10 #include "GrContextOptions.h" |
| 16 #include "GrDefaultGeoProcFactory.h" | |
| 17 #include "GrDrawingManager.h" | 11 #include "GrDrawingManager.h" |
| 18 #include "GrDrawContext.h" | 12 #include "GrDrawContext.h" |
| 19 #include "GrDrawTarget.h" | |
| 20 #include "GrGpuResource.h" | |
| 21 #include "GrGpuResourcePriv.h" | |
| 22 #include "GrGpu.h" | |
| 23 #include "GrIndexBuffer.h" | |
| 24 #include "GrLayerCache.h" | 13 #include "GrLayerCache.h" |
| 25 #include "GrOvalRenderer.h" | |
| 26 #include "GrPathRenderer.h" | |
| 27 #include "GrPathUtils.h" | |
| 28 #include "GrRenderTargetPriv.h" | |
| 29 #include "GrResourceCache.h" | 14 #include "GrResourceCache.h" |
| 30 #include "GrResourceProvider.h" | 15 #include "GrResourceProvider.h" |
| 31 #include "GrSoftwarePathRenderer.h" | 16 #include "GrSoftwarePathRenderer.h" |
| 32 #include "GrStencilAndCoverTextContext.h" | |
| 33 #include "GrStrokeInfo.h" | |
| 34 #include "GrSurfacePriv.h" | 17 #include "GrSurfacePriv.h" |
| 35 #include "GrTextBlobCache.h" | 18 #include "GrTextBlobCache.h" |
| 36 #include "GrTexturePriv.h" | 19 |
| 37 #include "GrTracing.h" | |
| 38 #include "GrVertices.h" | |
| 39 #include "SkDashPathPriv.h" | |
| 40 #include "SkConfig8888.h" | 20 #include "SkConfig8888.h" |
| 41 #include "SkGrPriv.h" | 21 #include "SkGrPriv.h" |
| 42 #include "SkRRect.h" | |
| 43 #include "SkStrokeRec.h" | |
| 44 #include "SkSurfacePriv.h" | |
| 45 #include "SkTLazy.h" | |
| 46 #include "SkTLS.h" | |
| 47 #include "SkTraceEvent.h" | |
| 48 #include "SkTTopoSort.h" | |
| 49 | |
| 50 #include "batches/GrBatch.h" | |
| 51 | 22 |
| 52 #include "effects/GrConfigConversionEffect.h" | 23 #include "effects/GrConfigConversionEffect.h" |
| 53 #include "effects/GrDashingEffect.h" | |
| 54 #include "effects/GrSingleTextureEffect.h" | |
| 55 | 24 |
| 56 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this) | 25 #define ASSERT_OWNED_RESOURCE(R) SkASSERT(!(R) || (R)->getContext() == this) |
| 57 #define RETURN_IF_ABANDONED if (fDrawingManager->abandoned()) { return; } | 26 #define RETURN_IF_ABANDONED if (fDrawingManager->abandoned()) { return; } |
| 58 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->abandoned()) { return fal
se; } | 27 #define RETURN_FALSE_IF_ABANDONED if (fDrawingManager->abandoned()) { return fal
se; } |
| 59 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->abandoned()) { return null
ptr; } | 28 #define RETURN_NULL_IF_ABANDONED if (fDrawingManager->abandoned()) { return null
ptr; } |
| 60 | 29 |
| 61 | |
| 62 //////////////////////////////////////////////////////////////////////////////// | 30 //////////////////////////////////////////////////////////////////////////////// |
| 63 | 31 |
| 64 void GrDrawingManager::cleanup() { | |
| 65 for (int i = 0; i < fDrawTargets.count(); ++i) { | |
| 66 fDrawTargets[i]->unref(); | |
| 67 } | |
| 68 | |
| 69 fDrawTargets.reset(); | |
| 70 | |
| 71 delete fNVPRTextContext; | |
| 72 fNVPRTextContext = nullptr; | |
| 73 | |
| 74 for (int i = 0; i < kNumPixelGeometries; ++i) { | |
| 75 delete fTextContexts[i][0]; | |
| 76 fTextContexts[i][0] = nullptr; | |
| 77 delete fTextContexts[i][1]; | |
| 78 fTextContexts[i][1] = nullptr; | |
| 79 } | |
| 80 } | |
| 81 | |
| 82 GrDrawingManager::~GrDrawingManager() { | |
| 83 this->cleanup(); | |
| 84 } | |
| 85 | |
| 86 void GrDrawingManager::abandon() { | |
| 87 fAbandoned = true; | |
| 88 this->cleanup(); | |
| 89 } | |
| 90 | |
| 91 void GrDrawingManager::reset() { | |
| 92 for (int i = 0; i < fDrawTargets.count(); ++i) { | |
| 93 fDrawTargets[i]->reset(); | |
| 94 } | |
| 95 } | |
| 96 | |
| 97 void GrDrawingManager::flush() { | |
| 98 SkDEBUGCODE(bool result =) | |
| 99 SkTTopoSort<GrDrawTarget, GrDrawTarget::TopoSortTraits>(
&fDrawTargets); | |
| 100 SkASSERT(result); | |
| 101 | |
| 102 for (int i = 0; i < fDrawTargets.count(); ++i) { | |
| 103 //SkDEBUGCODE(fDrawTargets[i]->dump();) | |
| 104 fDrawTargets[i]->flush(); | |
| 105 } | |
| 106 | |
| 107 #ifndef ENABLE_MDB | |
| 108 // When MDB is disabled we keep reusing the same drawTarget | |
| 109 if (fDrawTargets.count()) { | |
| 110 SkASSERT(fDrawTargets.count() == 1); | |
| 111 fDrawTargets[0]->resetFlag(GrDrawTarget::kWasOutput_Flag); | |
| 112 } | |
| 113 #endif | |
| 114 } | |
| 115 | |
| 116 GrTextContext* GrDrawingManager::textContext(const SkSurfaceProps& props, | |
| 117 GrRenderTarget* rt) { | |
| 118 if (this->abandoned()) { | |
| 119 return nullptr; | |
| 120 } | |
| 121 | |
| 122 SkASSERT(props.pixelGeometry() < kNumPixelGeometries); | |
| 123 bool useDIF = props.isUseDeviceIndependentFonts(); | |
| 124 | |
| 125 if (useDIF && fContext->caps()->shaderCaps()->pathRenderingSupport() && | |
| 126 rt->isStencilBufferMultisampled()) { | |
| 127 GrStencilAttachment* sb = fContext->resourceProvider()->attachStencilAtt
achment(rt); | |
| 128 if (sb) { | |
| 129 if (!fNVPRTextContext) { | |
| 130 fNVPRTextContext = GrStencilAndCoverTextContext::Create(fContext
, props); | |
| 131 } | |
| 132 | |
| 133 return fNVPRTextContext; | |
| 134 } | |
| 135 } | |
| 136 | |
| 137 if (!fTextContexts[props.pixelGeometry()][useDIF]) { | |
| 138 fTextContexts[props.pixelGeometry()][useDIF] = GrAtlasTextContext::Creat
e(fContext, props); | |
| 139 } | |
| 140 | |
| 141 return fTextContexts[props.pixelGeometry()][useDIF]; | |
| 142 } | |
| 143 | |
| 144 GrDrawTarget* GrDrawingManager::newDrawTarget(GrRenderTarget* rt) { | |
| 145 SkASSERT(fContext); | |
| 146 | |
| 147 #ifndef ENABLE_MDB | |
| 148 // When MDB is disabled we always just return the single drawTarget | |
| 149 if (fDrawTargets.count()) { | |
| 150 SkASSERT(fDrawTargets.count() == 1); | |
| 151 // DrawingManager gets the creation ref - this ref is for the caller | |
| 152 return SkRef(fDrawTargets[0]); | |
| 153 } | |
| 154 #endif | |
| 155 | |
| 156 GrDrawTarget* dt = new GrDrawTarget(fContext->getGpu(), fContext->resourcePr
ovider()); | |
| 157 | |
| 158 *fDrawTargets.append() = dt; | |
| 159 | |
| 160 // DrawingManager gets the creation ref - this ref is for the caller | |
| 161 return SkRef(dt); | |
| 162 } | |
| 163 | |
| 164 GrDrawContext* GrDrawingManager::drawContext(GrRenderTarget* rt, | |
| 165 const SkSurfaceProps* surfaceProps)
{ | |
| 166 if (this->abandoned()) { | |
| 167 return nullptr; | |
| 168 } | |
| 169 | |
| 170 return new GrDrawContext(this, rt, surfaceProps); | |
| 171 } | |
| 172 | |
| 173 //////////////////////////////////////////////////////////////////////////////// | |
| 174 | |
| 175 | |
| 176 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext)
{ | 32 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext)
{ |
| 177 GrContextOptions defaultOptions; | 33 GrContextOptions defaultOptions; |
| 178 return Create(backend, backendContext, defaultOptions); | 34 return Create(backend, backendContext, defaultOptions); |
| 179 } | 35 } |
| 180 | 36 |
| 181 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext, | 37 GrContext* GrContext::Create(GrBackend backend, GrBackendContext backendContext, |
| 182 const GrContextOptions& options) { | 38 const GrContextOptions& options) { |
| 183 GrContext* context = new GrContext; | 39 GrContext* context = new GrContext; |
| 184 | 40 |
| 185 if (context->init(backend, backendContext, options)) { | 41 if (context->init(backend, backendContext, options)) { |
| (...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 809 | 665 |
| 810 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes)
{ | 666 void GrContext::setResourceCacheLimits(int maxTextures, size_t maxTextureBytes)
{ |
| 811 fResourceCache->setLimits(maxTextures, maxTextureBytes); | 667 fResourceCache->setLimits(maxTextures, maxTextureBytes); |
| 812 } | 668 } |
| 813 | 669 |
| 814 ////////////////////////////////////////////////////////////////////////////// | 670 ////////////////////////////////////////////////////////////////////////////// |
| 815 | 671 |
| 816 void GrContext::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const { | 672 void GrContext::dumpMemoryStatistics(SkTraceMemoryDump* traceMemoryDump) const { |
| 817 fResourceCache->dumpMemoryStatistics(traceMemoryDump); | 673 fResourceCache->dumpMemoryStatistics(traceMemoryDump); |
| 818 } | 674 } |
| OLD | NEW |