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

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

Issue 17027003: Add flag bits for partial GrContext reset (Closed)
Patch Set: add flags for partial resetContext Created 7 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
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2011 Google Inc. 3 * Copyright 2011 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 #ifndef GrGpu_DEFINED 10 #ifndef GrGpu_DEFINED
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 GrContext* getContext() { return this->INHERITED::getContext(); } 60 GrContext* getContext() { return this->INHERITED::getContext(); }
61 const GrContext* getContext() const { return this->INHERITED::getContext(); } 61 const GrContext* getContext() const { return this->INHERITED::getContext(); }
62 62
63 /** 63 /**
64 * The GrGpu object normally assumes that no outsider is setting state 64 * The GrGpu object normally assumes that no outsider is setting state
65 * within the underlying 3D API's context/device/whatever. This call informs 65 * within the underlying 3D API's context/device/whatever. This call informs
66 * the GrGpu that the state was modified and it shouldn't make assumptions 66 * the GrGpu that the state was modified and it shouldn't make assumptions
67 * about the state. 67 * about the state.
68 */ 68 */
69 void markContextDirty() { fContextIsDirty = true; } 69 void markContextDirty(GrContext::GrState state = GrContext::kGrState_ALL) {
70 fContextIsDirty = true;
71 fResetBits |= state;
72 }
70 73
71 void unimpl(const char[]); 74 void unimpl(const char[]);
72 75
73 /** 76 /**
74 * Creates a texture object. If desc width or height is not a power of 77 * Creates a texture object. If desc width or height is not a power of
75 * two but underlying API requires a power of two texture then srcData 78 * two but underlying API requires a power of two texture then srcData
76 * will be embedded in a power of two texture. The extra width and height 79 * will be embedded in a power of two texture. The extra width and height
77 * is filled as though srcData were rendered clamped into the texture. 80 * is filled as though srcData were rendered clamped into the texture.
78 * 81 *
79 * If kRenderTarget_TextureFlag is specified the GrRenderTarget is 82 * If kRenderTarget_TextureFlag is specified the GrRenderTarget is
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 void setStencilSettings(const GrStencilSettings& settings) { 327 void setStencilSettings(const GrStencilSettings& settings) {
325 fStencilSettings = settings; 328 fStencilSettings = settings;
326 } 329 }
327 void disableStencil() { fStencilSettings.setDisabled(); } 330 void disableStencil() { fStencilSettings.setDisabled(); }
328 331
329 // GrGpu subclass sets clip bit in the stencil buffer. The subclass is 332 // GrGpu subclass sets clip bit in the stencil buffer. The subclass is
330 // free to clear the remaining bits to zero if masked clears are more 333 // free to clear the remaining bits to zero if masked clears are more
331 // expensive than clearing all bits. 334 // expensive than clearing all bits.
332 virtual void clearStencilClip(const GrIRect& rect, bool insideClip) = 0; 335 virtual void clearStencilClip(const GrIRect& rect, bool insideClip) = 0;
333 336
337 /**
338 * Only reset texture binding
339 */
340 virtual void resetTextureBinding() = 0;
341
334 enum PrivateDrawStateStateBits { 342 enum PrivateDrawStateStateBits {
335 kFirstBit = (GrDrawState::kLastPublicStateBit << 1), 343 kFirstBit = (GrDrawState::kLastPublicStateBit << 1),
336 344
337 kModifyStencilClip_StateBit = kFirstBit, // allows draws to modify 345 kModifyStencilClip_StateBit = kFirstBit, // allows draws to modify
338 // stencil bits used for 346 // stencil bits used for
339 // clipping. 347 // clipping.
340 }; 348 };
341 349
342 protected: 350 protected:
343 enum DrawType { 351 enum DrawType {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 virtual void onSetVertexSourceToArray(const void* vertexArray, int vertexCou nt) SK_OVERRIDE; 427 virtual void onSetVertexSourceToArray(const void* vertexArray, int vertexCou nt) SK_OVERRIDE;
420 virtual void onSetIndexSourceToArray(const void* indexArray, int indexCount) SK_OVERRIDE; 428 virtual void onSetIndexSourceToArray(const void* indexArray, int indexCount) SK_OVERRIDE;
421 virtual void releaseVertexArray() SK_OVERRIDE; 429 virtual void releaseVertexArray() SK_OVERRIDE;
422 virtual void releaseIndexArray() SK_OVERRIDE; 430 virtual void releaseIndexArray() SK_OVERRIDE;
423 virtual void geometrySourceWillPush() SK_OVERRIDE; 431 virtual void geometrySourceWillPush() SK_OVERRIDE;
424 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK _OVERRIDE; 432 virtual void geometrySourceWillPop(const GeometrySrcState& restoredState) SK _OVERRIDE;
425 433
426 434
427 // called when the 3D context state is unknown. Subclass should emit any 435 // called when the 3D context state is unknown. Subclass should emit any
428 // assumed 3D context state and dirty any state cache. 436 // assumed 3D context state and dirty any state cache.
429 virtual void onResetContext() = 0; 437 virtual void onResetContext(int resetBits) = 0;
430 438
431 // overridden by backend-specific derived class to create objects. 439 // overridden by backend-specific derived class to create objects.
432 virtual GrTexture* onCreateTexture(const GrTextureDesc& desc, 440 virtual GrTexture* onCreateTexture(const GrTextureDesc& desc,
433 const void* srcData, 441 const void* srcData,
434 size_t rowBytes) = 0; 442 size_t rowBytes) = 0;
435 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) = 0; 443 virtual GrTexture* onWrapBackendTexture(const GrBackendTextureDesc&) = 0;
436 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge tDesc&) = 0; 444 virtual GrRenderTarget* onWrapBackendRenderTarget(const GrBackendRenderTarge tDesc&) = 0;
437 virtual GrVertexBuffer* onCreateVertexBuffer(uint32_t size, bool dynamic) = 0; 445 virtual GrVertexBuffer* onCreateVertexBuffer(uint32_t size, bool dynamic) = 0;
438 virtual GrIndexBuffer* onCreateIndexBuffer(uint32_t size, bool dynamic) = 0; 446 virtual GrIndexBuffer* onCreateIndexBuffer(uint32_t size, bool dynamic) = 0;
439 virtual GrPath* onCreatePath(const SkPath& path) = 0; 447 virtual GrPath* onCreatePath(const SkPath& path) = 0;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 508
501 // readies the pools to provide vertex/index data. 509 // readies the pools to provide vertex/index data.
502 void prepareVertexPool(); 510 void prepareVertexPool();
503 void prepareIndexPool(); 511 void prepareIndexPool();
504 512
505 void resetContext() { 513 void resetContext() {
506 // We call this because the client may have messed with the 514 // We call this because the client may have messed with the
507 // stencil buffer. Perhaps we should detect whether it is a 515 // stencil buffer. Perhaps we should detect whether it is a
508 // internally created stencil buffer and if so skip the invalidate. 516 // internally created stencil buffer and if so skip the invalidate.
509 fClipMaskManager.invalidateStencilMask(); 517 fClipMaskManager.invalidateStencilMask();
510 this->onResetContext(); 518 this->onResetContext(fResetBits);
519 fResetBits = 0;
511 ++fResetTimestamp; 520 ++fResetTimestamp;
512 } 521 }
513 522
514 void handleDirtyContext() { 523 void handleDirtyContext() {
515 if (fContextIsDirty) { 524 if (fContextIsDirty) {
516 this->resetContext(); 525 this->resetContext();
517 fContextIsDirty = false; 526 fContextIsDirty = false;
518 } 527 }
519 } 528 }
520 529
521 enum { 530 enum {
522 kPreallocGeomPoolStateStackCnt = 4, 531 kPreallocGeomPoolStateStackCnt = 4,
523 }; 532 };
524 typedef SkTInternalLList<GrResource> ResourceList; 533 typedef SkTInternalLList<GrResource> ResourceList;
525 SkSTArray<kPreallocGeomPoolStateStackCnt, GeometryPoolState, true> fGeomPoo lStateStack; 534 SkSTArray<kPreallocGeomPoolStateStackCnt, GeometryPoolState, true> fGeomPoo lStateStack;
526 ResetTimestamp fResetTi mestamp; 535 ResetTimestamp fResetTi mestamp;
527 GrVertexBufferAllocPool* fVertexP ool; 536 GrVertexBufferAllocPool* fVertexP ool;
528 GrIndexBufferAllocPool* fIndexPo ol; 537 GrIndexBufferAllocPool* fIndexPo ol;
529 // counts number of uses of vertex/index pool in the geometry stack 538 // counts number of uses of vertex/index pool in the geometry stack
530 int fVertexP oolUseCnt; 539 int fVertexP oolUseCnt;
531 int fIndexPo olUseCnt; 540 int fIndexPo olUseCnt;
532 // these are mutable so they can be created on-demand 541 // these are mutable so they can be created on-demand
533 mutable GrIndexBuffer* fQuadInd exBuffer; 542 mutable GrIndexBuffer* fQuadInd exBuffer;
534 bool fContext IsDirty; 543 bool fContext IsDirty;
544 int fResetBi ts;
535 // Used to abandon/release all resources created by this GrGpu. TODO: Move t his 545 // Used to abandon/release all resources created by this GrGpu. TODO: Move t his
536 // functionality to GrResourceCache. 546 // functionality to GrResourceCache.
537 ResourceList fResourc eList; 547 ResourceList fResourc eList;
538 548
539 typedef GrDrawTarget INHERITED; 549 typedef GrDrawTarget INHERITED;
540 }; 550 };
541 551
542 #endif 552 #endif
OLDNEW
« include/gpu/GrContext.h ('K') | « src/gpu/GrContext.cpp ('k') | src/gpu/gl/GrGpuGL.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698