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

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

Issue 1107973004: Pull cache out of GrContext (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fixpicturerenderer.cpp Created 5 years, 7 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/GrTextureProvider.cpp ('k') | src/gpu/SkGr.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 * Copyright 2011 Google Inc. 2 * Copyright 2011 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkGpuDevice.h" 8 #include "SkGpuDevice.h"
9 9
10 #include "GrContext.h" 10 #include "GrContext.h"
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 at = kPremul_SkAlphaType; // force this setting 192 at = kPremul_SkAlphaType; // force this setting
193 } 193 }
194 const SkImageInfo info = SkImageInfo::Make(origInfo.width(), origInfo.height (), ct, at); 194 const SkImageInfo info = SkImageInfo::Make(origInfo.width(), origInfo.height (), ct, at);
195 195
196 GrSurfaceDesc desc; 196 GrSurfaceDesc desc;
197 desc.fFlags = kRenderTarget_GrSurfaceFlag; 197 desc.fFlags = kRenderTarget_GrSurfaceFlag;
198 desc.fWidth = info.width(); 198 desc.fWidth = info.width();
199 desc.fHeight = info.height(); 199 desc.fHeight = info.height();
200 desc.fConfig = SkImageInfo2GrPixelConfig(info); 200 desc.fConfig = SkImageInfo2GrPixelConfig(info);
201 desc.fSampleCnt = sampleCount; 201 desc.fSampleCnt = sampleCount;
202 GrTexture* texture = context->createTexture(desc, SkToBool(budgeted), NULL, 0); 202 GrTexture* texture = context->textureProvider()->createTexture(
203 desc, SkToBool(budgeted), NULL, 0);
203 if (NULL == texture) { 204 if (NULL == texture) {
204 return NULL; 205 return NULL;
205 } 206 }
206 SkASSERT(NULL != texture->asRenderTarget()); 207 SkASSERT(NULL != texture->asRenderTarget());
207 return texture->asRenderTarget(); 208 return texture->asRenderTarget();
208 } 209 }
209 210
210 SkGpuDevice* SkGpuDevice::Create(GrContext* context, SkSurface::Budgeted budgete d, 211 SkGpuDevice* SkGpuDevice::Create(GrContext* context, SkSurface::Budgeted budgete d,
211 const SkImageInfo& info, int sampleCount, 212 const SkImageInfo& info, int sampleCount,
212 const SkSurfaceProps* props, unsigned flags) { 213 const SkSurfaceProps* props, unsigned flags) {
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 return false; 693 return false;
693 } 694 }
694 695
695 // we now have a device-aligned 8bit mask in dstM, ready to be drawn using 696 // we now have a device-aligned 8bit mask in dstM, ready to be drawn using
696 // the current clip (and identity matrix) and GrPaint settings 697 // the current clip (and identity matrix) and GrPaint settings
697 GrSurfaceDesc desc; 698 GrSurfaceDesc desc;
698 desc.fWidth = dstM.fBounds.width(); 699 desc.fWidth = dstM.fBounds.width();
699 desc.fHeight = dstM.fBounds.height(); 700 desc.fHeight = dstM.fBounds.height();
700 desc.fConfig = kAlpha_8_GrPixelConfig; 701 desc.fConfig = kAlpha_8_GrPixelConfig;
701 702
702 SkAutoTUnref<GrTexture> texture( 703 SkAutoTUnref<GrTexture> texture(context->textureProvider()->refScratchTextur e(
703 context->refScratchTexture(desc, GrContext::kApprox_ScratchTexMatch)); 704 desc, GrTextureProvider::kApprox_ScratchTexMatch));
704 if (!texture) { 705 if (!texture) {
705 return false; 706 return false;
706 } 707 }
707 texture->writePixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfig, 708 texture->writePixels(0, 0, desc.fWidth, desc.fHeight, desc.fConfig,
708 dstM.fImage, dstM.fRowBytes); 709 dstM.fImage, dstM.fRowBytes);
709 710
710 SkRect maskRect = SkRect::Make(dstM.fBounds); 711 SkRect maskRect = SkRect::Make(dstM.fBounds);
711 712
712 return draw_mask(context, rt, clipData, viewMatrix, maskRect, grp, texture); 713 return draw_mask(context, rt, clipData, viewMatrix, maskRect, grp, texture);
713 } 714 }
(...skipping 13 matching lines...) Expand all
727 desc.fSampleCnt = doAA ? sampleCnt : 0; 728 desc.fSampleCnt = doAA ? sampleCnt : 0;
728 // We actually only need A8, but it often isn't supported as a 729 // We actually only need A8, but it often isn't supported as a
729 // render target so default to RGBA_8888 730 // render target so default to RGBA_8888
730 desc.fConfig = kRGBA_8888_GrPixelConfig; 731 desc.fConfig = kRGBA_8888_GrPixelConfig;
731 732
732 if (context->isConfigRenderable(kAlpha_8_GrPixelConfig, 733 if (context->isConfigRenderable(kAlpha_8_GrPixelConfig,
733 desc.fSampleCnt > 0)) { 734 desc.fSampleCnt > 0)) {
734 desc.fConfig = kAlpha_8_GrPixelConfig; 735 desc.fConfig = kAlpha_8_GrPixelConfig;
735 } 736 }
736 737
737 GrTexture* mask = context->refScratchTexture(desc,GrContext::kApprox_Scratch TexMatch); 738 GrTexture* mask = context->textureProvider()->refScratchTexture(
739 desc, GrTextureProvider::kApprox_ScratchTexMatch);
738 if (NULL == mask) { 740 if (NULL == mask) {
739 return NULL; 741 return NULL;
740 } 742 }
741 743
742 SkRect clipRect = SkRect::MakeWH(maskRect.width(), maskRect.height()); 744 SkRect clipRect = SkRect::MakeWH(maskRect.width(), maskRect.height());
743 745
744 context->clear(NULL, 0x0, true, mask->asRenderTarget()); 746 context->clear(NULL, 0x0, true, mask->asRenderTarget());
745 747
746 GrPaint tempPaint; 748 GrPaint tempPaint;
747 tempPaint.setAntiAlias(doAA); 749 tempPaint.setAntiAlias(doAA);
(...skipping 1193 matching lines...) Expand 10 before | Expand all | Expand 10 after
1941 desc.fWidth = cinfo.fInfo.width(); 1943 desc.fWidth = cinfo.fInfo.width();
1942 desc.fHeight = cinfo.fInfo.height(); 1944 desc.fHeight = cinfo.fInfo.height();
1943 desc.fSampleCnt = fRenderTarget->numSamples(); 1945 desc.fSampleCnt = fRenderTarget->numSamples();
1944 1946
1945 SkAutoTUnref<GrTexture> texture; 1947 SkAutoTUnref<GrTexture> texture;
1946 // Skia's convention is to only clear a device if it is non-opaque. 1948 // Skia's convention is to only clear a device if it is non-opaque.
1947 unsigned flags = cinfo.fInfo.isOpaque() ? 0 : kNeedClear_Flag; 1949 unsigned flags = cinfo.fInfo.isOpaque() ? 0 : kNeedClear_Flag;
1948 1950
1949 // layers are never draw in repeat modes, so we can request an approx 1951 // layers are never draw in repeat modes, so we can request an approx
1950 // match and ignore any padding. 1952 // match and ignore any padding.
1951 const GrContext::ScratchTexMatch match = (kNever_TileUsage == cinfo.fTileUsa ge) ? 1953 const GrTextureProvider::ScratchTexMatch match = (kNever_TileUsage == cinfo. fTileUsage) ?
1952 GrContext::kApprox_ScratchTexMat ch : 1954 GrTextureProvider::kApprox_Scr atchTexMatch :
1953 GrContext::kExact_ScratchTexMatc h; 1955 GrTextureProvider::kExact_Scra tchTexMatch;
1954 texture.reset(fContext->refScratchTexture(desc, match)); 1956 texture.reset(fContext->textureProvider()->refScratchTexture(desc, match));
1955 1957
1956 if (texture) { 1958 if (texture) {
1957 SkSurfaceProps props(fSurfaceProps.flags(), cinfo.fPixelGeometry); 1959 SkSurfaceProps props(fSurfaceProps.flags(), cinfo.fPixelGeometry);
1958 return SkGpuDevice::Create( 1960 return SkGpuDevice::Create(
1959 texture->asRenderTarget(), cinfo.fInfo.width(), cinfo.fInfo.height() , &props, flags); 1961 texture->asRenderTarget(), cinfo.fInfo.width(), cinfo.fInfo.height() , &props, flags);
1960 } else { 1962 } else {
1961 SkErrorInternals::SetError( kInternalError_SkError, 1963 SkErrorInternals::SetError( kInternalError_SkError,
1962 "---- failed to create gpu device texture [% d %d]\n", 1964 "---- failed to create gpu device texture [% d %d]\n",
1963 cinfo.fInfo.width(), cinfo.fInfo.height()); 1965 cinfo.fInfo.width(), cinfo.fInfo.height());
1964 return NULL; 1966 return NULL;
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
2038 #endif 2040 #endif
2039 } 2041 }
2040 2042
2041 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 2043 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
2042 // We always return a transient cache, so it is freed after each 2044 // We always return a transient cache, so it is freed after each
2043 // filter traversal. 2045 // filter traversal.
2044 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); 2046 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
2045 } 2047 }
2046 2048
2047 #endif 2049 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrTextureProvider.cpp ('k') | src/gpu/SkGr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698