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

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

Powered by Google App Engine
This is Rietveld 408576698