aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/gpu/GrResourceKey.h
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2015-05-04 08:09:30 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-05-04 08:09:30 -0700
commitab622c7b8cc8c39f0a594e4392b9e31b7e1ddb26 (patch)
tree37f3f06f49ac232382c691d09df3a8da0aada0ba /include/gpu/GrResourceKey.h
parentf15132fdcf5aabb874f1c151a872efe54ee95118 (diff)
Move instanced index buffer creation to flush time
Diffstat (limited to 'include/gpu/GrResourceKey.h')
-rw-r--r--include/gpu/GrResourceKey.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/gpu/GrResourceKey.h b/include/gpu/GrResourceKey.h
index aecdc70c0b..50a7145929 100644
--- a/include/gpu/GrResourceKey.h
+++ b/include/gpu/GrResourceKey.h
@@ -10,6 +10,7 @@
#define GrResourceKey_DEFINED
#include "GrTypes.h"
+#include "SkOnce.h"
#include "SkTemplates.h"
uint32_t GrResourceKeyHash(const uint32_t* data, size_t size);
@@ -266,6 +267,24 @@ public:
};
};
+/**
+ * It is common to need a frequently reused GrUniqueKey where the only requirement is that the key
+ * is unique. These macros create such a key in a thread safe manner so the key can be truly global
+ * and only constructed once.
+ */
+
+/** Place outside of function/class definitions. */
+#define GR_DECLARE_STATIC_UNIQUE_KEY(name) SK_DECLARE_STATIC_ONCE(name##_once)
+
+/** Place inside function where the key is used. */
+#define GR_DEFINE_STATIC_UNIQUE_KEY(name) \
+ static GrUniqueKey name; \
+ SkOnce(&name##_once, gr_init_static_unique_key_once, &name)
+
+static inline void gr_init_static_unique_key_once(GrUniqueKey* key) {
+ GrUniqueKey::Builder builder(key, GrUniqueKey::GenerateDomain(), 0);
+}
+
// The cache listens for these messages to purge junk resources proactively.
class GrUniqueKeyInvalidatedMessage {
public: