| OLD | NEW |
| 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 #ifndef GrGpu_DEFINED | 8 #ifndef GrGpu_DEFINED |
| 9 #define GrGpu_DEFINED | 9 #define GrGpu_DEFINED |
| 10 | 10 |
| 11 #include "GrDrawTarget.h" | 11 #include "GrDrawTarget.h" |
| 12 #include "GrPathRendering.h" | 12 #include "GrPathRendering.h" |
| 13 #include "GrProgramDesc.h" | 13 #include "GrProgramDesc.h" |
| 14 #include "SkPath.h" | 14 #include "SkPath.h" |
| 15 | 15 |
| 16 class GrContext; | 16 class GrContext; |
| 17 class GrIndexBufferAllocPool; | 17 class GrIndexBufferAllocPool; |
| 18 class GrOptDrawState; | 18 class GrOptDrawState; |
| 19 class GrPath; | 19 class GrPath; |
| 20 class GrPathRange; | 20 class GrPathRange; |
| 21 class GrPathRenderer; | 21 class GrPathRenderer; |
| 22 class GrPathRendererChain; | 22 class GrPathRendererChain; |
| 23 class GrPrimitiveProcessor; |
| 23 class GrStencilBuffer; | 24 class GrStencilBuffer; |
| 24 class GrVertexBufferAllocPool; | 25 class GrVertexBufferAllocPool; |
| 25 | 26 |
| 26 class GrGpu : public SkRefCnt { | 27 class GrGpu : public SkRefCnt { |
| 27 public: | 28 public: |
| 28 | 29 |
| 29 /** | 30 /** |
| 30 * Additional blend coefficients for dual source blending, not exposed | 31 * Additional blend coefficients for dual source blending, not exposed |
| 31 * through GrPaint/GrContext. | 32 * through GrPaint/GrContext. |
| 32 */ | 33 */ |
| (...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 kDrawPath_DrawType, | 309 kDrawPath_DrawType, |
| 309 kDrawPaths_DrawType, | 310 kDrawPaths_DrawType, |
| 310 }; | 311 }; |
| 311 | 312 |
| 312 static bool IsPathRenderingDrawType(DrawType type) { | 313 static bool IsPathRenderingDrawType(DrawType type) { |
| 313 return kDrawPath_DrawType == type || kDrawPaths_DrawType == type; | 314 return kDrawPath_DrawType == type || kDrawPaths_DrawType == type; |
| 314 } | 315 } |
| 315 | 316 |
| 316 GrContext::GPUStats* gpuStats() { return &fGPUStats; } | 317 GrContext::GPUStats* gpuStats() { return &fGPUStats; } |
| 317 | 318 |
| 318 virtual void buildProgramDesc(const GrOptDrawState&, | 319 virtual void buildProgramDesc(GrProgramDesc*, |
| 320 const GrPrimitiveProcessor&, |
| 321 const GrOptDrawState&, |
| 319 const GrProgramDesc::DescInfo&, | 322 const GrProgramDesc::DescInfo&, |
| 320 GrGpu::DrawType, | 323 GrGpu::DrawType, |
| 321 GrProgramDesc*) = 0; | 324 const GrBatchTracker&) const = 0; |
| 322 | 325 |
| 323 /** | 326 /** |
| 324 * Called at start and end of gpu trace marking | 327 * Called at start and end of gpu trace marking |
| 325 * GR_CREATE_GPU_TRACE_MARKER(marker_str, target) will automatically call th
ese at the start | 328 * GR_CREATE_GPU_TRACE_MARKER(marker_str, target) will automatically call th
ese at the start |
| 326 * and end of a code block respectively | 329 * and end of a code block respectively |
| 327 */ | 330 */ |
| 328 void addGpuTraceMarker(const GrGpuTraceMarker* marker); | 331 void addGpuTraceMarker(const GrGpuTraceMarker* marker); |
| 329 void removeGpuTraceMarker(const GrGpuTraceMarker* marker); | 332 void removeGpuTraceMarker(const GrGpuTraceMarker* marker); |
| 330 | 333 |
| 331 /** | 334 /** |
| (...skipping 19 matching lines...) Expand all Loading... |
| 351 | 354 |
| 352 // Called to perform a surface to surface copy. Fallbacks to issuing a draw
from the src to dst | 355 // Called to perform a surface to surface copy. Fallbacks to issuing a draw
from the src to dst |
| 353 // take place at the GrDrawTarget level and this function implement faster c
opy paths. The rect | 356 // take place at the GrDrawTarget level and this function implement faster c
opy paths. The rect |
| 354 // and point are pre-clipped. The src rect and implied dst rect are guarante
ed to be within the | 357 // and point are pre-clipped. The src rect and implied dst rect are guarante
ed to be within the |
| 355 // src/dst bounds and non-empty. | 358 // src/dst bounds and non-empty. |
| 356 virtual bool copySurface(GrSurface* dst, | 359 virtual bool copySurface(GrSurface* dst, |
| 357 GrSurface* src, | 360 GrSurface* src, |
| 358 const SkIRect& srcRect, | 361 const SkIRect& srcRect, |
| 359 const SkIPoint& dstPoint) = 0; | 362 const SkIPoint& dstPoint) = 0; |
| 360 | 363 |
| 361 void draw(const GrOptDrawState&, const GrDrawTarget::DrawInfo&); | 364 struct DrawArgs { |
| 365 typedef GrDrawTarget::DrawInfo DrawInfo; |
| 366 DrawArgs(const GrPrimitiveProcessor* primProc, |
| 367 const GrOptDrawState* optState, |
| 368 const GrProgramDesc* desc, |
| 369 const GrBatchTracker* batchTracker) |
| 370 : fPrimitiveProcessor(primProc) |
| 371 , fOptState(optState) |
| 372 , fDesc(desc) |
| 373 , fBatchTracker(batchTracker) { |
| 374 SkASSERT(primProc && optState && desc && batchTracker); |
| 375 } |
| 376 const GrPrimitiveProcessor* fPrimitiveProcessor; |
| 377 const GrOptDrawState* fOptState; |
| 378 const GrProgramDesc* fDesc; |
| 379 const GrBatchTracker* fBatchTracker; |
| 380 }; |
| 381 |
| 382 void draw(const DrawArgs&, const GrDrawTarget::DrawInfo&); |
| 362 | 383 |
| 363 /** None of these params are optional, pointers used just to avoid making co
pies. */ | 384 /** None of these params are optional, pointers used just to avoid making co
pies. */ |
| 364 struct StencilPathState { | 385 struct StencilPathState { |
| 365 bool fUseHWAA; | 386 bool fUseHWAA; |
| 366 GrRenderTarget* fRenderTarget; | 387 GrRenderTarget* fRenderTarget; |
| 367 const SkMatrix* fViewMatrix; | 388 const SkMatrix* fViewMatrix; |
| 368 const GrStencilSettings* fStencil; | 389 const GrStencilSettings* fStencil; |
| 369 const GrScissorState* fScissor; | 390 const GrScissorState* fScissor; |
| 370 }; | 391 }; |
| 371 | 392 |
| 372 void stencilPath(const GrPath*, const StencilPathState&); | 393 void stencilPath(const GrPath*, const StencilPathState&); |
| 373 | 394 |
| 374 void drawPath(const GrOptDrawState&, const GrPath*, const GrStencilSettings&
); | 395 void drawPath(const DrawArgs&, const GrPath*, const GrStencilSettings&); |
| 375 void drawPaths(const GrOptDrawState&, | 396 void drawPaths(const DrawArgs&, |
| 376 const GrPathRange*, | 397 const GrPathRange*, |
| 377 const void* indices, | 398 const void* indices, |
| 378 GrDrawTarget::PathIndexType, | 399 GrDrawTarget::PathIndexType, |
| 379 const float transformValues[], | 400 const float transformValues[], |
| 380 GrDrawTarget::PathTransformType, | 401 GrDrawTarget::PathTransformType, |
| 381 int count, | 402 int count, |
| 382 const GrStencilSettings&); | 403 const GrStencilSettings&); |
| 383 | 404 |
| 384 static DrawType PrimTypeToDrawType(GrPrimitiveType type) { | 405 static DrawType PrimTypeToDrawType(GrPrimitiveType type) { |
| 385 switch (type) { | 406 switch (type) { |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 bool canIgnoreRect) = 0; | 460 bool canIgnoreRect) = 0; |
| 440 | 461 |
| 441 | 462 |
| 442 // Overridden by backend specific classes to perform a clear of the stencil
clip bits. This is | 463 // Overridden by backend specific classes to perform a clear of the stencil
clip bits. This is |
| 443 // ONLY used by the the clip target | 464 // ONLY used by the the clip target |
| 444 virtual void onClearStencilClip(GrRenderTarget*, | 465 virtual void onClearStencilClip(GrRenderTarget*, |
| 445 const SkIRect& rect, | 466 const SkIRect& rect, |
| 446 bool insideClip) = 0; | 467 bool insideClip) = 0; |
| 447 | 468 |
| 448 // overridden by backend-specific derived class to perform the draw call. | 469 // overridden by backend-specific derived class to perform the draw call. |
| 449 virtual void onDraw(const GrOptDrawState&, const GrDrawTarget::DrawInfo&) =
0; | 470 virtual void onDraw(const DrawArgs&, const GrDrawTarget::DrawInfo&) = 0; |
| 450 virtual void onStencilPath(const GrPath*, const StencilPathState&) = 0; | 471 virtual void onStencilPath(const GrPath*, const StencilPathState&) = 0; |
| 451 | 472 |
| 452 virtual void onDrawPath(const GrOptDrawState&, const GrPath*, const GrStenci
lSettings&) = 0; | 473 virtual void onDrawPath(const DrawArgs&, const GrPath*, const GrStencilSetti
ngs&) = 0; |
| 453 virtual void onDrawPaths(const GrOptDrawState&, | 474 virtual void onDrawPaths(const DrawArgs&, |
| 454 const GrPathRange*, | 475 const GrPathRange*, |
| 455 const void* indices, | 476 const void* indices, |
| 456 GrDrawTarget::PathIndexType, | 477 GrDrawTarget::PathIndexType, |
| 457 const float transformValues[], | 478 const float transformValues[], |
| 458 GrDrawTarget::PathTransformType, | 479 GrDrawTarget::PathTransformType, |
| 459 int count, | 480 int count, |
| 460 const GrStencilSettings&) = 0; | 481 const GrStencilSettings&) = 0; |
| 461 | 482 |
| 462 // overridden by backend-specific derived class to perform the read pixels. | 483 // overridden by backend-specific derived class to perform the read pixels. |
| 463 virtual bool onReadPixels(GrRenderTarget* target, | 484 virtual bool onReadPixels(GrRenderTarget* target, |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 512 int fGpuTrac
eMarkerCount; | 533 int fGpuTrac
eMarkerCount; |
| 513 GrTraceMarkerSet fActiveT
raceMarkers; | 534 GrTraceMarkerSet fActiveT
raceMarkers; |
| 514 GrTraceMarkerSet fStoredT
raceMarkers; | 535 GrTraceMarkerSet fStoredT
raceMarkers; |
| 515 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu. | 536 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu. |
| 516 GrContext* fContext
; | 537 GrContext* fContext
; |
| 517 | 538 |
| 518 typedef SkRefCnt INHERITED; | 539 typedef SkRefCnt INHERITED; |
| 519 }; | 540 }; |
| 520 | 541 |
| 521 #endif | 542 #endif |
| OLD | NEW |