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

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

Issue 687563008: Beginning to refactor nvpr code (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: cleanup Created 6 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
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 9
10 #include "GrGpu.h" 10 #include "GrGpu.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 268 }
269 269
270 return fQuadIndexBuffer; 270 return fQuadIndexBuffer;
271 } 271 }
272 272
273 //////////////////////////////////////////////////////////////////////////////// 273 ////////////////////////////////////////////////////////////////////////////////
274 274
275 bool GrGpu::setupClipAndFlushState(DrawType type, 275 bool GrGpu::setupClipAndFlushState(DrawType type,
276 const GrDeviceCoordTexture* dstCopy, 276 const GrDeviceCoordTexture* dstCopy,
277 const SkRect* devBounds, 277 const SkRect* devBounds,
278 GrDrawState::AutoRestoreEffects* are) { 278 GrDrawState::AutoRestoreEffects* are,
279 GrDrawState::AutoRestoreStencil* ars) {
279 GrClipMaskManager::ScissorState scissorState; 280 GrClipMaskManager::ScissorState scissorState;
280 GrDrawState::AutoRestoreStencil ars;
281 if (!fClipMaskManager.setupClipping(this->getClip(), 281 if (!fClipMaskManager.setupClipping(this->getClip(),
282 devBounds, 282 devBounds,
283 are, 283 are,
284 &ars, 284 ars,
285 &scissorState)) { 285 &scissorState)) {
286 return false; 286 return false;
287 } 287 }
288 288
289 if (!this->flushGraphicsState(type, scissorState, dstCopy)) { 289 if (!this->flushGraphicsState(type, scissorState, dstCopy)) {
290 return false; 290 return false;
291 } 291 }
292 292
293 return true; 293 return true;
294 } 294 }
(...skipping 23 matching lines...) Expand all
318 318
319 void GrGpu::geometrySourceWillPop(const GeometrySrcState& restoredState) { 319 void GrGpu::geometrySourceWillPop(const GeometrySrcState& restoredState) {
320 // if popping last entry then pops are unbalanced with pushes 320 // if popping last entry then pops are unbalanced with pushes
321 SkASSERT(fGeomPoolStateStack.count() > 1); 321 SkASSERT(fGeomPoolStateStack.count() > 1);
322 fGeomPoolStateStack.pop_back(); 322 fGeomPoolStateStack.pop_back();
323 } 323 }
324 324
325 void GrGpu::onDraw(const DrawInfo& info) { 325 void GrGpu::onDraw(const DrawInfo& info) {
326 this->handleDirtyContext(); 326 this->handleDirtyContext();
327 GrDrawState::AutoRestoreEffects are; 327 GrDrawState::AutoRestoreEffects are;
328 GrDrawState::AutoRestoreStencil ars;
328 if (!this->setupClipAndFlushState(PrimTypeToDrawType(info.primitiveType()), 329 if (!this->setupClipAndFlushState(PrimTypeToDrawType(info.primitiveType()),
329 info.getDstCopy(), 330 info.getDstCopy(),
330 info.getDevBounds(), 331 info.getDevBounds(),
331 &are)) { 332 &are,
333 &ars)) {
332 return; 334 return;
333 } 335 }
334 this->onGpuDraw(info); 336 this->onGpuDraw(info);
335 } 337 }
336 338
337 void GrGpu::onStencilPath(const GrPath* path, SkPath::FillType fill) { 339
340 // TODO hack
341 static const GrStencilSettings& winding_path_stencil_settings() {
342 GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings,
343 kIncClamp_StencilOp,
344 kIncClamp_StencilOp,
345 kAlwaysIfInClip_StencilFunc,
346 0xFFFF, 0xFFFF, 0xFFFF);
347 return *GR_CONST_STENCIL_SETTINGS_PTR_FROM_STRUCT_PTR(&gSettings);
348 }
349
350 static const GrStencilSettings& even_odd_path_stencil_settings() {
351 GR_STATIC_CONST_SAME_STENCIL_STRUCT(gSettings,
352 kInvert_StencilOp,
353 kInvert_StencilOp,
354 kAlwaysIfInClip_StencilFunc,
355 0xFFFF, 0xFFFF, 0xFFFF);
356 return *GR_CONST_STENCIL_SETTINGS_PTR_FROM_STRUCT_PTR(&gSettings);
357 }
358
359 static void get_path_stencil_settings_for_filltype(GrPathRendering::FillType fil l,
360 GrStencilSettings* outStencil Settings) {
361
362 switch (fill) {
363 default:
364 SkFAIL("Unexpected path fill.");
365 case GrPathRendering::kWinding_FillType:
366 *outStencilSettings = winding_path_stencil_settings();
367 break;
368 case GrPathRendering::kEvenOdd_FillType:
369 *outStencilSettings = even_odd_path_stencil_settings();
370 break;
371 }
372 }
373
374 void GrGpu::onStencilPath(const GrPath* path, GrPathRendering::FillType fill) {
338 this->handleDirtyContext(); 375 this->handleDirtyContext();
339 376
340 GrDrawState::AutoRestoreEffects are; 377 GrDrawState::AutoRestoreEffects are;
341 if (!this->setupClipAndFlushState(kStencilPath_DrawType, NULL, NULL, &are)) { 378 GrDrawState::AutoRestoreStencil ars;
379 if (!this->setupClipAndFlushState(kStencilPath_DrawType, NULL, NULL, &are, & ars)) {
342 return; 380 return;
343 } 381 }
344 382
345 this->pathRendering()->stencilPath(path, fill); 383 GrStencilSettings stencilSettings;
384 get_path_stencil_settings_for_filltype(fill, &stencilSettings);
385 fClipMaskManager.adjustPathStencilParams(&stencilSettings);
386
387 this->pathRendering()->stencilPath(path, stencilSettings);
346 } 388 }
347 389
348 390
349 void GrGpu::onDrawPath(const GrPath* path, SkPath::FillType fill, 391 void GrGpu::onDrawPath(const GrPath* path, GrPathRendering::FillType fill,
350 const GrDeviceCoordTexture* dstCopy) { 392 const GrDeviceCoordTexture* dstCopy) {
351 this->handleDirtyContext(); 393 this->handleDirtyContext();
352 394
353 drawState()->setDefaultVertexAttribs(); 395 drawState()->setDefaultVertexAttribs();
354 396
355 GrDrawState::AutoRestoreEffects are; 397 GrDrawState::AutoRestoreEffects are;
356 if (!this->setupClipAndFlushState(kDrawPath_DrawType, dstCopy, NULL, &are)) { 398 GrDrawState::AutoRestoreStencil ars;
399 if (!this->setupClipAndFlushState(kDrawPath_DrawType, dstCopy, NULL, &are, & ars)) {
357 return; 400 return;
358 } 401 }
359 402
360 this->pathRendering()->drawPath(path, fill); 403 GrStencilSettings stencilSettings;
404 get_path_stencil_settings_for_filltype(fill, &stencilSettings);
405 fClipMaskManager.adjustPathStencilParams(&stencilSettings);
406
407 this->pathRendering()->drawPath(path, stencilSettings);
361 } 408 }
362 409
363 void GrGpu::onDrawPaths(const GrPathRange* pathRange, 410 void GrGpu::onDrawPaths(const GrPathRange* pathRange,
364 const uint32_t indices[], int count, 411 const uint32_t indices[], int count,
365 const float transforms[], PathTransformType transformsTy pe, 412 const float transforms[], PathTransformType transformsTy pe,
366 SkPath::FillType fill, const GrDeviceCoordTexture* dstCo py) { 413 GrPathRendering::FillType fill, const GrDeviceCoordTextu re* dstCopy) {
367 this->handleDirtyContext(); 414 this->handleDirtyContext();
368 415
369 drawState()->setDefaultVertexAttribs(); 416 drawState()->setDefaultVertexAttribs();
370 417
371 GrDrawState::AutoRestoreEffects are; 418 GrDrawState::AutoRestoreEffects are;
372 if (!this->setupClipAndFlushState(kDrawPaths_DrawType, dstCopy, NULL, &are)) { 419 GrDrawState::AutoRestoreStencil ars;
420 if (!this->setupClipAndFlushState(kDrawPaths_DrawType, dstCopy, NULL, &are, &ars)) {
373 return; 421 return;
374 } 422 }
375 423
424 GrStencilSettings stencilSettings;
425 get_path_stencil_settings_for_filltype(fill, &stencilSettings);
426 fClipMaskManager.adjustPathStencilParams(&stencilSettings);
427
376 pathRange->willDrawPaths(indices, count); 428 pathRange->willDrawPaths(indices, count);
377 this->pathRendering()->drawPaths(pathRange, indices, count, transforms, tran sformsType, fill); 429 this->pathRendering()->drawPaths(pathRange, indices, count, transforms, tran sformsType,
430 stencilSettings);
378 } 431 }
379 432
380 void GrGpu::finalizeReservedVertices() { 433 void GrGpu::finalizeReservedVertices() {
381 SkASSERT(fVertexPool); 434 SkASSERT(fVertexPool);
382 fVertexPool->unmap(); 435 fVertexPool->unmap();
383 } 436 }
384 437
385 void GrGpu::finalizeReservedIndices() { 438 void GrGpu::finalizeReservedIndices() {
386 SkASSERT(fIndexPool); 439 SkASSERT(fIndexPool);
387 fIndexPool->unmap(); 440 fIndexPool->unmap();
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 } 560 }
508 561
509 void GrGpu::releaseIndexArray() { 562 void GrGpu::releaseIndexArray() {
510 // if index source was array, we stowed data in the pool 563 // if index source was array, we stowed data in the pool
511 const GeometrySrcState& geoSrc = this->getGeomSrc(); 564 const GeometrySrcState& geoSrc = this->getGeomSrc();
512 SkASSERT(kArray_GeometrySrcType == geoSrc.fIndexSrc); 565 SkASSERT(kArray_GeometrySrcType == geoSrc.fIndexSrc);
513 size_t bytes = geoSrc.fIndexCount * sizeof(uint16_t); 566 size_t bytes = geoSrc.fIndexCount * sizeof(uint16_t);
514 fIndexPool->putBack(bytes); 567 fIndexPool->putBack(bytes);
515 --fIndexPoolUseCnt; 568 --fIndexPoolUseCnt;
516 } 569 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698