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

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

Issue 947443003: Move clip off of draw target (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: feedback inc Created 5 years, 10 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/GrDrawTarget.h ('k') | src/gpu/GrPipelineBuilder.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 2010 Google Inc. 3 * Copyright 2010 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 "GrDrawTarget.h" 9 #include "GrDrawTarget.h"
10 10
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 fStartIndex += indexOffset; 85 fStartIndex += indexOffset;
86 SkASSERT(fStartIndex >= 0); 86 SkASSERT(fStartIndex >= 0);
87 } 87 }
88 88
89 //////////////////////////////////////////////////////////////////////////////// 89 ////////////////////////////////////////////////////////////////////////////////
90 90
91 #define DEBUG_INVAL_BUFFER 0xdeadcafe 91 #define DEBUG_INVAL_BUFFER 0xdeadcafe
92 #define DEBUG_INVAL_START_IDX -1 92 #define DEBUG_INVAL_START_IDX -1
93 93
94 GrDrawTarget::GrDrawTarget(GrContext* context) 94 GrDrawTarget::GrDrawTarget(GrContext* context)
95 : fClip(NULL) 95 : fContext(context)
96 , fContext(context)
97 , fGpuTraceMarkerCount(0) { 96 , fGpuTraceMarkerCount(0) {
98 SkASSERT(context); 97 SkASSERT(context);
99 GeometrySrcState& geoSrc = fGeoSrcStateStack.push_back(); 98 GeometrySrcState& geoSrc = fGeoSrcStateStack.push_back();
100 #ifdef SK_DEBUG 99 #ifdef SK_DEBUG
101 geoSrc.fVertexCount = DEBUG_INVAL_START_IDX; 100 geoSrc.fVertexCount = DEBUG_INVAL_START_IDX;
102 geoSrc.fVertexBuffer = (GrVertexBuffer*)DEBUG_INVAL_BUFFER; 101 geoSrc.fVertexBuffer = (GrVertexBuffer*)DEBUG_INVAL_BUFFER;
103 geoSrc.fIndexCount = DEBUG_INVAL_START_IDX; 102 geoSrc.fIndexCount = DEBUG_INVAL_START_IDX;
104 geoSrc.fIndexBuffer = (GrIndexBuffer*)DEBUG_INVAL_BUFFER; 103 geoSrc.fIndexBuffer = (GrIndexBuffer*)DEBUG_INVAL_BUFFER;
105 #endif 104 #endif
106 geoSrc.fVertexSrc = kNone_GeometrySrcType; 105 geoSrc.fVertexSrc = kNone_GeometrySrcType;
(...skipping 10 matching lines...) Expand all
117 void GrDrawTarget::releaseGeometry() { 116 void GrDrawTarget::releaseGeometry() {
118 int popCnt = fGeoSrcStateStack.count() - 1; 117 int popCnt = fGeoSrcStateStack.count() - 1;
119 while (popCnt) { 118 while (popCnt) {
120 this->popGeometrySource(); 119 this->popGeometrySource();
121 --popCnt; 120 --popCnt;
122 } 121 }
123 this->resetVertexSource(); 122 this->resetVertexSource();
124 this->resetIndexSource(); 123 this->resetIndexSource();
125 } 124 }
126 125
127 void GrDrawTarget::setClip(const GrClipData* clip) {
128 fClip = clip;
129 }
130
131 const GrClipData* GrDrawTarget::getClip() const {
132 return fClip;
133 }
134
135 bool GrDrawTarget::reserveVertexSpace(size_t vertexSize, 126 bool GrDrawTarget::reserveVertexSpace(size_t vertexSize,
136 int vertexCount, 127 int vertexCount,
137 void** vertices) { 128 void** vertices) {
138 GeometrySrcState& geoSrc = fGeoSrcStateStack.back(); 129 GeometrySrcState& geoSrc = fGeoSrcStateStack.back();
139 bool acquired = false; 130 bool acquired = false;
140 if (vertexCount > 0) { 131 if (vertexCount > 0) {
141 SkASSERT(vertices); 132 SkASSERT(vertices);
142 this->releasePreviousVertexSource(); 133 this->releasePreviousVertexSource();
143 geoSrc.fVertexSrc = kNone_GeometrySrcType; 134 geoSrc.fVertexSrc = kNone_GeometrySrcType;
144 135
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 379
389 bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil der, 380 bool GrDrawTarget::setupDstReadIfNecessary(const GrPipelineBuilder& pipelineBuil der,
390 const GrProcOptInfo& colorPOI, 381 const GrProcOptInfo& colorPOI,
391 const GrProcOptInfo& coveragePOI, 382 const GrProcOptInfo& coveragePOI,
392 GrDeviceCoordTexture* dstCopy, 383 GrDeviceCoordTexture* dstCopy,
393 const SkRect* drawBounds) { 384 const SkRect* drawBounds) {
394 if (!pipelineBuilder.willXPNeedDstCopy(*this->caps(), colorPOI, coveragePOI) ) { 385 if (!pipelineBuilder.willXPNeedDstCopy(*this->caps(), colorPOI, coveragePOI) ) {
395 return true; 386 return true;
396 } 387 }
397 SkIRect copyRect; 388 SkIRect copyRect;
398 const GrClipData* clip = this->getClip();
399 GrRenderTarget* rt = pipelineBuilder.getRenderTarget(); 389 GrRenderTarget* rt = pipelineBuilder.getRenderTarget();
400 clip->getConservativeBounds(rt, &copyRect); 390 pipelineBuilder.clip().getConservativeBounds(rt, &copyRect);
401 391
402 if (drawBounds) { 392 if (drawBounds) {
403 SkIRect drawIBounds; 393 SkIRect drawIBounds;
404 drawBounds->roundOut(&drawIBounds); 394 drawBounds->roundOut(&drawIBounds);
405 if (!copyRect.intersect(drawIBounds)) { 395 if (!copyRect.intersect(drawIBounds)) {
406 #ifdef SK_DEBUG 396 #ifdef SK_DEBUG
407 SkDebugf("Missed an early reject. Bailing on draw from setupDstReadI fNecessary.\n"); 397 SkDebugf("Missed an early reject. Bailing on draw from setupDstReadI fNecessary.\n");
408 #endif 398 #endif
409 return false; 399 return false;
410 } 400 }
(...skipping 461 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 } 862 }
873 if (fIndices) { 863 if (fIndices) {
874 fTarget->resetIndexSource(); 864 fTarget->resetIndexSource();
875 } 865 }
876 fTarget = NULL; 866 fTarget = NULL;
877 } 867 }
878 fVertices = NULL; 868 fVertices = NULL;
879 fIndices = NULL; 869 fIndices = NULL;
880 } 870 }
881 871
882 GrDrawTarget::AutoClipRestore::AutoClipRestore(GrDrawTarget* target, const SkIRe ct& newClip) {
883 fTarget = target;
884 fClip = fTarget->getClip();
885 fStack.init();
886 fStack.get()->clipDevRect(newClip, SkRegion::kReplace_Op);
887 fReplacementClip.fClipStack.reset(SkRef(fStack.get()));
888 target->setClip(&fReplacementClip);
889 }
890
891 namespace { 872 namespace {
892 // returns true if the read/written rect intersects the src/dst and false if not . 873 // returns true if the read/written rect intersects the src/dst and false if not .
893 bool clip_srcrect_and_dstpoint(const GrSurface* dst, 874 bool clip_srcrect_and_dstpoint(const GrSurface* dst,
894 const GrSurface* src, 875 const GrSurface* src,
895 const SkIRect& srcRect, 876 const SkIRect& srcRect,
896 const SkIPoint& dstPoint, 877 const SkIPoint& dstPoint,
897 SkIRect* clippedSrcRect, 878 SkIRect* clippedSrcRect,
898 SkIPoint* clippedDstPoint) { 879 SkIPoint* clippedDstPoint) {
899 *clippedSrcRect = srcRect; 880 *clippedSrcRect = srcRect;
900 *clippedDstPoint = dstPoint; 881 *clippedDstPoint = dstPoint;
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 1269
1289 bool GrClipTarget::setupClip(GrPipelineBuilder* pipelineBuilder, 1270 bool GrClipTarget::setupClip(GrPipelineBuilder* pipelineBuilder,
1290 GrPipelineBuilder::AutoRestoreEffects* are, 1271 GrPipelineBuilder::AutoRestoreEffects* are,
1291 GrPipelineBuilder::AutoRestoreStencil* ars, 1272 GrPipelineBuilder::AutoRestoreStencil* ars,
1292 GrScissorState* scissorState, 1273 GrScissorState* scissorState,
1293 const SkRect* devBounds) { 1274 const SkRect* devBounds) {
1294 return fClipMaskManager.setupClipping(pipelineBuilder, 1275 return fClipMaskManager.setupClipping(pipelineBuilder,
1295 are, 1276 are,
1296 ars, 1277 ars,
1297 scissorState, 1278 scissorState,
1298 this->getClip(),
1299 devBounds); 1279 devBounds);
1300 } 1280 }
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.h ('k') | src/gpu/GrPipelineBuilder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698