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

Unified Diff: src/gpu/GrDrawTarget.cpp

Issue 1541903002: added support for PLS path rendering (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: src/gpu/GrDrawTarget.cpp
diff --git a/src/gpu/GrDrawTarget.cpp b/src/gpu/GrDrawTarget.cpp
index 3918ce2a2179a5a45da62427f1637e703f7a35ea..8a03fdafd6635522bbce6d5aa12a9ddfb15037f7 100644
--- a/src/gpu/GrDrawTarget.cpp
+++ b/src/gpu/GrDrawTarget.cpp
@@ -19,7 +19,7 @@
#include "GrSurfacePriv.h"
#include "GrTexture.h"
#include "GrVertexBuffer.h"
-
+#include "gl/GrGLRenderTarget.h"
#include "batches/GrClearBatch.h"
#include "batches/GrCopySurfaceBatch.h"
#include "batches/GrDiscardBatch.h"
@@ -210,6 +210,8 @@ void GrDrawTarget::drawBatches(GrBatchFlushState* flushState) {
}
fBatches[i]->draw(flushState);
}
+
+ fGpu->performFlushWorkaround();
}
void GrDrawTarget::reset() {
@@ -513,6 +515,12 @@ void GrDrawTarget::recordBatch(GrBatch* batch) {
///////////////////////////////////////////////////////////////////////////////
+#ifdef ENABLE_PLS
bsalomon 2016/01/04 15:33:46 There is an SkTPin that does the same thing.
+ static int clamp(int min, int v, int max) {
+ return SkTMin(SkTMax(v, min), max);
+ }
+#endif
+
bool GrDrawTarget::installPipelineInDrawBatch(const GrPipelineBuilder* pipelineBuilder,
const GrScissorState* scissor,
GrDrawBatch* batch) {
@@ -521,6 +529,30 @@ bool GrDrawTarget::installPipelineInDrawBatch(const GrPipelineBuilder* pipelineB
args.fCaps = this->caps();
args.fScissor = scissor;
batch->getPipelineOptimizations(&args.fOpts);
+ #ifdef ENABLE_PLS
+ GrScissorState finalScissor;
+ if (args.fOpts.fOverrides.fUsePLSDstRead) {
+ // FIXME shouldn't have to cast to GL implementation here
bsalomon 2016/01/04 15:33:46 The viewport rect isn't really right because it re
+ GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(pipelineBuilder->getRenderTarget());
+ GrGLIRect viewport = rt->getViewport();
+ SkIRect ibounds;
+ ibounds.fLeft = clamp(viewport.fLeft, SkScalarFloorToInt(batch->bounds().fLeft),
+ viewport.fWidth);
+ ibounds.fTop = clamp(viewport.fBottom, SkScalarFloorToInt(batch->bounds().fTop),
+ viewport.fHeight);
+ ibounds.fRight = clamp(viewport.fLeft, SkScalarCeilToInt(batch->bounds().fRight),
+ viewport.fWidth);
+ ibounds.fBottom = clamp(viewport.fBottom, SkScalarCeilToInt(batch->bounds().fBottom),
+ viewport.fHeight);
+ if (scissor != nullptr && scissor->enabled()) {
+ if (!ibounds.intersect(scissor->rect())) {
+ ibounds = scissor->rect();
+ }
+ }
+ finalScissor.set(ibounds);
+ args.fScissor = &finalScissor;
+ }
+ #endif
args.fOpts.fColorPOI.completeCalculations(pipelineBuilder->fColorFragmentProcessors.begin(),
pipelineBuilder->numColorFragmentProcessors());
args.fOpts.fCoveragePOI.completeCalculations(

Powered by Google App Engine
This is Rietveld 408576698