| 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 "GrPipelineBuilder.h" | 11 #include "GrPipelineBuilder.h" |
| 12 #include "GrProgramDesc.h" | 12 #include "GrProgramDesc.h" |
| 13 #include "GrStencil.h" | 13 #include "GrStencil.h" |
| 14 #include "GrSwizzle.h" | 14 #include "GrSwizzle.h" |
| 15 #include "GrAllocator.h" | 15 #include "GrAllocator.h" |
| 16 #include "GrTextureParamsAdjuster.h" | 16 #include "GrTextureParamsAdjuster.h" |
| 17 #include "GrTypes.h" | 17 #include "GrTypes.h" |
| 18 #include "GrXferProcessor.h" | 18 #include "GrXferProcessor.h" |
| 19 #include "SkPath.h" | 19 #include "SkPath.h" |
| 20 #include "SkTArray.h" | 20 #include "SkTArray.h" |
| 21 | 21 |
| 22 class GrBatchTracker; | 22 class GrBatchTracker; |
| 23 class GrContext; | 23 class GrContext; |
| 24 class GrGLContext; | 24 class GrGLContext; |
| 25 class GrIndexBuffer; | 25 class GrIndexBuffer; |
| 26 class GrMesh; |
| 26 class GrNonInstancedVertices; | 27 class GrNonInstancedVertices; |
| 27 class GrPath; | 28 class GrPath; |
| 28 class GrPathRange; | 29 class GrPathRange; |
| 29 class GrPathRenderer; | 30 class GrPathRenderer; |
| 30 class GrPathRendererChain; | 31 class GrPathRendererChain; |
| 31 class GrPathRendering; | 32 class GrPathRendering; |
| 32 class GrPipeline; | 33 class GrPipeline; |
| 33 class GrPrimitiveProcessor; | 34 class GrPrimitiveProcessor; |
| 34 class GrRenderTarget; | 35 class GrRenderTarget; |
| 35 class GrStencilAttachment; | 36 class GrStencilAttachment; |
| 36 class GrSurface; | 37 class GrSurface; |
| 37 class GrTexture; | 38 class GrTexture; |
| 38 class GrTransferBuffer; | 39 class GrTransferBuffer; |
| 39 class GrVertexBuffer; | 40 class GrVertexBuffer; |
| 40 class GrVertices; | |
| 41 | 41 |
| 42 class GrGpu : public SkRefCnt { | 42 class GrGpu : public SkRefCnt { |
| 43 public: | 43 public: |
| 44 /** | 44 /** |
| 45 * Create an instance of GrGpu that matches the specified backend. If the re
quested backend is | 45 * Create an instance of GrGpu that matches the specified backend. If the re
quested backend is |
| 46 * not supported (at compile-time or run-time) this returns nullptr. The con
text will not be | 46 * not supported (at compile-time or run-time) this returns nullptr. The con
text will not be |
| 47 * fully constructed and should not be used by GrGpu until after this functi
on returns. | 47 * fully constructed and should not be used by GrGpu until after this functi
on returns. |
| 48 */ | 48 */ |
| 49 static GrGpu* Create(GrBackend, GrBackendContext, const GrContextOptions&, G
rContext* context); | 49 static GrGpu* Create(GrBackend, GrBackendContext, const GrContextOptions&, G
rContext* context); |
| 50 | 50 |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 346 // a billion years. | 346 // a billion years. |
| 347 typedef uint64_t ResetTimestamp; | 347 typedef uint64_t ResetTimestamp; |
| 348 | 348 |
| 349 // This timestamp is always older than the current timestamp | 349 // This timestamp is always older than the current timestamp |
| 350 static const ResetTimestamp kExpiredTimestamp = 0; | 350 static const ResetTimestamp kExpiredTimestamp = 0; |
| 351 // Returns a timestamp based on the number of times the context was reset. | 351 // Returns a timestamp based on the number of times the context was reset. |
| 352 // This timestamp can be used to lazily detect when cached 3D context state | 352 // This timestamp can be used to lazily detect when cached 3D context state |
| 353 // is dirty. | 353 // is dirty. |
| 354 ResetTimestamp getResetTimestamp() const { return fResetTimestamp; } | 354 ResetTimestamp getResetTimestamp() const { return fResetTimestamp; } |
| 355 | 355 |
| 356 virtual void buildProgramDesc(GrProgramDesc*, | |
| 357 const GrPrimitiveProcessor&, | |
| 358 const GrPipeline&) const = 0; | |
| 359 | |
| 360 // Called to perform a surface to surface copy. Fallbacks to issuing a draw
from the src to dst | 356 // Called to perform a surface to surface copy. Fallbacks to issuing a draw
from the src to dst |
| 361 // take place at the GrDrawTarget level and this function implement faster c
opy paths. The rect | 357 // take place at the GrDrawTarget level and this function implement faster c
opy paths. The rect |
| 362 // and point are pre-clipped. The src rect and implied dst rect are guarante
ed to be within the | 358 // and point are pre-clipped. The src rect and implied dst rect are guarante
ed to be within the |
| 363 // src/dst bounds and non-empty. | 359 // src/dst bounds and non-empty. |
| 364 bool copySurface(GrSurface* dst, | 360 bool copySurface(GrSurface* dst, |
| 365 GrSurface* src, | 361 GrSurface* src, |
| 366 const SkIRect& srcRect, | 362 const SkIRect& srcRect, |
| 367 const SkIPoint& dstPoint); | 363 const SkIPoint& dstPoint); |
| 368 | 364 |
| 369 struct MultisampleSpecs { | 365 struct MultisampleSpecs { |
| 370 // Nonzero ID that uniquely identifies these multisample specs. | 366 // Nonzero ID that uniquely identifies these multisample specs. |
| 371 uint8_t fUniqueID; | 367 uint8_t fUniqueID; |
| 372 // The actual number of samples the GPU will run. NOTE: this value can b
e greater than the | 368 // The actual number of samples the GPU will run. NOTE: this value can b
e greater than the |
| 373 // the render target's sample count. | 369 // the render target's sample count. |
| 374 int fEffectiveSampleCnt; | 370 int fEffectiveSampleCnt; |
| 375 // If sample locations are supported, contains the subpixel locations at
which the GPU will | 371 // If sample locations are supported, contains the subpixel locations at
which the GPU will |
| 376 // sample. Pixel center is at (.5, .5) and (0, 0) indicates the top left
corner. | 372 // sample. Pixel center is at (.5, .5) and (0, 0) indicates the top left
corner. |
| 377 SkAutoTDeleteArray<const SkPoint> fSampleLocations; | 373 SkAutoTDeleteArray<const SkPoint> fSampleLocations; |
| 378 }; | 374 }; |
| 379 | 375 |
| 380 // Finds a render target's multisample specs. The stencil settings are only
needed to flush the | 376 // Finds a render target's multisample specs. The stencil settings are only
needed to flush the |
| 381 // draw state prior to querying multisample information; they should not hav
e any effect on the | 377 // draw state prior to querying multisample information; they should not hav
e any effect on the |
| 382 // multisample information itself. | 378 // multisample information itself. |
| 383 const MultisampleSpecs& getMultisampleSpecs(GrRenderTarget*, const GrStencil
Settings&); | 379 const MultisampleSpecs& getMultisampleSpecs(GrRenderTarget*, const GrStencil
Settings&); |
| 384 | 380 |
| 385 struct DrawArgs { | 381 // We pass in an array of meshCount GrMesh to the draw. The backend should l
oop over each |
| 386 DrawArgs(const GrPrimitiveProcessor* primProc, | 382 // GrMesh object and emit a draw for it. Each draw will use the same GrPipel
ine and |
| 387 const GrPipeline* pipeline, | 383 // GrPrimitiveProcessor. |
| 388 const GrProgramDesc* desc) | 384 void draw(const GrPipeline&, |
| 389 : fPrimitiveProcessor(primProc) | 385 const GrPrimitiveProcessor&, |
| 390 , fPipeline(pipeline) | 386 const GrMesh*, |
| 391 , fDesc(desc) { | 387 int meshCount); |
| 392 SkASSERT(primProc && pipeline && desc); | |
| 393 } | |
| 394 const GrPrimitiveProcessor* fPrimitiveProcessor; | |
| 395 const GrPipeline* fPipeline; | |
| 396 const GrProgramDesc* fDesc; | |
| 397 }; | |
| 398 | |
| 399 void draw(const DrawArgs&, const GrVertices&); | |
| 400 | 388 |
| 401 // Called by drawtarget when flushing. | 389 // Called by drawtarget when flushing. |
| 402 // Provides a hook for post-flush actions (e.g. PLS reset and Vulkan command
buffer submits). | 390 // Provides a hook for post-flush actions (e.g. PLS reset and Vulkan command
buffer submits). |
| 403 virtual void finishDrawTarget() {} | 391 virtual void finishDrawTarget() {} |
| 404 | 392 |
| 405 /////////////////////////////////////////////////////////////////////////// | 393 /////////////////////////////////////////////////////////////////////////// |
| 406 // Debugging and Stats | 394 // Debugging and Stats |
| 407 | 395 |
| 408 class Stats { | 396 class Stats { |
| 409 public: | 397 public: |
| (...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 GrWrapOwnership) = 0; | 552 GrWrapOwnership) = 0; |
| 565 virtual GrRenderTarget* onWrapBackendTextureAsRenderTarget(const GrBackendTe
xtureDesc&, | 553 virtual GrRenderTarget* onWrapBackendTextureAsRenderTarget(const GrBackendTe
xtureDesc&, |
| 566 GrWrapOwnership)
= 0; | 554 GrWrapOwnership)
= 0; |
| 567 virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) = 0; | 555 virtual GrVertexBuffer* onCreateVertexBuffer(size_t size, bool dynamic) = 0; |
| 568 virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) = 0; | 556 virtual GrIndexBuffer* onCreateIndexBuffer(size_t size, bool dynamic) = 0; |
| 569 virtual GrTransferBuffer* onCreateTransferBuffer(size_t size, TransferType t
ype) = 0; | 557 virtual GrTransferBuffer* onCreateTransferBuffer(size_t size, TransferType t
ype) = 0; |
| 570 | 558 |
| 571 // overridden by backend-specific derived class to perform the clear. | 559 // overridden by backend-specific derived class to perform the clear. |
| 572 virtual void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) =
0; | 560 virtual void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) =
0; |
| 573 | 561 |
| 574 | |
| 575 // Overridden by backend specific classes to perform a clear of the stencil
clip bits. This is | 562 // Overridden by backend specific classes to perform a clear of the stencil
clip bits. This is |
| 576 // ONLY used by the the clip target | 563 // ONLY used by the the clip target |
| 577 virtual void onClearStencilClip(GrRenderTarget*, const SkIRect& rect, bool i
nsideClip) = 0; | 564 virtual void onClearStencilClip(GrRenderTarget*, const SkIRect& rect, bool i
nsideClip) = 0; |
| 578 | 565 |
| 579 // overridden by backend-specific derived class to perform the draw call. | 566 // overridden by backend-specific derived class to perform the draw call. |
| 580 virtual void onDraw(const DrawArgs&, const GrNonInstancedVertices&) = 0; | 567 virtual void onDraw(const GrPipeline&, |
| 568 const GrPrimitiveProcessor&, |
| 569 const GrMesh*, |
| 570 int meshCount) = 0; |
| 581 | 571 |
| 582 virtual bool onMakeCopyForTextureParams(GrTexture* texture, const GrTextureP
arams&, | 572 virtual bool onMakeCopyForTextureParams(GrTexture* texture, const GrTextureP
arams&, |
| 583 GrTextureProducer::CopyParams*) cons
t { return false; } | 573 GrTextureProducer::CopyParams*) cons
t { return false; } |
| 584 | 574 |
| 585 virtual bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int r
eadHeight, | 575 virtual bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int r
eadHeight, |
| 586 size_t rowBytes, GrPixelConfig readConfig,
DrawPreference*, | 576 size_t rowBytes, GrPixelConfig readConfig,
DrawPreference*, |
| 587 ReadPixelTempDrawInfo*) = 0; | 577 ReadPixelTempDrawInfo*) = 0; |
| 588 virtual bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int heig
ht, | 578 virtual bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int heig
ht, |
| 589 GrPixelConfig srcConfig, DrawPreference*, | 579 GrPixelConfig srcConfig, DrawPreference*, |
| 590 WritePixelTempDrawInfo*) = 0; | 580 WritePixelTempDrawInfo*) = 0; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 635 SkTArray<const MultisampleSpecs*, true> fMultisa
mpleSpecsMap; | 625 SkTArray<const MultisampleSpecs*, true> fMultisa
mpleSpecsMap; |
| 636 GrTAllocator<MultisampleSpecs> fMultisa
mpleSpecsAllocator; | 626 GrTAllocator<MultisampleSpecs> fMultisa
mpleSpecsAllocator; |
| 637 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu. | 627 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu. |
| 638 GrContext* fContext
; | 628 GrContext* fContext
; |
| 639 | 629 |
| 640 friend class GrPathRendering; | 630 friend class GrPathRendering; |
| 641 typedef SkRefCnt INHERITED; | 631 typedef SkRefCnt INHERITED; |
| 642 }; | 632 }; |
| 643 | 633 |
| 644 #endif | 634 #endif |
| OLD | NEW |