diff options
author | Greg Daniel <egdaniel@google.com> | 2018-06-28 23:31:00 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-06-28 23:34:52 +0000 |
commit | 007267bdb54d56ec978c97c6a6944afc2b6ff40b (patch) | |
tree | bf32945463a4c9345e0236b188e2f62ec902bd78 /include/gpu | |
parent | 3148f802af419297c466e6bf5efc003b6c498f0a (diff) |
Revert "Reland "Make GrVkBackendContext no longer derive from SkRefCnt.""
This reverts commit 0db3a8846a4d05d55c36b7fa95fa6fbc1a6639cd.
Reason for revert: fuchsia change reverted
Original change's description:
> Reland "Make GrVkBackendContext no longer derive from SkRefCnt."
>
> This reverts commit 059a9ab4bcd07a4bfdbfef333c27ef3d277e0e46.
>
> Reason for revert: Fix landed in Fuchsia
>
> Original change's description:
> > Revert "Make GrVkBackendContext no longer derive from SkRefCnt."
> >
> > This reverts commit 93ae2337732bf206e6ef4faecc6b30c3881e8359.
> >
> > Reason for revert: <INSERT REASONING HERE>
> >
> > Original change's description:
> > > Make GrVkBackendContext no longer derive from SkRefCnt.
> > >
> > > Also moves the helper Create functions to VkTestUtils since no clients
> > > are using them anymore.
> > >
> > > Bug: skia:
> > > Change-Id: I7e8e4912e7ef6fb00a7e2a00407aed5e83211799
> > > Reviewed-on: https://skia-review.googlesource.com/135323
> > > Reviewed-by: Jim Van Verth <jvanverth@google.com>
> > > Reviewed-by: Brian Salomon <bsalomon@google.com>
> > > Commit-Queue: Greg Daniel <egdaniel@google.com>
> >
> > TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
> >
> > # Not skipping CQ checks because original CL landed > 1 day ago.
> >
> > Bug: skia:
> > Change-Id: If7201917631dc22753ea3fa6e9d2984463e38e4c
> > Reviewed-on: https://skia-review.googlesource.com/137903
> > Reviewed-by: Greg Daniel <egdaniel@google.com>
> > Commit-Queue: Greg Daniel <egdaniel@google.com>
>
> TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
>
> # Not skipping CQ checks because original CL landed > 1 day ago.
>
> Bug: skia:
> Change-Id: Ia4b7c0bb2c7b5dba809d85c69f0b41b473140526
> Reviewed-on: https://skia-review.googlesource.com/138181
> Reviewed-by: Greg Daniel <egdaniel@google.com>
> Commit-Queue: Greg Daniel <egdaniel@google.com>
TBR=egdaniel@google.com,jvanverth@google.com,bsalomon@google.com
Change-Id: I3f7bc4a5e4e09512fe165303685c123ec3527e58
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/138422
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'include/gpu')
-rw-r--r-- | include/gpu/GrContext.h | 4 | ||||
-rw-r--r-- | include/gpu/vk/GrVkBackendContext.h | 55 |
2 files changed, 51 insertions, 8 deletions
diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index c1804e00ff..565a3d504f 100644 --- a/include/gpu/GrContext.h +++ b/include/gpu/GrContext.h @@ -71,6 +71,10 @@ public: #ifdef SK_VULKAN static sk_sp<GrContext> MakeVulkan(const GrVkBackendContext&, const GrContextOptions&); static sk_sp<GrContext> MakeVulkan(const GrVkBackendContext&); + // These calls that take an sk_sp GrVkBackendContext are deprecated. Use the previous calls and + // set fOwnsInstanceAndDevice to false on the GrVkBackendContext. + static sk_sp<GrContext> MakeVulkan(sk_sp<const GrVkBackendContext>, const GrContextOptions&); + static sk_sp<GrContext> MakeVulkan(sk_sp<const GrVkBackendContext>); #endif #ifdef SK_METAL diff --git a/include/gpu/vk/GrVkBackendContext.h b/include/gpu/vk/GrVkBackendContext.h index fe018e494f..e68e27988a 100644 --- a/include/gpu/vk/GrVkBackendContext.h +++ b/include/gpu/vk/GrVkBackendContext.h @@ -34,11 +34,9 @@ enum GrVkFeatureFlags { // is that the client will set these up and pass them to the GrVkGpu constructor. The VkDevice // created must support at least one graphics queue, which is passed in as well. // The QueueFamilyIndex must match the family of the given queue. It is needed for CommandPool -// creation, and any GrBackendObjects handed to us (e.g., for wrapped textures) needs to be created -// in or transitioned to that family. The refs held by members of this struct must be released -// (either by deleting the struct or manually releasing the refs) before the underlying vulkan -// device and instance are destroyed. -struct SK_API GrVkBackendContext { +// creation, and any GrBackendObjects handed to us (e.g., for wrapped textures) need to be created +// in or transitioned to that family. +struct SK_API GrVkBackendContext : public SkRefCnt { VkInstance fInstance; VkPhysicalDevice fPhysicalDevice; VkDevice fDevice; @@ -50,9 +48,50 @@ struct SK_API GrVkBackendContext { sk_sp<const GrVkInterface> fInterface; sk_sp<GrVkMemoryAllocator> fMemoryAllocator; - // This is deprecated and should be set to false. The client is responsible for managing the - // lifetime of the VkInstance and VkDevice objects. - bool fOwnsInstanceAndDevice = false; + /** + * Controls whether this object destroys the instance and device upon destruction. The default + * is temporarily 'true' to avoid breaking existing clients but will be changed to 'false'. + */ + bool fOwnsInstanceAndDevice = true; + +#if GR_TEST_UTILS || defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) + using CanPresentFn = std::function<bool(VkInstance, VkPhysicalDevice, + uint32_t queueFamilyIndex)>; + + /** + * Helper function to create the Vulkan objects needed for a Vulkan-backed GrContext. + * Note that the version that uses the unified "GetProc" instead of separate "GetInstanceProc" + * and "GetDeviceProc" functions will be removed. + * + * If presentQueueIndex is non-NULL, will try to set up presentQueue as part of device + * creation using the platform-specific canPresent() function. + * + * This will set fOwnsInstanceAndDevice to 'true'. If it is subsequently set to 'false' then + * the client owns the lifetime of the created VkDevice and VkInstance. + */ + static const GrVkBackendContext* Create(uint32_t* presentQueueIndex = nullptr, + CanPresentFn = CanPresentFn(), + GrVkInterface::GetProc getProc = nullptr); + + static const GrVkBackendContext* Create(const GrVkInterface::GetInstanceProc& getInstanceProc, + const GrVkInterface::GetDeviceProc& getDeviceProc, + uint32_t* presentQueueIndex = nullptr, + CanPresentFn canPresent = CanPresentFn()) { + if (!getInstanceProc || !getDeviceProc) { + return nullptr; + } + auto getProc = [&getInstanceProc, &getDeviceProc](const char* proc_name, + VkInstance instance, VkDevice device) { + if (device != VK_NULL_HANDLE) { + return getDeviceProc(device, proc_name); + } + return getInstanceProc(instance, proc_name); + }; + return Create(presentQueueIndex, canPresent, getProc); + } +#endif // GR_TEST_UTILS || defined(SK_BUILD_FOR_ANDROID_FRAMEWORK) + + ~GrVkBackendContext() override; }; #endif |