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

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

Issue 1230813003: More threading of GrProcessorDataManager (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: tweaks Created 5 years, 5 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/GrSWMaskHelper.cpp ('k') | src/gpu/effects/Gr1DKernelEffect.h » ('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 "GrBlurUtils.h" 10 #include "GrBlurUtils.h"
(...skipping 1188 matching lines...) Expand 10 before | Expand all | Expand 10 after
1199 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() }; 1199 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() };
1200 SkRect paintRect; 1200 SkRect paintRect;
1201 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width())); 1201 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width()));
1202 SkScalar hInv = SkScalarInvert(SkIntToScalar(texture->height())); 1202 SkScalar hInv = SkScalarInvert(SkIntToScalar(texture->height()));
1203 paintRect.setLTRB(SkScalarMul(srcRect.fLeft, wInv), 1203 paintRect.setLTRB(SkScalarMul(srcRect.fLeft, wInv),
1204 SkScalarMul(srcRect.fTop, hInv), 1204 SkScalarMul(srcRect.fTop, hInv),
1205 SkScalarMul(srcRect.fRight, wInv), 1205 SkScalarMul(srcRect.fRight, wInv),
1206 SkScalarMul(srcRect.fBottom, hInv)); 1206 SkScalarMul(srcRect.fBottom, hInv));
1207 1207
1208 SkRect textureDomain = SkRect::MakeEmpty(); 1208 SkRect textureDomain = SkRect::MakeEmpty();
1209
1210 // Construct a GrPaint by setting the bitmap texture as the first effect and then configuring
1211 // the rest from the SkPaint.
1212 GrPaint grPaint;
1209 SkAutoTUnref<GrFragmentProcessor> fp; 1213 SkAutoTUnref<GrFragmentProcessor> fp;
1214
1210 if (needsTextureDomain && !(flags & SkCanvas::kBleed_DrawBitmapRectFlag)) { 1215 if (needsTextureDomain && !(flags & SkCanvas::kBleed_DrawBitmapRectFlag)) {
1211 // Use a constrained texture domain to avoid color bleeding 1216 // Use a constrained texture domain to avoid color bleeding
1212 SkScalar left, top, right, bottom; 1217 SkScalar left, top, right, bottom;
1213 if (srcRect.width() > SK_Scalar1) { 1218 if (srcRect.width() > SK_Scalar1) {
1214 SkScalar border = SK_ScalarHalf / texture->width(); 1219 SkScalar border = SK_ScalarHalf / texture->width();
1215 left = paintRect.left() + border; 1220 left = paintRect.left() + border;
1216 right = paintRect.right() - border; 1221 right = paintRect.right() - border;
1217 } else { 1222 } else {
1218 left = right = SkScalarHalf(paintRect.left() + paintRect.right()); 1223 left = right = SkScalarHalf(paintRect.left() + paintRect.right());
1219 } 1224 }
1220 if (srcRect.height() > SK_Scalar1) { 1225 if (srcRect.height() > SK_Scalar1) {
1221 SkScalar border = SK_ScalarHalf / texture->height(); 1226 SkScalar border = SK_ScalarHalf / texture->height();
1222 top = paintRect.top() + border; 1227 top = paintRect.top() + border;
1223 bottom = paintRect.bottom() - border; 1228 bottom = paintRect.bottom() - border;
1224 } else { 1229 } else {
1225 top = bottom = SkScalarHalf(paintRect.top() + paintRect.bottom()); 1230 top = bottom = SkScalarHalf(paintRect.top() + paintRect.bottom());
1226 } 1231 }
1227 textureDomain.setLTRB(left, top, right, bottom); 1232 textureDomain.setLTRB(left, top, right, bottom);
1228 if (bicubic) { 1233 if (bicubic) {
1229 fp.reset(GrBicubicEffect::Create(texture, SkMatrix::I(), textureDoma in)); 1234 fp.reset(GrBicubicEffect::Create(grPaint.getProcessorDataManager(), texture,
1235 SkMatrix::I(), textureDomain));
1230 } else { 1236 } else {
1231 fp.reset(GrTextureDomainEffect::Create(texture, 1237 fp.reset(GrTextureDomainEffect::Create(grPaint.getProcessorDataManag er(),
1238 texture,
1232 SkMatrix::I(), 1239 SkMatrix::I(),
1233 textureDomain, 1240 textureDomain,
1234 GrTextureDomain::kClamp_Mode, 1241 GrTextureDomain::kClamp_Mode,
1235 params.filterMode())); 1242 params.filterMode()));
1236 } 1243 }
1237 } else if (bicubic) { 1244 } else if (bicubic) {
1238 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode()); 1245 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode());
1239 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil eModeY() }; 1246 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil eModeY() };
1240 fp.reset(GrBicubicEffect::Create(texture, SkMatrix::I(), tileModes)); 1247 fp.reset(GrBicubicEffect::Create(grPaint.getProcessorDataManager(), text ure, SkMatrix::I(),
1248 tileModes));
1241 } else { 1249 } else {
1242 fp.reset(GrSimpleTextureEffect::Create(texture, SkMatrix::I(), params)); 1250 fp.reset(GrSimpleTextureEffect::Create(grPaint.getProcessorDataManager() , texture,
1251 SkMatrix::I(), params));
1243 } 1252 }
1244 1253
1245 // Construct a GrPaint by setting the bitmap texture as the first effect and then configuring
1246 // the rest from the SkPaint.
1247 GrPaint grPaint;
1248 grPaint.addColorProcessor(fp); 1254 grPaint.addColorProcessor(fp);
1249 bool alphaOnly = !(kAlpha_8_SkColorType == bitmap.colorType()); 1255 bool alphaOnly = !(kAlpha_8_SkColorType == bitmap.colorType());
1250 GrColor paintColor = (alphaOnly) ? SkColor2GrColorJustAlpha(paint.getColor() ) : 1256 GrColor paintColor = (alphaOnly) ? SkColor2GrColorJustAlpha(paint.getColor() ) :
1251 SkColor2GrColor(paint.getColor()); 1257 SkColor2GrColor(paint.getColor());
1252 if (!SkPaint2GrPaintNoShader(this->context(), fRenderTarget, paint, paintCol or, false, 1258 if (!SkPaint2GrPaintNoShader(this->context(), fRenderTarget, paint, paintCol or, false,
1253 &grPaint)) { 1259 &grPaint)) {
1254 return; 1260 return;
1255 } 1261 }
1256 1262
1257 fDrawContext->drawNonAARectToRect(fRenderTarget, fClip, grPaint, viewMatrix, dstRect, 1263 fDrawContext->drawNonAARectToRect(fRenderTarget, fClip, grPaint, viewMatrix, dstRect,
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
1847 #endif 1853 #endif
1848 } 1854 }
1849 1855
1850 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { 1856 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() {
1851 // We always return a transient cache, so it is freed after each 1857 // We always return a transient cache, so it is freed after each
1852 // filter traversal. 1858 // filter traversal.
1853 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); 1859 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize);
1854 } 1860 }
1855 1861
1856 #endif 1862 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrSWMaskHelper.cpp ('k') | src/gpu/effects/Gr1DKernelEffect.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698