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

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

Issue 1424313010: Separate out natively-texture image/bmp draws from cached-as-texture image/bmp draws (Closed) Base URL: https://skia.googlesource.com/skia.git@const
Patch Set: update Created 5 years, 1 month 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/GrBlurUtils.cpp ('k') | src/gpu/GrImageIDTextureAdjuster.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 /* 2 /*
3 * Copyright 2015 Google Inc. 3 * Copyright 2015 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 "GrAtlasTextContext.h" 9 #include "GrAtlasTextContext.h"
10 #include "GrBatchTest.h" 10 #include "GrBatchTest.h"
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 r, 218 r,
219 localMatrix); 219 localMatrix);
220 } 220 }
221 } 221 }
222 222
223 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po int) { 223 static inline bool rect_contains_inclusive(const SkRect& rect, const SkPoint& po int) {
224 return point.fX >= rect.fLeft && point.fX <= rect.fRight && 224 return point.fX >= rect.fLeft && point.fX <= rect.fRight &&
225 point.fY >= rect.fTop && point.fY <= rect.fBottom; 225 point.fY >= rect.fTop && point.fY <= rect.fBottom;
226 } 226 }
227 227
228 static bool view_matrix_ok_for_aa_fill_rect(const SkMatrix& viewMatrix) {
229 return viewMatrix.preservesRightAngles();
230 }
231
232 static bool should_apply_coverage_aa(const GrPaint& paint, GrRenderTarget* rt) {
233 return paint.isAntiAlias() && !rt->isUnifiedMultisampled();
234 }
235
228 void GrDrawContext::drawRect(const GrClip& clip, 236 void GrDrawContext::drawRect(const GrClip& clip,
229 const GrPaint& paint, 237 const GrPaint& paint,
230 const SkMatrix& viewMatrix, 238 const SkMatrix& viewMatrix,
231 const SkRect& rect, 239 const SkRect& rect,
232 const GrStrokeInfo* strokeInfo) { 240 const GrStrokeInfo* strokeInfo) {
233 RETURN_IF_ABANDONED 241 RETURN_IF_ABANDONED
234 SkDEBUGCODE(this->validate();) 242 SkDEBUGCODE(this->validate();)
235 243
236 if (strokeInfo && strokeInfo->isDashed()) { 244 if (strokeInfo && strokeInfo->isDashed()) {
237 SkPath path; 245 SkPath path;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 GrColor clearColor; 283 GrColor clearColor;
276 if (paint.isConstantBlendedColor(&clearColor)) { 284 if (paint.isConstantBlendedColor(&clearColor)) {
277 this->getDrawTarget()->clear(nullptr, clearColor, true, fRen derTarget); 285 this->getDrawTarget()->clear(nullptr, clearColor, true, fRen derTarget);
278 return; 286 return;
279 } 287 }
280 } 288 }
281 } 289 }
282 } 290 }
283 291
284 GrColor color = paint.getColor(); 292 GrColor color = paint.getColor();
285 bool needAA = paint.isAntiAlias() && 293 bool needAA = should_apply_coverage_aa(paint, pipelineBuilder.getRenderTarge t());
286 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled();
287 294
288 // The fill path can handle rotation but not skew 295 // The fill path can handle rotation but not skew
289 // The stroke path needs the rect to remain axis aligned (no rotation or ske w) 296 // The stroke path needs the rect to remain axis aligned (no rotation or ske w)
290 // None of our AA draw rect calls can handle perspective yet 297 // None of our AA draw rect calls can handle perspective yet
291 bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() : viewMatrix.preser vesRightAngles(); 298 bool canApplyAA = width >=0 ? viewMatrix.rectStaysRect() :
299 view_matrix_ok_for_aa_fill_rect(viewMatrix);
292 300
293 if (needAA && canApplyAA) { 301 if (needAA && canApplyAA) {
294 SkASSERT(!viewMatrix.hasPerspective()); 302 SkASSERT(!viewMatrix.hasPerspective());
295 SkAutoTUnref<GrDrawBatch> batch; 303 SkAutoTUnref<GrDrawBatch> batch;
296 if (width >= 0) { 304 if (width >= 0) {
297 batch.reset(GrRectBatchFactory::CreateAAStroke(color, viewMatrix, re ct, *strokeInfo)); 305 batch.reset(GrRectBatchFactory::CreateAAStroke(color, viewMatrix, re ct, *strokeInfo));
298 } else { 306 } else {
299 SkRect devBoundRect; 307 SkRect devBoundRect;
300 viewMatrix.mapRect(&devBoundRect, rect); 308 viewMatrix.mapRect(&devBoundRect, rect);
301 batch.reset(GrRectBatchFactory::CreateAAFill(color, viewMatrix, rect , devBoundRect)); 309 batch.reset(GrRectBatchFactory::CreateAAFill(color, viewMatrix, rect , devBoundRect));
(...skipping 24 matching lines...) Expand all
326 const GrPaint& paint, 334 const GrPaint& paint,
327 const SkMatrix& viewMatrix, 335 const SkMatrix& viewMatrix,
328 const SkRect& rectToDraw, 336 const SkRect& rectToDraw,
329 const SkRect& localRect) { 337 const SkRect& localRect) {
330 RETURN_IF_ABANDONED 338 RETURN_IF_ABANDONED
331 SkDEBUGCODE(this->validate();) 339 SkDEBUGCODE(this->validate();)
332 340
333 AutoCheckFlush acf(fDrawingManager); 341 AutoCheckFlush acf(fDrawingManager);
334 342
335 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip); 343 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
336 this->getDrawTarget()->drawNonAARect(pipelineBuilder, 344 if (should_apply_coverage_aa(paint, fRenderTarget) &&
337 paint.getColor(), 345 view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
338 viewMatrix, 346 SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::CreateWithLocalRect(
339 rectToDraw, 347 paint.getColor(), viewMatrix, rectToDraw, localRect));
340 localRect); 348 if (batch) {
349 this->drawBatch(&pipelineBuilder, batch);
350 }
351 } else {
352 this->getDrawTarget()->drawNonAARect(pipelineBuilder,
353 paint.getColor(),
354 viewMatrix,
355 rectToDraw,
356 localRect);
357 }
341 } 358 }
342 359
343 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip, 360 void GrDrawContext::fillRectWithLocalMatrix(const GrClip& clip,
344 const GrPaint& paint, 361 const GrPaint& paint,
345 const SkMatrix& viewMatrix, 362 const SkMatrix& viewMatrix,
346 const SkRect& rectToDraw, 363 const SkRect& rectToDraw,
347 const SkMatrix& localMatrix) { 364 const SkMatrix& localMatrix) {
348 RETURN_IF_ABANDONED 365 RETURN_IF_ABANDONED
349 SkDEBUGCODE(this->validate();) 366 SkDEBUGCODE(this->validate();)
350 367
351 AutoCheckFlush acf(fDrawingManager); 368 AutoCheckFlush acf(fDrawingManager);
352 369
353 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip); 370 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
354 this->getDrawTarget()->drawNonAARect(pipelineBuilder, 371 if (should_apply_coverage_aa(paint, pipelineBuilder.getRenderTarget()) &&
355 paint.getColor(), 372 view_matrix_ok_for_aa_fill_rect(viewMatrix)) {
356 viewMatrix, 373 SkAutoTUnref<GrDrawBatch> batch(GrAAFillRectBatch::Create(
357 rectToDraw, 374 paint.getColor(), viewMatrix, localMatrix, rectToDraw));
358 localMatrix); 375 this->drawBatch(&pipelineBuilder, batch);
376 } else {
377 this->getDrawTarget()->drawNonAARect(pipelineBuilder,
378 paint.getColor(),
379 viewMatrix,
380 rectToDraw,
381 localMatrix);
382 }
359 } 383 }
360 384
361 void GrDrawContext::drawVertices(const GrClip& clip, 385 void GrDrawContext::drawVertices(const GrClip& clip,
362 const GrPaint& paint, 386 const GrPaint& paint,
363 const SkMatrix& viewMatrix, 387 const SkMatrix& viewMatrix,
364 GrPrimitiveType primitiveType, 388 GrPrimitiveType primitiveType,
365 int vertexCount, 389 int vertexCount,
366 const SkPoint positions[], 390 const SkPoint positions[],
367 const SkPoint texCoords[], 391 const SkPoint texCoords[],
368 const GrColor colors[], 392 const GrColor colors[],
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 649
626 // Note that internalDrawPath may sw-rasterize the path into a scratch textu re. 650 // Note that internalDrawPath may sw-rasterize the path into a scratch textu re.
627 // Scratch textures can be recycled after they are returned to the texture 651 // Scratch textures can be recycled after they are returned to the texture
628 // cache. This presents a potential hazard for buffered drawing. However, 652 // cache. This presents a potential hazard for buffered drawing. However,
629 // the writePixels that uploads to the scratch will perform a flush so we're 653 // the writePixels that uploads to the scratch will perform a flush so we're
630 // OK. 654 // OK.
631 AutoCheckFlush acf(fDrawingManager); 655 AutoCheckFlush acf(fDrawingManager);
632 656
633 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip); 657 GrPipelineBuilder pipelineBuilder(paint, fRenderTarget, clip);
634 if (!strokeInfo.isDashed()) { 658 if (!strokeInfo.isDashed()) {
635 bool useCoverageAA = paint.isAntiAlias() && 659 bool useCoverageAA = should_apply_coverage_aa(paint, pipelineBuilder.get RenderTarget());
636 !pipelineBuilder.getRenderTarget()->isUnifiedMultisampled();
637 660
638 if (useCoverageAA && strokeInfo.getWidth() < 0 && !path.isConvex()) { 661 if (useCoverageAA && strokeInfo.getWidth() < 0 && !path.isConvex()) {
639 // Concave AA paths are expensive - try to avoid them for special ca ses 662 // Concave AA paths are expensive - try to avoid them for special ca ses
640 SkRect rects[2]; 663 SkRect rects[2];
641 664
642 if (is_nested_rects(viewMatrix, path, strokeInfo, rects)) { 665 if (is_nested_rects(viewMatrix, path, strokeInfo, rects)) {
643 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill NestedRects( 666 SkAutoTUnref<GrDrawBatch> batch(GrRectBatchFactory::CreateAAFill NestedRects(
644 color, viewMatrix, rects)); 667 color, viewMatrix, rects));
645 this->getDrawTarget()->drawBatch(pipelineBuilder, batch); 668 this->getDrawTarget()->drawBatch(pipelineBuilder, batch);
646 return; 669 return;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 args.fAntiAlias = useCoverageAA; 788 args.fAntiAlias = useCoverageAA;
766 pr->drawPath(args); 789 pr->drawPath(args);
767 } 790 }
768 791
769 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* b atch) { 792 void GrDrawContext::drawBatch(GrPipelineBuilder* pipelineBuilder, GrDrawBatch* b atch) {
770 RETURN_IF_ABANDONED 793 RETURN_IF_ABANDONED
771 SkDEBUGCODE(this->validate();) 794 SkDEBUGCODE(this->validate();)
772 795
773 this->getDrawTarget()->drawBatch(*pipelineBuilder, batch); 796 this->getDrawTarget()->drawBatch(*pipelineBuilder, batch);
774 } 797 }
OLDNEW
« no previous file with comments | « src/gpu/GrBlurUtils.cpp ('k') | src/gpu/GrImageIDTextureAdjuster.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698