Index: include/gpu/GrProgramResource.h |
diff --git a/include/gpu/GrProgramResource.h b/include/gpu/GrProgramResource.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..277ae9dc620c6175a05d294a561091248deed5fa |
--- /dev/null |
+++ b/include/gpu/GrProgramResource.h |
@@ -0,0 +1,73 @@ |
+/* |
+ * Copyright 2014 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+#ifndef GrProgramResource_DEFINED |
+#define GrProgramResource_DEFINED |
+ |
+#include "SkRefCnt.h" |
+ |
+class GrGpuResource; |
+ |
+/** |
+ * Class that wraps a resource referenced by a GrProgramElement or GrDrawState. It manages |
+ * converting refs to pending io operations. Like SkAutoTUnref, its constructor and setter adopt |
+ * a ref from their caller. This class is intended only for internal use in core Gr code. |
+ */ |
+class GrProgramResource : SkNoncopyable { |
+public: |
+ enum IOType { |
+ kRead_IOType, |
+ kWrite_IOType, |
+ kRW_IOType, |
+ |
+ kNone_IOType, // For internal use only, don't specify to constructor or setResource(). |
+ }; |
+ |
+ SK_DECLARE_INST_COUNT_ROOT(GrProgramResource); |
+ GrProgramResource(); |
+ |
+ /** 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. */ |
+ explicit GrProgramResource(GrGpuResource*, IOType ioType); |
+ |
+ ~GrProgramResource(); |
+ |
+ GrGpuResource* getResource() const { return fResource; } |
+ |
+ /** 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 ioType); |
+ |
+ /** Does this object own a pending read or write on the resource it is wrapping. */ |
+ bool ownsPendingIO() const { return fPendingIO; } |
+ |
+ /** Shortcut for calling setResource() with NULL. It cannot be called after markingPendingIO |
+ is called. */ |
+ void reset(); |
+ |
+private: |
+ /** Called by owning GrProgramElement when the program element is first scheduled for |
+ execution. */ |
+ void markPendingIO() const; |
+ |
+ /** Called when the program element/draw state is no longer owned by GrDrawTarget-client code. |
+ This lets the cache know that the drawing code will no longer schedule additional reads or |
+ writes to the resource using the program element or draw state. */ |
+ void removeRef() const; |
+ |
+ friend class GrDrawState; |
+ friend class GrProgramElement; |
+ |
+ GrGpuResource* fResource; |
+ mutable bool fOwnRef; |
+ mutable bool fPendingIO; |
+ IOType fIOType; |
+ |
+ typedef SkNoncopyable INHERITED; |
+}; |
+ |
+#endif |