Chromium Code Reviews| Index: include/gpu/GrGpuResourceRef.h |
| diff --git a/include/gpu/GrGpuResourceRef.h b/include/gpu/GrGpuResourceRef.h |
| index 6a72995a2194b76eca4029241496589ee6339962..6b3937b5c73066e393a5110327ec1512e633d12f 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. |
| */ |
|
robertphillips
2014/09/19 13:17:03
This seems very anti-templatey.
bsalomon
2014/09/19 13:32:58
Can you elaborate?
|
| -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; |
| @@ -166,7 +150,6 @@ public: |
| T* get() const { return fResource; } |
| private: |
| - IOType fIOType; |
| T* fResource; |
| }; |
| #endif |