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

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

Issue 2299523004: Flush some non-substantive Ganesh changes (Closed)
Patch Set: Created 4 years, 3 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 | « include/private/GrSurfaceProxy.h ('k') | src/gpu/batches/GrDiscardBatch.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 2015 Google Inc. 2 * Copyright 2015 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 "GrBatchTest.h" 8 #include "GrBatchTest.h"
9 #include "GrColor.h" 9 #include "GrColor.h"
10 #include "GrDrawContext.h" 10 #include "GrDrawContext.h"
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 void GrDrawContext::drawPaint(const GrClip& clip, 238 void GrDrawContext::drawPaint(const GrClip& clip,
239 const GrPaint& origPaint, 239 const GrPaint& origPaint,
240 const SkMatrix& viewMatrix) { 240 const SkMatrix& viewMatrix) {
241 ASSERT_SINGLE_OWNER 241 ASSERT_SINGLE_OWNER
242 RETURN_IF_ABANDONED 242 RETURN_IF_ABANDONED
243 SkDEBUGCODE(this->validate();) 243 SkDEBUGCODE(this->validate();)
244 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawPaint"); 244 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawPaint");
245 245
246 // set rect to be big enough to fill the space, but not super-huge, so we 246 // set rect to be big enough to fill the space, but not super-huge, so we
247 // don't overflow fixed-point implementations 247 // don't overflow fixed-point implementations
248 SkRect r; 248
249 r.setLTRB(0, 0, 249 SkRect r = fRenderTarget->getBoundsRect();
250 SkIntToScalar(fRenderTarget->width()),
251 SkIntToScalar(fRenderTarget->height()));
252 SkTCopyOnFirstWrite<GrPaint> paint(origPaint); 250 SkTCopyOnFirstWrite<GrPaint> paint(origPaint);
253 251
254 SkRRect rrect; 252 SkRRect rrect;
255 bool aaRRect; 253 bool aaRRect;
256 // Check if we can replace a clipRRect()/drawPaint() with a drawRRect(). We only do the 254 // Check if we can replace a clipRRect()/drawPaint() with a drawRRect(). We only do the
257 // transformation for non-rect rrects. Rects caused a performance regression on an Android 255 // transformation for non-rect rrects. Rects caused a performance regression on an Android
258 // test that needs investigation. We also skip cases where there are fragmen t processors 256 // test that needs investigation. We also skip cases where there are fragmen t processors
259 // because they may depend on having correct local coords and this path draw s in device space 257 // because they may depend on having correct local coords and this path draw s in device space
260 // without a local matrix. 258 // without a local matrix.
261 if (!paint->numTotalFragmentProcessors() && 259 if (!paint->numTotalFragmentProcessors() &&
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 } else { 312 } else {
315 if (useHWAA) { 313 if (useHWAA) {
316 *useHWAA = rt->isUnifiedMultisampled(); 314 *useHWAA = rt->isUnifiedMultisampled();
317 } 315 }
318 return !rt->isUnifiedMultisampled(); 316 return !rt->isUnifiedMultisampled();
319 } 317 }
320 } 318 }
321 319
322 // Attempts to crop a rect and optional local rect to the clip boundaries. 320 // Attempts to crop a rect and optional local rect to the clip boundaries.
323 // Returns false if the draw can be skipped entirely. 321 // Returns false if the draw can be skipped entirely.
324 static bool crop_filled_rect(const GrRenderTarget* rt, const GrClip& clip, 322 static bool crop_filled_rect(int width, int height, const GrClip& clip,
325 const SkMatrix& viewMatrix, SkRect* rect, 323 const SkMatrix& viewMatrix, SkRect* rect,
326 SkRect* localRect = nullptr) { 324 SkRect* localRect = nullptr) {
327 if (!viewMatrix.rectStaysRect()) { 325 if (!viewMatrix.rectStaysRect()) {
328 return true; 326 return true;
329 } 327 }
330 328
331 SkIRect clipDevBounds; 329 SkIRect clipDevBounds;
332 SkRect clipBounds; 330 SkRect clipBounds;
333 331
334 clip.getConservativeBounds(rt->width(), rt->height(), &clipDevBounds); 332 clip.getConservativeBounds(width, height, &clipDevBounds);
335 if (!SkMatrixPriv::InverseMapRect(viewMatrix, &clipBounds, SkRect::Make(clip DevBounds))) { 333 if (!SkMatrixPriv::InverseMapRect(viewMatrix, &clipBounds, SkRect::Make(clip DevBounds))) {
336 return false; 334 return false;
337 } 335 }
338 336
339 if (localRect) { 337 if (localRect) {
340 if (!rect->intersects(clipBounds)) { 338 if (!rect->intersects(clipBounds)) {
341 return false; 339 return false;
342 } 340 }
343 const SkScalar dx = localRect->width() / rect->width(); 341 const SkScalar dx = localRect->width() / rect->width();
344 const SkScalar dy = localRect->height() / rect->height(); 342 const SkScalar dy = localRect->height() / rect->height();
(...skipping 18 matching lines...) Expand all
363 361
364 return rect->intersect(clipBounds); 362 return rect->intersect(clipBounds);
365 } 363 }
366 364
367 bool GrDrawContext::drawFilledRect(const GrClip& clip, 365 bool GrDrawContext::drawFilledRect(const GrClip& clip,
368 const GrPaint& paint, 366 const GrPaint& paint,
369 const SkMatrix& viewMatrix, 367 const SkMatrix& viewMatrix,
370 const SkRect& rect, 368 const SkRect& rect,
371 const GrUserStencilSettings* ss) { 369 const GrUserStencilSettings* ss) {
372 SkRect croppedRect = rect; 370 SkRect croppedRect = rect;
373 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect)) { 371 if (!crop_filled_rect(this->width(), this->height(), clip, viewMatrix, &crop pedRect)) {
374 return true; 372 return true;
375 } 373 }
376 374
377 SkAutoTUnref<GrDrawBatch> batch; 375 SkAutoTUnref<GrDrawBatch> batch;
378 bool useHWAA; 376 bool useHWAA;
379 377
380 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport()) { 378 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport()) {
381 InstancedRendering* ir = this->getDrawTarget()->instancedRendering(); 379 InstancedRendering* ir = this->getDrawTarget()->instancedRendering();
382 batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), 380 batch.reset(ir->recordRect(croppedRect, viewMatrix, paint.getColor(),
383 paint.isAntiAlias(), fInstancedPipelineInfo, 381 paint.isAntiAlias(), fInstancedPipelineInfo,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 SkASSERT(!style->pathEffect()); 433 SkASSERT(!style->pathEffect());
436 434
437 AutoCheckFlush acf(fDrawingManager); 435 AutoCheckFlush acf(fDrawingManager);
438 436
439 const SkStrokeRec& stroke = style->strokeRec(); 437 const SkStrokeRec& stroke = style->strokeRec();
440 if (stroke.getStyle() == SkStrokeRec::kFill_Style) { 438 if (stroke.getStyle() == SkStrokeRec::kFill_Style) {
441 439
442 if (!fContext->caps()->useDrawInsteadOfClear()) { 440 if (!fContext->caps()->useDrawInsteadOfClear()) {
443 // Check if this is a full RT draw and can be replaced with a clear. We don't bother 441 // Check if this is a full RT draw and can be replaced with a clear. We don't bother
444 // checking cases where the RT is fully inside a stroke. 442 // checking cases where the RT is fully inside a stroke.
445 SkRect rtRect; 443 SkRect rtRect = fRenderTarget->getBoundsRect();
446 fRenderTarget->getBoundsRect(&rtRect);
447 // Does the clip contain the entire RT? 444 // Does the clip contain the entire RT?
448 if (clip.quickContains(rtRect)) { 445 if (clip.quickContains(rtRect)) {
449 SkMatrix invM; 446 SkMatrix invM;
450 if (!viewMatrix.invert(&invM)) { 447 if (!viewMatrix.invert(&invM)) {
451 return; 448 return;
452 } 449 }
453 // Does the rect bound the RT? 450 // Does the rect bound the RT?
454 SkPoint srcSpaceRTQuad[4]; 451 SkPoint srcSpaceRTQuad[4];
455 invM.mapRectToQuad(srcSpaceRTQuad, rtRect); 452 invM.mapRectToQuad(srcSpaceRTQuad, rtRect);
456 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) && 453 if (rect_contains_inclusive(rect, srcSpaceRTQuad[0]) &&
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 const SkMatrix& viewMatrix, 610 const SkMatrix& viewMatrix,
614 const SkRect& rectToDraw, 611 const SkRect& rectToDraw,
615 const SkRect& localRect) { 612 const SkRect& localRect) {
616 ASSERT_SINGLE_OWNER 613 ASSERT_SINGLE_OWNER
617 RETURN_IF_ABANDONED 614 RETURN_IF_ABANDONED
618 SkDEBUGCODE(this->validate();) 615 SkDEBUGCODE(this->validate();)
619 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect"); 616 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectToRect");
620 617
621 SkRect croppedRect = rectToDraw; 618 SkRect croppedRect = rectToDraw;
622 SkRect croppedLocalRect = localRect; 619 SkRect croppedLocalRect = localRect;
623 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect, & croppedLocalRect)) { 620 if (!crop_filled_rect(this->width(), this->height(), clip, viewMatrix,
621 &croppedRect, &croppedLocalRect)) {
624 return; 622 return;
625 } 623 }
626 624
627 AutoCheckFlush acf(fDrawingManager); 625 AutoCheckFlush acf(fDrawingManager);
628 bool useHWAA; 626 bool useHWAA;
629 627
630 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport()) { 628 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport()) {
631 InstancedRendering* ir = this->getDrawTarget()->instancedRendering(); 629 InstancedRendering* ir = this->getDrawTarget()->instancedRendering();
632 SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), 630 SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix, paint.getColor(),
633 croppedLocalRect, paint.i sAntiAlias(), 631 croppedLocalRect, paint.i sAntiAlias(),
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
672 const GrPaint& paint, 670 const GrPaint& paint,
673 const SkMatrix& viewMatrix, 671 const SkMatrix& viewMatrix,
674 const SkRect& rectToDraw, 672 const SkRect& rectToDraw,
675 const SkMatrix& localMatrix) { 673 const SkMatrix& localMatrix) {
676 ASSERT_SINGLE_OWNER 674 ASSERT_SINGLE_OWNER
677 RETURN_IF_ABANDONED 675 RETURN_IF_ABANDONED
678 SkDEBUGCODE(this->validate();) 676 SkDEBUGCODE(this->validate();)
679 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr ix"); 677 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::fillRectWithLocalMatr ix");
680 678
681 SkRect croppedRect = rectToDraw; 679 SkRect croppedRect = rectToDraw;
682 if (!crop_filled_rect(fRenderTarget.get(), clip, viewMatrix, &croppedRect)) { 680 if (!crop_filled_rect(this->width(), this->height(), clip, viewMatrix, &crop pedRect)) {
683 return; 681 return;
684 } 682 }
685 683
686 AutoCheckFlush acf(fDrawingManager); 684 AutoCheckFlush acf(fDrawingManager);
687 bool useHWAA; 685 bool useHWAA;
688 686
689 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport()) { 687 if (GrCaps::InstancedSupport::kNone != fContext->caps()->instancedSupport()) {
690 InstancedRendering* ir = this->getDrawTarget()->instancedRendering(); 688 InstancedRendering* ir = this->getDrawTarget()->instancedRendering();
691 SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix, paint.getColor(), 689 SkAutoTUnref<GrDrawBatch> batch(ir->recordRect(croppedRect, viewMatrix, paint.getColor(),
692 localMatrix, paint.isAnti Alias(), 690 localMatrix, paint.isAnti Alias(),
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 fDrawContext->height())); 1248 fDrawContext->height()));
1251 return true; 1249 return true;
1252 } 1250 }
1253 1251
1254 AutoCheckFlush acf(fDrawContext->fDrawingManager); 1252 AutoCheckFlush acf(fDrawContext->fDrawingManager);
1255 1253
1256 // An Assumption here is that path renderer would use some form of tweaking 1254 // An Assumption here is that path renderer would use some form of tweaking
1257 // the src color (either the input alpha or in the frag shader) to implement 1255 // the src color (either the input alpha or in the frag shader) to implement
1258 // aa. If we have some future driver-mojo path AA that can do the right 1256 // aa. If we have some future driver-mojo path AA that can do the right
1259 // thing WRT to the blend then we'll need some query on the PR. 1257 // thing WRT to the blend then we'll need some query on the PR.
1260 bool useCoverageAA = doAA && !fDrawContext->fRenderTarget->isUnifiedMultisam pled(); 1258 bool useCoverageAA = doAA && !fDrawContext->isUnifiedMultisampled();
1261 bool hasUserStencilSettings = !ss->isUnused(); 1259 bool hasUserStencilSettings = !ss->isUnused();
1262 bool isStencilBufferMSAA = fDrawContext->fRenderTarget->isStencilBufferMulti sampled(); 1260 bool isStencilBufferMSAA = fDrawContext->isStencilBufferMultisampled();
1263 1261
1264 const GrPathRendererChain::DrawType type = 1262 const GrPathRendererChain::DrawType type =
1265 useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType 1263 useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType
1266 : GrPathRendererChain::kColor_DrawType; 1264 : GrPathRendererChain::kColor_DrawType;
1267 1265
1268 GrShape shape(path, GrStyle::SimpleFill()); 1266 GrShape shape(path, GrStyle::SimpleFill());
1269 GrPathRenderer::CanDrawPathArgs canDrawArgs; 1267 GrPathRenderer::CanDrawPathArgs canDrawArgs;
1270 canDrawArgs.fShaderCaps = fDrawContext->fDrawingManager->getContext()->caps( )->shaderCaps(); 1268 canDrawArgs.fShaderCaps = fDrawContext->fDrawingManager->getContext()->caps( )->shaderCaps();
1271 canDrawArgs.fViewMatrix = &viewMatrix; 1269 canDrawArgs.fViewMatrix = &viewMatrix;
1272 canDrawArgs.fShape = &shape; 1270 canDrawArgs.fShape = &shape;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1313 const GrPaint& paint, 1311 const GrPaint& paint,
1314 const SkMatrix& viewMatrix, 1312 const SkMatrix& viewMatrix,
1315 const SkPath& path, 1313 const SkPath& path,
1316 const GrStyle& style) { 1314 const GrStyle& style) {
1317 ASSERT_SINGLE_OWNER 1315 ASSERT_SINGLE_OWNER
1318 RETURN_IF_ABANDONED 1316 RETURN_IF_ABANDONED
1319 SkASSERT(!path.isEmpty()); 1317 SkASSERT(!path.isEmpty());
1320 1318
1321 bool useCoverageAA = should_apply_coverage_aa(paint, fRenderTarget.get()); 1319 bool useCoverageAA = should_apply_coverage_aa(paint, fRenderTarget.get());
1322 constexpr bool kHasUserStencilSettings = false; 1320 constexpr bool kHasUserStencilSettings = false;
1323 bool isStencilBufferMSAA = fRenderTarget->isStencilBufferMultisampled(); 1321 bool isStencilBufferMSAA = this->isStencilBufferMultisampled();
1324 1322
1325 const GrPathRendererChain::DrawType type = 1323 const GrPathRendererChain::DrawType type =
1326 useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType 1324 useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType
1327 : GrPathRendererChain::kColor_DrawType; 1325 : GrPathRendererChain::kColor_DrawType;
1328 1326
1329 GrShape shape(path, style); 1327 GrShape shape(path, style);
1330 if (shape.isEmpty()) { 1328 if (shape.isEmpty()) {
1331 return; 1329 return;
1332 } 1330 }
1333 GrPathRenderer::CanDrawPathArgs canDrawArgs; 1331 GrPathRenderer::CanDrawPathArgs canDrawArgs;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
1383 1381
1384 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip, 1382 void GrDrawContext::drawBatch(const GrPipelineBuilder& pipelineBuilder, const Gr Clip& clip,
1385 GrDrawBatch* batch) { 1383 GrDrawBatch* batch) {
1386 ASSERT_SINGLE_OWNER 1384 ASSERT_SINGLE_OWNER
1387 RETURN_IF_ABANDONED 1385 RETURN_IF_ABANDONED
1388 SkDEBUGCODE(this->validate();) 1386 SkDEBUGCODE(this->validate();)
1389 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch"); 1387 GR_AUDIT_TRAIL_AUTO_FRAME(fAuditTrail, "GrDrawContext::drawBatch");
1390 1388
1391 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch); 1389 this->getDrawTarget()->drawBatch(pipelineBuilder, this, clip, batch);
1392 } 1390 }
OLDNEW
« no previous file with comments | « include/private/GrSurfaceProxy.h ('k') | src/gpu/batches/GrDiscardBatch.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698