aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrGpuResourceRef.h
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2014-09-19 11:48:02 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-09-19 11:48:02 -0700
commit45725db1d82615d43408ec488549aec6218f80e4 (patch)
treea4c86b49d5ecdb458420c29d7605eb793f9367b5 /include/gpu/GrGpuResourceRef.h
parent8483326704eff3b6a5fcce3f36d857a9779a4dd2 (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.h49
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