Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(239)

Side by Side Diff: src/gpu/GrContext.cpp

Issue 1149773005: Add direct getter for GrCaps to GrContext. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: init caps in the right place Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/GrClipMaskManager.cpp ('k') | src/gpu/GrCoordTransform.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 10
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 static int32_t next_id() { 131 static int32_t next_id() {
132 int32_t id; 132 int32_t id;
133 do { 133 do {
134 id = sk_atomic_inc(&gNextID); 134 id = sk_atomic_inc(&gNextID);
135 } while (id == SK_InvalidGenID); 135 } while (id == SK_InvalidGenID);
136 return id; 136 return id;
137 } 137 }
138 138
139 GrContext::GrContext() : fUniqueID(next_id()) { 139 GrContext::GrContext() : fUniqueID(next_id()) {
140 fGpu = NULL; 140 fGpu = NULL;
141 fCaps = NULL;
141 fResourceCache = NULL; 142 fResourceCache = NULL;
142 fResourceProvider = NULL; 143 fResourceProvider = NULL;
143 fPathRendererChain = NULL; 144 fPathRendererChain = NULL;
144 fSoftwarePathRenderer = NULL; 145 fSoftwarePathRenderer = NULL;
145 fBatchFontCache = NULL; 146 fBatchFontCache = NULL;
146 fFlushToReduceCacheSize = false; 147 fFlushToReduceCacheSize = false;
147 } 148 }
148 149
149 bool GrContext::init(GrBackend backend, GrBackendContext backendContext, 150 bool GrContext::init(GrBackend backend, GrBackendContext backendContext,
150 const GrContextOptions& options) { 151 const GrContextOptions& options) {
151 SkASSERT(!fGpu); 152 SkASSERT(!fGpu);
152 153
153 fGpu = GrGpu::Create(backend, backendContext, options, this); 154 fGpu = GrGpu::Create(backend, backendContext, options, this);
154 if (!fGpu) { 155 if (!fGpu) {
155 return false; 156 return false;
156 } 157 }
157 this->initCommon(); 158 this->initCommon();
158 return true; 159 return true;
159 } 160 }
160 161
161 void GrContext::initCommon() { 162 void GrContext::initCommon() {
163 fCaps = SkRef(fGpu->caps());
162 fResourceCache = SkNEW(GrResourceCache); 164 fResourceCache = SkNEW(GrResourceCache);
163 fResourceCache->setOverBudgetCallback(OverBudgetCB, this); 165 fResourceCache->setOverBudgetCallback(OverBudgetCB, this);
164 fResourceProvider = SkNEW_ARGS(GrResourceProvider, (fGpu, fResourceCache)); 166 fResourceProvider = SkNEW_ARGS(GrResourceProvider, (fGpu, fResourceCache));
165 167
166 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this))); 168 fLayerCache.reset(SkNEW_ARGS(GrLayerCache, (this)));
167 169
168 fDidTestPMConversions = false; 170 fDidTestPMConversions = false;
169 171
170 fDrawingMgr.init(this); 172 fDrawingMgr.init(this);
171 173
172 // GrBatchFontCache will eventually replace GrFontCache 174 // GrBatchFontCache will eventually replace GrFontCache
173 fBatchFontCache = SkNEW_ARGS(GrBatchFontCache, (this)); 175 fBatchFontCache = SkNEW_ARGS(GrBatchFontCache, (this));
174 176
175 fTextBlobCache.reset(SkNEW_ARGS(GrTextBlobCache, (TextBlobCacheOverBudgetCB, this))); 177 fTextBlobCache.reset(SkNEW_ARGS(GrTextBlobCache, (TextBlobCacheOverBudgetCB, this)));
176 } 178 }
177 179
178 GrContext::~GrContext() { 180 GrContext::~GrContext() {
179 if (!fGpu) { 181 if (!fGpu) {
182 SkASSERT(!fCaps);
180 return; 183 return;
181 } 184 }
182 185
183 this->flush(); 186 this->flush();
184 187
185 for (int i = 0; i < fCleanUpData.count(); ++i) { 188 for (int i = 0; i < fCleanUpData.count(); ++i) {
186 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo); 189 (*fCleanUpData[i].fFunc)(this, fCleanUpData[i].fInfo);
187 } 190 }
188 191
189 SkDELETE(fResourceProvider); 192 SkDELETE(fResourceProvider);
190 SkDELETE(fResourceCache); 193 SkDELETE(fResourceCache);
191 SkDELETE(fBatchFontCache); 194 SkDELETE(fBatchFontCache);
192 195
193 fGpu->unref(); 196 fGpu->unref();
197 fCaps->unref();
194 SkSafeUnref(fPathRendererChain); 198 SkSafeUnref(fPathRendererChain);
195 SkSafeUnref(fSoftwarePathRenderer); 199 SkSafeUnref(fSoftwarePathRenderer);
196 } 200 }
197 201
198 void GrContext::abandonContext() { 202 void GrContext::abandonContext() {
199 fResourceProvider->abandon(); 203 fResourceProvider->abandon();
200 // abandon first to so destructors 204 // abandon first to so destructors
201 // don't try to free the resources in the API. 205 // don't try to free the resources in the API.
202 fResourceCache->abandonAll(); 206 fResourceCache->abandonAll();
203 207
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 if (sb) { 255 if (sb) {
252 return GrStencilAndCoverTextContext::Create(this, leakyProperties); 256 return GrStencilAndCoverTextContext::Create(this, leakyProperties);
253 } 257 }
254 } 258 }
255 259
256 return GrAtlasTextContext::Create(this, leakyProperties, enableDistanceField Fonts); 260 return GrAtlasTextContext::Create(this, leakyProperties, enableDistanceField Fonts);
257 } 261 }
258 262
259 //////////////////////////////////////////////////////////////////////////////// 263 ////////////////////////////////////////////////////////////////////////////////
260 264
261 bool GrContext::shaderDerivativeSupport() const {
262 return fGpu->caps()->shaderCaps()->shaderDerivativeSupport();
263 }
264
265 bool GrContext::isConfigTexturable(GrPixelConfig config) const {
266 return fGpu->caps()->isConfigTexturable(config);
267 }
268
269 bool GrContext::npotTextureTileSupport() const {
270 return fGpu->caps()->npotTextureTileSupport();
271 }
272
273 void GrContext::OverBudgetCB(void* data) { 265 void GrContext::OverBudgetCB(void* data) {
274 SkASSERT(data); 266 SkASSERT(data);
275 267
276 GrContext* context = reinterpret_cast<GrContext*>(data); 268 GrContext* context = reinterpret_cast<GrContext*>(data);
277 269
278 // Flush the InOrderDrawBuffer to possibly free up some textures 270 // Flush the InOrderDrawBuffer to possibly free up some textures
279 context->fFlushToReduceCacheSize = true; 271 context->fFlushToReduceCacheSize = true;
280 } 272 }
281 273
282 void GrContext::TextBlobCacheOverBudgetCB(void* data) { 274 void GrContext::TextBlobCacheOverBudgetCB(void* data) {
283 SkASSERT(data); 275 SkASSERT(data);
284 276
285 // Unlike the GrResourceCache, TextBlobs are drawn at the SkGpuDevice level, therefore they 277 // Unlike the GrResourceCache, TextBlobs are drawn at the SkGpuDevice level, therefore they
286 // cannot use fFlushTorReduceCacheSize because it uses AutoCheckFlush. The solution is to move 278 // cannot use fFlushTorReduceCacheSize because it uses AutoCheckFlush. The solution is to move
287 // drawText calls to below the GrContext level, but this is not trivial beca use they call 279 // drawText calls to below the GrContext level, but this is not trivial beca use they call
288 // drawPath on SkGpuDevice 280 // drawPath on SkGpuDevice
289 GrContext* context = reinterpret_cast<GrContext*>(data); 281 GrContext* context = reinterpret_cast<GrContext*>(data);
290 context->flush(); 282 context->flush();
291 } 283 }
292 284
293 int GrContext::getMaxTextureSize() const {
294 return fGpu->caps()->maxTextureSize();
295 }
296
297 int GrContext::getMaxRenderTargetSize() const {
298 return fGpu->caps()->maxRenderTargetSize();
299 }
300
301 int GrContext::getMaxSampleCount() const {
302 return fGpu->caps()->maxSampleCount();
303 }
304
305 //////////////////////////////////////////////////////////////////////////////// 285 ////////////////////////////////////////////////////////////////////////////////
306 286
307 void GrContext::flush(int flagsBitfield) { 287 void GrContext::flush(int flagsBitfield) {
308 RETURN_IF_ABANDONED 288 RETURN_IF_ABANDONED
309 289
310 if (kDiscard_FlushBit & flagsBitfield) { 290 if (kDiscard_FlushBit & flagsBitfield) {
311 fDrawingMgr.reset(); 291 fDrawingMgr.reset();
312 } else { 292 } else {
313 fDrawingMgr.flush(); 293 fDrawingMgr.flush();
314 } 294 }
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 if (!fSoftwarePathRenderer) { 660 if (!fSoftwarePathRenderer) {
681 fSoftwarePathRenderer = SkNEW_ARGS(GrSoftwarePathRenderer, (this)); 661 fSoftwarePathRenderer = SkNEW_ARGS(GrSoftwarePathRenderer, (this));
682 } 662 }
683 pr = fSoftwarePathRenderer; 663 pr = fSoftwarePathRenderer;
684 } 664 }
685 665
686 return pr; 666 return pr;
687 } 667 }
688 668
689 //////////////////////////////////////////////////////////////////////////////// 669 ////////////////////////////////////////////////////////////////////////////////
690 bool GrContext::isConfigRenderable(GrPixelConfig config, bool withMSAA) const {
691 return fGpu->caps()->isConfigRenderable(config, withMSAA);
692 }
693
694 int GrContext::getRecommendedSampleCount(GrPixelConfig config, 670 int GrContext::getRecommendedSampleCount(GrPixelConfig config,
695 SkScalar dpi) const { 671 SkScalar dpi) const {
696 if (!this->isConfigRenderable(config, true)) { 672 if (!this->caps()->isConfigRenderable(config, true)) {
697 return 0; 673 return 0;
698 } 674 }
699 int chosenSampleCount = 0; 675 int chosenSampleCount = 0;
700 if (fGpu->caps()->shaderCaps()->pathRenderingSupport()) { 676 if (fGpu->caps()->shaderCaps()->pathRenderingSupport()) {
701 if (dpi >= 250.0f) { 677 if (dpi >= 250.0f) {
702 chosenSampleCount = 4; 678 chosenSampleCount = 4;
703 } else { 679 } else {
704 chosenSampleCount = 16; 680 chosenSampleCount = 16;
705 } 681 }
706 } 682 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
768 ////////////////////////////////////////////////////////////////////////////// 744 //////////////////////////////////////////////////////////////////////////////
769 745
770 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) { 746 void GrContext::addGpuTraceMarker(const GrGpuTraceMarker* marker) {
771 fGpu->addGpuTraceMarker(marker); 747 fGpu->addGpuTraceMarker(marker);
772 } 748 }
773 749
774 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) { 750 void GrContext::removeGpuTraceMarker(const GrGpuTraceMarker* marker) {
775 fGpu->removeGpuTraceMarker(marker); 751 fGpu->removeGpuTraceMarker(marker);
776 } 752 }
777 753
OLDNEW
« no previous file with comments | « src/gpu/GrClipMaskManager.cpp ('k') | src/gpu/GrCoordTransform.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698