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

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

Issue 638403003: Remove uses of GrAutoScratchTexture. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase and address comment Created 6 years, 2 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
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 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 440
441 GrTexture* GrContext::createNewScratchTexture(const GrTextureDesc& desc) { 441 GrTexture* GrContext::createNewScratchTexture(const GrTextureDesc& desc) {
442 GrTexture* texture = fGpu->createTexture(desc, NULL, 0); 442 GrTexture* texture = fGpu->createTexture(desc, NULL, 0);
443 if (!texture) { 443 if (!texture) {
444 return NULL; 444 return NULL;
445 } 445 }
446 fResourceCache->addResource(texture->getScratchKey(), texture); 446 fResourceCache->addResource(texture->getScratchKey(), texture);
447 return texture; 447 return texture;
448 } 448 }
449 449
450 GrTexture* GrContext::lockAndRefScratchTexture(const GrTextureDesc& inDesc, Scra tchTexMatch match, 450 GrTexture* GrContext::refScratchTexture(const GrTextureDesc& inDesc, ScratchTexM atch match,
451 bool calledDuringFlush) { 451 bool calledDuringFlush) {
452
453 // kNoStencil has no meaning if kRT isn't set. 452 // kNoStencil has no meaning if kRT isn't set.
454 SkASSERT((inDesc.fFlags & kRenderTarget_GrTextureFlagBit) || 453 SkASSERT((inDesc.fFlags & kRenderTarget_GrTextureFlagBit) ||
455 !(inDesc.fFlags & kNoStencil_GrTextureFlagBit)); 454 !(inDesc.fFlags & kNoStencil_GrTextureFlagBit));
456 455
457 // Make sure caller has checked for renderability if kRT is set. 456 // Make sure caller has checked for renderability if kRT is set.
458 SkASSERT(!(inDesc.fFlags & kRenderTarget_GrTextureFlagBit) || 457 SkASSERT(!(inDesc.fFlags & kRenderTarget_GrTextureFlagBit) ||
459 this->isConfigRenderable(inDesc.fConfig, inDesc.fSampleCnt > 0)); 458 this->isConfigRenderable(inDesc.fConfig, inDesc.fSampleCnt > 0));
460 459
461 SkTCopyOnFirstWrite<GrTextureDesc> desc(inDesc); 460 SkTCopyOnFirstWrite<GrTextureDesc> desc(inDesc);
462 461
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
1300 if (GrPixelConfigSwapRAndB(srcConfig) == 1299 if (GrPixelConfigSwapRAndB(srcConfig) ==
1301 fGpu->preferredWritePixelsConfig(srcConfig, renderTarget->config())) { 1300 fGpu->preferredWritePixelsConfig(srcConfig, renderTarget->config())) {
1302 writeConfig = GrPixelConfigSwapRAndB(srcConfig); 1301 writeConfig = GrPixelConfigSwapRAndB(srcConfig);
1303 swapRAndB = true; 1302 swapRAndB = true;
1304 } 1303 }
1305 1304
1306 GrTextureDesc desc; 1305 GrTextureDesc desc;
1307 desc.fWidth = width; 1306 desc.fWidth = width;
1308 desc.fHeight = height; 1307 desc.fHeight = height;
1309 desc.fConfig = writeConfig; 1308 desc.fConfig = writeConfig;
1310 GrAutoScratchTexture ast(this, desc); 1309 SkAutoTUnref<GrTexture> texture(this->refScratchTexture(desc, kApprox_Scratc hTexMatch));
1311 GrTexture* texture = ast.texture(); 1310 if (!texture) {
1312 if (NULL == texture) {
1313 return false; 1311 return false;
1314 } 1312 }
1315 1313
1316 SkAutoTUnref<const GrFragmentProcessor> fp; 1314 SkAutoTUnref<const GrFragmentProcessor> fp;
1317 SkMatrix textureMatrix; 1315 SkMatrix textureMatrix;
1318 textureMatrix.setIDiv(texture->width(), texture->height()); 1316 textureMatrix.setIDiv(texture->width(), texture->height());
1319 1317
1320 // allocate a tmp buffer and sw convert the pixels to premul 1318 // allocate a tmp buffer and sw convert the pixels to premul
1321 SkAutoSTMalloc<128 * 128, uint32_t> tmpPixels(0); 1319 SkAutoSTMalloc<128 * 128, uint32_t> tmpPixels(0);
1322 1320
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 if (unpremul && !GrPixelConfigIs8888(dstConfig)) { 1430 if (unpremul && !GrPixelConfigIs8888(dstConfig)) {
1433 // The unpremul flag is only allowed for these two configs. 1431 // The unpremul flag is only allowed for these two configs.
1434 return false; 1432 return false;
1435 } 1433 }
1436 1434
1437 // If the src is a texture and we would have to do conversions after read pi xels, we instead 1435 // If the src is a texture and we would have to do conversions after read pi xels, we instead
1438 // do the conversions by drawing the src to a scratch texture. If we handle any of the 1436 // do the conversions by drawing the src to a scratch texture. If we handle any of the
1439 // conversions in the draw we set the corresponding bool to false so that we don't reapply it 1437 // conversions in the draw we set the corresponding bool to false so that we don't reapply it
1440 // on the read back pixels. 1438 // on the read back pixels.
1441 GrTexture* src = target->asTexture(); 1439 GrTexture* src = target->asTexture();
1442 GrAutoScratchTexture ast;
1443 if (src && (swapRAndB || unpremul || flipY)) { 1440 if (src && (swapRAndB || unpremul || flipY)) {
1444 // Make the scratch a render so we can read its pixels. 1441 // Make the scratch a render so we can read its pixels.
1445 GrTextureDesc desc; 1442 GrTextureDesc desc;
1446 desc.fFlags = kRenderTarget_GrTextureFlagBit; 1443 desc.fFlags = kRenderTarget_GrTextureFlagBit;
1447 desc.fWidth = width; 1444 desc.fWidth = width;
1448 desc.fHeight = height; 1445 desc.fHeight = height;
1449 desc.fConfig = readConfig; 1446 desc.fConfig = readConfig;
1450 desc.fOrigin = kTopLeft_GrSurfaceOrigin; 1447 desc.fOrigin = kTopLeft_GrSurfaceOrigin;
1451 1448
1452 // When a full read back is faster than a partial we could always make t he scratch exactly 1449 // When a full read back is faster than a partial we could always make t he scratch exactly
1453 // match the passed rect. However, if we see many different size rectang les we will trash 1450 // match the passed rect. However, if we see many different size rectang les we will trash
1454 // our texture cache and pay the cost of creating and destroying many te xtures. So, we only 1451 // our texture cache and pay the cost of creating and destroying many te xtures. So, we only
1455 // request an exact match when the caller is reading an entire RT. 1452 // request an exact match when the caller is reading an entire RT.
1456 ScratchTexMatch match = kApprox_ScratchTexMatch; 1453 ScratchTexMatch match = kApprox_ScratchTexMatch;
1457 if (0 == left && 1454 if (0 == left &&
1458 0 == top && 1455 0 == top &&
1459 target->width() == width && 1456 target->width() == width &&
1460 target->height() == height && 1457 target->height() == height &&
1461 fGpu->fullReadPixelsIsFasterThanPartial()) { 1458 fGpu->fullReadPixelsIsFasterThanPartial()) {
1462 match = kExact_ScratchTexMatch; 1459 match = kExact_ScratchTexMatch;
1463 } 1460 }
1464 ast.set(this, desc, match); 1461 SkAutoTUnref<GrTexture> texture(this->refScratchTexture(desc, match));
1465 GrTexture* texture = ast.texture();
1466 if (texture) { 1462 if (texture) {
1467 // compute a matrix to perform the draw 1463 // compute a matrix to perform the draw
1468 SkMatrix textureMatrix; 1464 SkMatrix textureMatrix;
1469 textureMatrix.setTranslate(SK_Scalar1 *left, SK_Scalar1 *top); 1465 textureMatrix.setTranslate(SK_Scalar1 *left, SK_Scalar1 *top);
1470 textureMatrix.postIDiv(src->width(), src->height()); 1466 textureMatrix.postIDiv(src->width(), src->height());
1471 1467
1472 SkAutoTUnref<const GrFragmentProcessor> fp; 1468 SkAutoTUnref<const GrFragmentProcessor> fp;
1473 if (unpremul) { 1469 if (unpremul) {
1474 fp.reset(this->createPMToUPMEffect(src, swapRAndB, textureMatrix )); 1470 fp.reset(this->createPMToUPMEffect(src, swapRAndB, textureMatrix ));
1475 if (fp) { 1471 if (fp) {
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
1792 fResourceCache->printStats(); 1788 fResourceCache->printStats();
1793 } 1789 }
1794 #endif 1790 #endif
1795 1791
1796 #if GR_GPU_STATS 1792 #if GR_GPU_STATS
1797 const GrContext::GPUStats* GrContext::gpuStats() const { 1793 const GrContext::GPUStats* GrContext::gpuStats() const {
1798 return fGpu->gpuStats(); 1794 return fGpu->gpuStats();
1799 } 1795 }
1800 #endif 1796 #endif
1801 1797
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698