Add outline of new GrContext hierarchy
This begins the process of splitting GrContext into:
GrContext_Base, GrImageContext, GrRecordingContext and GrDirectContext.
Change-Id: I3c43045f2a5549b049e95791d65f74d4e16de36f
Reviewed-on: https://skia-review.googlesource.com/c/186878
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp
index 657b7da..b6c8b93 100644
--- a/src/gpu/GrContext.cpp
+++ b/src/gpu/GrContext.cpp
@@ -59,18 +59,8 @@
////////////////////////////////////////////////////////////////////////////////
-static int32_t next_id() {
- static std::atomic<int32_t> nextID{1};
- int32_t id;
- do {
- id = nextID++;
- } while (id == SK_InvalidGenID);
- return id;
-}
-
GrContext::GrContext(GrBackendApi backend, int32_t id)
- : fBackend(backend)
- , fUniqueID(SK_InvalidGenID == id ? next_id() : id) {
+ : INHERITED(backend, id) {
fResourceCache = nullptr;
fResourceProvider = nullptr;
fProxyProvider = nullptr;
@@ -84,7 +74,7 @@
if (fGpu) {
fCaps = fGpu->refCaps();
- fResourceCache = new GrResourceCache(fCaps.get(), &fSingleOwner, fUniqueID);
+ fResourceCache = new GrResourceCache(fCaps.get(), &fSingleOwner, this->uniqueID());
fResourceProvider = new GrResourceProvider(fGpu.get(), fResourceCache, &fSingleOwner,
options.fExplicitlyAllocateGPUResources);
fProxyProvider =
@@ -167,6 +157,10 @@
delete fGlyphCache;
}
+sk_sp<GrContextThreadSafeProxy> GrContext::threadSafeProxy() {
+ return fThreadSafeProxy;
+}
+
//////////////////////////////////////////////////////////////////////////////
void GrContext::abandonContext() {
@@ -1153,7 +1147,7 @@
GR_STATIC_ASSERT(1 == (unsigned)GrBackendApi::kOpenGL);
GR_STATIC_ASSERT(2 == (unsigned)GrBackendApi::kVulkan);
GR_STATIC_ASSERT(3 == (unsigned)GrBackendApi::kMock);
- writer.appendString("backend", kBackendStr[(unsigned)fContext->fBackend]);
+ writer.appendString("backend", kBackendStr[(unsigned)fContext->backend()]);
writer.appendName("caps");
fContext->fCaps->dumpJSON(&writer);