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

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

Issue 2078483002: Start using GrGpuCommandBuffer in GrDrawTarget. (Closed) Base URL: https://skia.googlesource.com/skia.git@memoryWAR
Patch Set: remove errant lines Created 4 years, 6 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.cpp ('k') | src/gpu/GrGpu.cpp » ('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 #ifndef GrGpu_DEFINED 8 #ifndef GrGpu_DEFINED
9 #define GrGpu_DEFINED 9 #define GrGpu_DEFINED
10 10
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 * @param offset offset from the start of the buffer 293 * @param offset offset from the start of the buffer
294 * @param rowBytes number of bytes between consecutive rows. Zero 294 * @param rowBytes number of bytes between consecutive rows. Zero
295 * means rows are tightly packed. 295 * means rows are tightly packed.
296 */ 296 */
297 bool transferPixels(GrSurface* surface, 297 bool transferPixels(GrSurface* surface,
298 int left, int top, int width, int height, 298 int left, int top, int width, int height,
299 GrPixelConfig config, GrBuffer* transferBuffer, 299 GrPixelConfig config, GrBuffer* transferBuffer,
300 size_t offset, size_t rowBytes); 300 size_t offset, size_t rowBytes);
301 301
302 /** 302 /**
303 * Clear the passed in render target. Ignores the draw state and clip.
304 */
305 void clear(const SkIRect& rect, GrColor color, GrRenderTarget* renderTarget) ;
306
307
308 void clearStencilClip(const SkIRect& rect, bool insideClip, GrRenderTarget* renderTarget);
309
310 /**
311 * Discards the contents render target. nullptr indicates that the current r ender target should
312 * be discarded.
313 **/
314 virtual void discard(GrRenderTarget* = nullptr) = 0;
315
316 /**
317 * This is can be called before allocating a texture to be a dst for copySur face. It will 303 * This is can be called before allocating a texture to be a dst for copySur face. It will
318 * populate the origin, config, and flags fields of the desc such that copyS urface can 304 * populate the origin, config, and flags fields of the desc such that copyS urface can
319 * efficiently succeed. It should only succeed if it can allow copySurface t o perform a copy 305 * efficiently succeed. It should only succeed if it can allow copySurface t o perform a copy
320 * that would be more effecient than drawing the src to a dst render target. 306 * that would be more effecient than drawing the src to a dst render target.
321 */ 307 */
322 virtual bool initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* des c) const = 0; 308 virtual bool initCopySurfaceDstDesc(const GrSurface* src, GrSurfaceDesc* des c) const = 0;
323 309
324 // After the client interacts directly with the 3D context state the GrGpu 310 // After the client interacts directly with the 3D context state the GrGpu
325 // must resync its internal state and assumptions about 3D context state. 311 // must resync its internal state and assumptions about 3D context state.
326 // Each time this occurs the GrGpu bumps a timestamp. 312 // Each time this occurs the GrGpu bumps a timestamp.
(...skipping 29 matching lines...) Expand all
356 SkAutoTDeleteArray<const SkPoint> fSampleLocations; 342 SkAutoTDeleteArray<const SkPoint> fSampleLocations;
357 }; 343 };
358 344
359 // Finds a render target's multisample specs. The stencil settings are only needed to flush the 345 // Finds a render target's multisample specs. The stencil settings are only needed to flush the
360 // draw state prior to querying multisample information; they should not hav e any effect on the 346 // draw state prior to querying multisample information; they should not hav e any effect on the
361 // multisample information itself. 347 // multisample information itself.
362 const MultisampleSpecs& getMultisampleSpecs(GrRenderTarget*, const GrStencil Settings&); 348 const MultisampleSpecs& getMultisampleSpecs(GrRenderTarget*, const GrStencil Settings&);
363 349
364 // Creates a GrGpuCommandBuffer in which the GrDrawTarget can send draw comm ands to instead of 350 // Creates a GrGpuCommandBuffer in which the GrDrawTarget can send draw comm ands to instead of
365 // directly to the Gpu object. 351 // directly to the Gpu object.
366 virtual GrGpuCommandBuffer* createCommandBuffer(const GrRenderTarget& target , 352 virtual GrGpuCommandBuffer* createCommandBuffer(
367 GrGpuCommandBuffer::LoadAndS toreOp colorOp, 353 GrRenderTarget* target,
368 GrColor colorClear, 354 const GrGpuCommandBuffer::LoadAndStoreInfo& colorInfo,
369 GrGpuCommandBuffer::LoadAndS toreOp stencilOp, 355 const GrGpuCommandBuffer::LoadAndStoreInfo& stencilInfo) = 0;
370 GrColor stencilClear) = 0;
371
372 // We pass in an array of meshCount GrMesh to the draw. The backend should l oop over each
373 // GrMesh object and emit a draw for it. Each draw will use the same GrPipel ine and
374 // GrPrimitiveProcessor. This may fail if the draw would exceed any resource limits (e.g.
375 // number of vertex attributes is too large).
376 bool draw(const GrPipeline&,
377 const GrPrimitiveProcessor&,
378 const GrMesh*,
379 int meshCount);
380 356
381 // Called by drawtarget when flushing. 357 // Called by drawtarget when flushing.
382 // Provides a hook for post-flush actions (e.g. PLS reset and Vulkan command buffer submits). 358 // Provides a hook for post-flush actions (e.g. PLS reset and Vulkan command buffer submits).
383 virtual void finishDrawTarget() {} 359 virtual void finishDrawTarget() {}
384 360
385 /////////////////////////////////////////////////////////////////////////// 361 ///////////////////////////////////////////////////////////////////////////
386 // Debugging and Stats 362 // Debugging and Stats
387 363
388 class Stats { 364 class Stats {
389 public: 365 public:
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 } 462 }
487 return this->onMakeCopyForTextureParams(texture, params, copyParams); 463 return this->onMakeCopyForTextureParams(texture, params, copyParams);
488 } 464 }
489 465
490 // This is only to be used in GL-specific tests. 466 // This is only to be used in GL-specific tests.
491 virtual const GrGLContext* glContextForTesting() const { return nullptr; } 467 virtual const GrGLContext* glContextForTesting() const { return nullptr; }
492 468
493 // This is only to be used by testing code 469 // This is only to be used by testing code
494 virtual void resetShaderCacheForTesting() const {} 470 virtual void resetShaderCacheForTesting() const {}
495 471
472 void handleDirtyContext() {
473 if (fResetBits) {
474 this->resetContext();
475 }
476 }
477
496 protected: 478 protected:
497 static void ElevateDrawPreference(GrGpu::DrawPreference* preference, 479 static void ElevateDrawPreference(GrGpu::DrawPreference* preference,
498 GrGpu::DrawPreference elevation) { 480 GrGpu::DrawPreference elevation) {
499 GR_STATIC_ASSERT(GrGpu::kCallerPrefersDraw_DrawPreference > GrGpu::kNoDr aw_DrawPreference); 481 GR_STATIC_ASSERT(GrGpu::kCallerPrefersDraw_DrawPreference > GrGpu::kNoDr aw_DrawPreference);
500 GR_STATIC_ASSERT(GrGpu::kGpuPrefersDraw_DrawPreference > 482 GR_STATIC_ASSERT(GrGpu::kGpuPrefersDraw_DrawPreference >
501 GrGpu::kCallerPrefersDraw_DrawPreference); 483 GrGpu::kCallerPrefersDraw_DrawPreference);
502 GR_STATIC_ASSERT(GrGpu::kRequireDraw_DrawPreference > 484 GR_STATIC_ASSERT(GrGpu::kRequireDraw_DrawPreference >
503 GrGpu::kGpuPrefersDraw_DrawPreference); 485 GrGpu::kGpuPrefersDraw_DrawPreference);
504 *preference = SkTMax(*preference, elevation); 486 *preference = SkTMax(*preference, elevation);
505 } 487 }
506 488
507 void handleDirtyContext() {
508 if (fResetBits) {
509 this->resetContext();
510 }
511 }
512
513 // Handles cases where a surface will be updated without a call to flushRend erTarget 489 // Handles cases where a surface will be updated without a call to flushRend erTarget
514 void didWriteToSurface(GrSurface* surface, const SkIRect* bounds, uint32_t m ipLevels = 1) const; 490 void didWriteToSurface(GrSurface* surface, const SkIRect* bounds, uint32_t m ipLevels = 1) const;
515 491
516 Stats fStats; 492 Stats fStats;
517 SkAutoTDelete<GrPathRendering> fPathRendering; 493 SkAutoTDelete<GrPathRendering> fPathRendering;
518 // Subclass must initialize this in its constructor. 494 // Subclass must initialize this in its constructor.
519 SkAutoTUnref<const GrCaps> fCaps; 495 SkAutoTUnref<const GrCaps> fCaps;
520 496
521 private: 497 private:
522 // called when the 3D context state is unknown. Subclass should emit any 498 // called when the 3D context state is unknown. Subclass should emit any
(...skipping 13 matching lines...) Expand all
536 SkBudgeted budgeted, 512 SkBudgeted budgeted,
537 const SkTArray<GrMipLevel>& tex els) = 0; 513 const SkTArray<GrMipLevel>& tex els) = 0;
538 514
539 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&, GrWrapO wnership) = 0; 515 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&, GrWrapO wnership) = 0;
540 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge tDesc&, 516 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge tDesc&,
541 GrWrapOwnership) = 0; 517 GrWrapOwnership) = 0;
542 virtual GrRenderTarget* onWrapBackendTextureAsRenderTarget(const GrBackendTe xtureDesc&) = 0; 518 virtual GrRenderTarget* onWrapBackendTextureAsRenderTarget(const GrBackendTe xtureDesc&) = 0;
543 virtual GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrA ccessPattern, 519 virtual GrBuffer* onCreateBuffer(size_t size, GrBufferType intendedType, GrA ccessPattern,
544 const void* data) = 0; 520 const void* data) = 0;
545 521
546 // overridden by backend-specific derived class to perform the clear.
547 virtual void onClear(GrRenderTarget*, const SkIRect& rect, GrColor color) = 0;
548
549 // Overridden by backend specific classes to perform a clear of the stencil clip bits. This is
550 // ONLY used by the the clip target
551 virtual void onClearStencilClip(GrRenderTarget*, const SkIRect& rect, bool i nsideClip) = 0;
552
553 // overridden by backend-specific derived class to perform the draw call.
554 virtual void onDraw(const GrPipeline&,
555 const GrPrimitiveProcessor&,
556 const GrMesh*,
557 int meshCount) = 0;
558
559 virtual bool onMakeCopyForTextureParams(GrTexture* texture, const GrTextureP arams&, 522 virtual bool onMakeCopyForTextureParams(GrTexture* texture, const GrTextureP arams&,
560 GrTextureProducer::CopyParams*) cons t { return false; } 523 GrTextureProducer::CopyParams*) cons t { return false; }
561 524
562 virtual bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int r eadHeight, 525 virtual bool onGetReadPixelsInfo(GrSurface* srcSurface, int readWidth, int r eadHeight,
563 size_t rowBytes, GrPixelConfig readConfig, DrawPreference*, 526 size_t rowBytes, GrPixelConfig readConfig, DrawPreference*,
564 ReadPixelTempDrawInfo*) = 0; 527 ReadPixelTempDrawInfo*) = 0;
565 virtual bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int heig ht, 528 virtual bool onGetWritePixelsInfo(GrSurface* dstSurface, int width, int heig ht,
566 GrPixelConfig srcConfig, DrawPreference*, 529 GrPixelConfig srcConfig, DrawPreference*,
567 WritePixelTempDrawInfo*) = 0; 530 WritePixelTempDrawInfo*) = 0;
568 531
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 SkTArray<const MultisampleSpecs*, true> fMultisa mpleSpecsMap; 575 SkTArray<const MultisampleSpecs*, true> fMultisa mpleSpecsMap;
613 GrTAllocator<MultisampleSpecs> fMultisa mpleSpecsAllocator; 576 GrTAllocator<MultisampleSpecs> fMultisa mpleSpecsAllocator;
614 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu. 577 // The context owns us, not vice-versa, so this ptr is not ref'ed by Gpu.
615 GrContext* fContext ; 578 GrContext* fContext ;
616 579
617 friend class GrPathRendering; 580 friend class GrPathRendering;
618 typedef SkRefCnt INHERITED; 581 typedef SkRefCnt INHERITED;
619 }; 582 };
620 583
621 #endif 584 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.cpp ('k') | src/gpu/GrGpu.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698