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

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

Issue 816513003: Stop creating GrODS for stencilPath commands. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 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 unified diff | Download patch
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | src/gpu/GrOptDrawState.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 "GrInOrderDrawBuffer.h" 8 #include "GrInOrderDrawBuffer.h"
9 9
10 #include "GrDefaultGeoProcFactory.h" 10 #include "GrDefaultGeoProcFactory.h"
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 draw->fType = add_trace_bit(draw->fType); 215 draw->fType = add_trace_bit(draw->fType);
216 } 216 }
217 } 217 }
218 218
219 return instancesToConcat; 219 return instancesToConcat;
220 } 220 }
221 221
222 void GrInOrderDrawBuffer::onDraw(const GrDrawState& ds, 222 void GrInOrderDrawBuffer::onDraw(const GrDrawState& ds,
223 const GrGeometryProcessor* gp, 223 const GrGeometryProcessor* gp,
224 const DrawInfo& info, 224 const DrawInfo& info,
225 const ScissorState& scissorState, 225 const GrScissorState& scissorState,
226 const GrDeviceCoordTexture* dstCopy) { 226 const GrDeviceCoordTexture* dstCopy) {
227 SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer())); 227 SkASSERT(info.vertexBuffer() && (!info.isIndexed() || info.indexBuffer()));
228 228
229 if (!this->recordStateAndShouldDraw(ds, gp, NULL, 229 if (!this->recordStateAndShouldDraw(ds, gp, NULL,
230 GrGpu::PrimTypeToDrawType(info.primitive Type()), 230 GrGpu::PrimTypeToDrawType(info.primitive Type()),
231 scissorState, dstCopy)) { 231 scissorState, dstCopy)) {
232 return; 232 return;
233 } 233 }
234 234
235 Draw* draw; 235 Draw* draw;
236 if (info.isInstanced()) { 236 if (info.isInstanced()) {
237 int instancesConcated = this->concatInstancedDraw(ds, info); 237 int instancesConcated = this->concatInstancedDraw(ds, info);
238 if (info.instanceCount() > instancesConcated) { 238 if (info.instanceCount() > instancesConcated) {
239 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info)); 239 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
240 draw->fInfo.adjustInstanceCount(-instancesConcated); 240 draw->fInfo.adjustInstanceCount(-instancesConcated);
241 } else { 241 } else {
242 return; 242 return;
243 } 243 }
244 } else { 244 } else {
245 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info)); 245 draw = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, Draw, (info));
246 } 246 }
247 this->recordTraceMarkersIfNecessary(); 247 this->recordTraceMarkersIfNecessary();
248 } 248 }
249 249
250 void GrInOrderDrawBuffer::onStencilPath(const GrDrawState& ds, 250 void GrInOrderDrawBuffer::onStencilPath(const GrDrawState& ds,
251 const GrPathProcessor* pathProc, 251 const GrPathProcessor* pathProc,
252 const GrPath* path, 252 const GrPath* path,
253 const GrClipMaskManager::ScissorState& s cissorState, 253 const GrScissorState& scissorState,
254 const GrStencilSettings& stencilSettings ) { 254 const GrStencilSettings& stencilSettings ) {
255 // Only compare the subset of GrDrawState relevant to path stenciling? 255 StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath,
256 if (!this->recordStateAndShouldDraw(ds, NULL, pathProc, GrGpu::kStencilPath_ DrawType, 256 (path, ds.getRenderTarget()));
257 scissorState, NULL)) { 257 sp->fScissor = scissorState;
258 return; 258 sp->fUseHWAA = ds.isHWAntialias();
259 } 259 sp->fViewMatrix = ds.getViewMatrix();
260 StencilPath* sp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, StencilPath, (path)); 260 sp->fStencil = stencilSettings;
261 sp->fStencilSettings = stencilSettings;
262 this->recordTraceMarkersIfNecessary(); 261 this->recordTraceMarkersIfNecessary();
263 } 262 }
264 263
265 void GrInOrderDrawBuffer::onDrawPath(const GrDrawState& ds, 264 void GrInOrderDrawBuffer::onDrawPath(const GrDrawState& ds,
266 const GrPathProcessor* pathProc, 265 const GrPathProcessor* pathProc,
267 const GrPath* path, 266 const GrPath* path,
268 const GrClipMaskManager::ScissorState& scis sorState, 267 const GrScissorState& scissorState,
269 const GrStencilSettings& stencilSettings, 268 const GrStencilSettings& stencilSettings,
270 const GrDeviceCoordTexture* dstCopy) { 269 const GrDeviceCoordTexture* dstCopy) {
271 // TODO: Only compare the subset of GrDrawState relevant to path covering? 270 // TODO: Only compare the subset of GrDrawState relevant to path covering?
272 if (!this->recordStateAndShouldDraw(ds, NULL, pathProc, GrGpu::kDrawPath_Dra wType, 271 if (!this->recordStateAndShouldDraw(ds, NULL, pathProc, GrGpu::kDrawPath_Dra wType,
273 scissorState, dstCopy)) { 272 scissorState, dstCopy)) {
274 return; 273 return;
275 } 274 }
276 DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path)); 275 DrawPath* dp = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, DrawPath, (path));
277 dp->fStencilSettings = stencilSettings; 276 dp->fStencilSettings = stencilSettings;
278 this->recordTraceMarkersIfNecessary(); 277 this->recordTraceMarkersIfNecessary();
279 } 278 }
280 279
281 void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds, 280 void GrInOrderDrawBuffer::onDrawPaths(const GrDrawState& ds,
282 const GrPathProcessor* pathProc, 281 const GrPathProcessor* pathProc,
283 const GrPathRange* pathRange, 282 const GrPathRange* pathRange,
284 const void* indices, 283 const void* indices,
285 PathIndexType indexType, 284 PathIndexType indexType,
286 const float transformValues[], 285 const float transformValues[],
287 PathTransformType transformType, 286 PathTransformType transformType,
288 int count, 287 int count,
289 const GrClipMaskManager::ScissorState& sci ssorState, 288 const GrScissorState& scissorState,
290 const GrStencilSettings& stencilSettings, 289 const GrStencilSettings& stencilSettings,
291 const GrDeviceCoordTexture* dstCopy) { 290 const GrDeviceCoordTexture* dstCopy) {
292 SkASSERT(pathRange); 291 SkASSERT(pathRange);
293 SkASSERT(indices); 292 SkASSERT(indices);
294 SkASSERT(transformValues); 293 SkASSERT(transformValues);
295 294
296 if (!this->recordStateAndShouldDraw(ds, NULL, pathProc, GrGpu::kDrawPath_Dra wType, scissorState, 295 if (!this->recordStateAndShouldDraw(ds, NULL, pathProc, GrGpu::kDrawPath_Dra wType, scissorState,
297 dstCopy)) { 296 dstCopy)) {
298 return; 297 return;
299 } 298 }
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 427
429 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker); 428 SkASSERT(fGpuCmdMarkers.count() == currCmdMarker);
430 ++fDrawID; 429 ++fDrawID;
431 } 430 }
432 431
433 void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDra wState* optState) { 432 void GrInOrderDrawBuffer::Draw::execute(GrInOrderDrawBuffer* buf, const GrOptDra wState* optState) {
434 SkASSERT(optState); 433 SkASSERT(optState);
435 buf->getGpu()->draw(*optState, fInfo); 434 buf->getGpu()->draw(*optState, fInfo);
436 } 435 }
437 436
438 void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, 437 void GrInOrderDrawBuffer::StencilPath::execute(GrInOrderDrawBuffer* buf, const G rOptDrawState*) {
439 const GrOptDrawState* optState) { 438 GrGpu::StencilPathState state;
440 SkASSERT(optState); 439 state.fRenderTarget = fRenderTarget.get();
441 buf->getGpu()->stencilPath(*optState, this->path(), fStencilSettings); 440 state.fScissor = &fScissor;
441 state.fStencil = &fStencil;
442 state.fUseHWAA = fUseHWAA;
443 state.fViewMatrix = &fViewMatrix;
444
joshualitt 2014/12/17 21:22:37 Is there any reason StencilPathCmd doesn't just ho
445 buf->getGpu()->stencilPath(this->path(), state);
442 } 446 }
443 447
444 void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf, 448 void GrInOrderDrawBuffer::DrawPath::execute(GrInOrderDrawBuffer* buf,
445 const GrOptDrawState* optState) { 449 const GrOptDrawState* optState) {
446 SkASSERT(optState); 450 SkASSERT(optState);
447 buf->getGpu()->drawPath(*optState, this->path(), fStencilSettings); 451 buf->getGpu()->drawPath(*optState, this->path(), fStencilSettings);
448 } 452 }
449 453
450 void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf, 454 void GrInOrderDrawBuffer::DrawPaths::execute(GrInOrderDrawBuffer* buf,
451 const GrOptDrawState* optState) { 455 const GrOptDrawState* optState) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 this->recordTraceMarkersIfNecessary(); 490 this->recordTraceMarkersIfNecessary();
487 return true; 491 return true;
488 } 492 }
489 return false; 493 return false;
490 } 494 }
491 495
492 bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds, 496 bool GrInOrderDrawBuffer::recordStateAndShouldDraw(const GrDrawState& ds,
493 const GrGeometryProcessor* gp , 497 const GrGeometryProcessor* gp ,
494 const GrPathProcessor* pathPr oc, 498 const GrPathProcessor* pathPr oc,
495 GrGpu::DrawType drawType, 499 GrGpu::DrawType drawType,
496 const GrClipMaskManager::Scis sorState& scissor, 500 const GrScissorState& scissor ,
497 const GrDeviceCoordTexture* d stCopy) { 501 const GrDeviceCoordTexture* d stCopy) {
498 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState, 502 SetState* ss = GrNEW_APPEND_TO_RECORDER(fCmdBuffer, SetState,
499 (ds, gp, pathProc, *this->getGpu()-> caps(), scissor, 503 (ds, gp, pathProc, *this->getGpu()-> caps(), scissor,
500 dstCopy, drawType)); 504 dstCopy, drawType));
501 if (ss->fState.mustSkip()) { 505 if (ss->fState.mustSkip()) {
502 fCmdBuffer.pop_back(); 506 fCmdBuffer.pop_back();
503 return false; 507 return false;
504 } 508 }
505 if (fPrevState && fPrevState->combineIfPossible(ss->fState)) { 509 if (fPrevState && fPrevState->combineIfPossible(ss->fState)) {
506 fCmdBuffer.pop_back(); 510 fCmdBuffer.pop_back();
507 } else { 511 } else {
508 fPrevState = &ss->fState; 512 fPrevState = &ss->fState;
509 this->recordTraceMarkersIfNecessary(); 513 this->recordTraceMarkersIfNecessary();
510 } 514 }
511 return true; 515 return true;
512 } 516 }
513 517
514 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() { 518 void GrInOrderDrawBuffer::recordTraceMarkersIfNecessary() {
515 SkASSERT(!fCmdBuffer.empty()); 519 SkASSERT(!fCmdBuffer.empty());
516 SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType)); 520 SkASSERT(!cmd_has_trace_marker(fCmdBuffer.back().fType));
517 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers(); 521 const GrTraceMarkerSet& activeTraceMarkers = this->getActiveTraceMarkers();
518 if (activeTraceMarkers.count() > 0) { 522 if (activeTraceMarkers.count() > 0) {
519 fCmdBuffer.back().fType = add_trace_bit(fCmdBuffer.back().fType); 523 fCmdBuffer.back().fType = add_trace_bit(fCmdBuffer.back().fType);
520 fGpuCmdMarkers.push_back(activeTraceMarkers); 524 fGpuCmdMarkers.push_back(activeTraceMarkers);
521 } 525 }
522 } 526 }
OLDNEW
« no previous file with comments | « src/gpu/GrInOrderDrawBuffer.h ('k') | src/gpu/GrOptDrawState.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698