diff options
author | 2014-09-19 11:48:02 -0700 | |
---|---|---|
committer | 2014-09-19 11:48:02 -0700 | |
commit | 45725db1d82615d43408ec488549aec6218f80e4 (patch) | |
tree | a4c86b49d5ecdb458420c29d7605eb793f9367b5 /include/gpu/GrGpuResourceRef.h | |
parent | 8483326704eff3b6a5fcce3f36d857a9779a4dd2 (diff) |
Move IOType to GrGpuRef and rename that to GrIORef. Template GrPendingIORef on IOType.
BUG=skia:2889
R=robertphillips@google.com
Author: bsalomon@google.com
Review URL: https://codereview.chromium.org/579403003
Diffstat (limited to 'include/gpu/GrGpuResourceRef.h')
-rw-r--r-- | include/gpu/GrGpuResourceRef.h | 49 |
1 files changed, 16 insertions, 33 deletions
diff --git a/include/gpu/GrGpuResourceRef.h b/include/gpu/GrGpuResourceRef.h index d178908f93..6b3937b5c7 100644 --- a/include/gpu/GrGpuResourceRef.h +++ b/include/gpu/GrGpuResourceRef.h @@ -8,10 +8,9 @@ #ifndef GrGpuResourceRef_DEFINED #define GrGpuResourceRef_DEFINED +#include "GrGpuResource.h" #include "SkRefCnt.h" -class GrGpuResource; - /** * This class is intended only for internal use in core Gr code. * @@ -37,14 +36,6 @@ class GrGpuResourceRef : SkNoncopyable { public: SK_DECLARE_INST_COUNT_ROOT(GrGpuResourceRef); - enum IOType { - kRead_IOType, - kWrite_IOType, - kRW_IOType, - - kNone_IOType, // For internal use only, don't specify to constructor or setResource(). - }; - ~GrGpuResourceRef(); GrGpuResource* getResource() const { return fResource; } @@ -61,11 +52,11 @@ protected: /** Adopts a ref from the caller. ioType expresses what type of IO operations will be marked as pending on the resource when markPendingIO is called. */ - GrGpuResourceRef(GrGpuResource*, IOType); + GrGpuResourceRef(GrGpuResource*, GrIORef::IOType); /** Adopts a ref from the caller. ioType expresses what type of IO operations will be marked as pending on the resource when markPendingIO is called. */ - void setResource(GrGpuResource*, IOType); + void setResource(GrGpuResource*, GrIORef::IOType); private: /** Called by owning GrProgramElement when the program element is first scheduled for @@ -90,7 +81,7 @@ private: GrGpuResource* fResource; mutable bool fOwnRef; mutable bool fPendingIO; - IOType fIOType; + GrIORef::IOType fIOType; typedef SkNoncopyable INHERITED; }; @@ -104,13 +95,13 @@ public: /** Adopts a ref from the caller. ioType expresses what type of IO operations will be marked as pending on the resource when markPendingIO is called. */ - GrTGpuResourceRef(T* resource, IOType ioType) : INHERITED(resource, ioType) {} + GrTGpuResourceRef(T* resource, GrIORef::IOType ioType) : INHERITED(resource, ioType) {} T* get() const { return static_cast<T*>(this->getResource()); } /** Adopts a ref from the caller. ioType expresses what type of IO operations will be marked as pending on the resource when markPendingIO is called. */ - void set(T* resource, IOType ioType) { this->setResource(resource, ioType); } + void set(T* resource, GrIORef::IOType ioType) { this->setResource(resource, ioType); } private: typedef GrGpuResourceRef INHERITED; @@ -120,22 +111,18 @@ private: * This is similar to GrTGpuResourceRef but can only be in the pending IO state. It never owns a * ref. */ -template <typename T> class GrPendingIOResource : SkNoncopyable { +template <typename T, GrIORef::IOType IO_TYPE> class GrPendingIOResource : SkNoncopyable { public: - typedef GrGpuResourceRef::IOType IOType; - GrPendingIOResource(T* resource, IOType ioType) : fResource(resource), fIOType(ioType) { + GrPendingIOResource(T* resource) : fResource(resource) { if (NULL != fResource) { - switch (fIOType) { - case GrGpuResourceRef::kNone_IOType: - SkFAIL("GrPendingIOResource with neither reads nor writes?"); - break; - case GrGpuResourceRef::kRead_IOType: + switch (IO_TYPE) { + case GrIORef::kRead_IOType: fResource->addPendingRead(); break; - case GrGpuResourceRef::kWrite_IOType: + case GrIORef::kWrite_IOType: fResource->addPendingWrite(); break; - case GrGpuResourceRef::kRW_IOType: + case GrIORef::kRW_IOType: fResource->addPendingRead(); fResource->addPendingWrite(); break; @@ -145,17 +132,14 @@ public: ~GrPendingIOResource() { if (NULL != fResource) { - switch (fIOType) { - case GrGpuResourceRef::kNone_IOType: - SkFAIL("GrPendingIOResource with neither reads nor writes?"); - break; - case GrGpuResourceRef::kRead_IOType: + switch (IO_TYPE) { + case GrIORef::kRead_IOType: fResource->completedRead(); break; - case GrGpuResourceRef::kWrite_IOType: + case GrIORef::kWrite_IOType: fResource->completedWrite(); break; - case GrGpuResourceRef::kRW_IOType: + case GrIORef::kRW_IOType: fResource->completedRead(); fResource->completedWrite(); break; @@ -167,6 +151,5 @@ public: private: T* fResource; - IOType fIOType; }; #endif |