From 93ae2337732bf206e6ef4faecc6b30c3881e8359 Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Fri, 22 Jun 2018 16:50:21 -0400 Subject: 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 Reviewed-by: Brian Salomon Commit-Queue: Greg Daniel --- include/gpu/GrContext.h | 4 --- include/gpu/vk/GrVkBackendContext.h | 55 ++++++------------------------------- 2 files changed, 8 insertions(+), 51 deletions(-) (limited to 'include/gpu') diff --git a/include/gpu/GrContext.h b/include/gpu/GrContext.h index 517e23a627..73bf76a5e3 100644 --- a/include/gpu/GrContext.h +++ b/include/gpu/GrContext.h @@ -71,10 +71,6 @@ public: #ifdef SK_VULKAN static sk_sp MakeVulkan(const GrVkBackendContext&, const GrContextOptions&); static sk_sp 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 MakeVulkan(sk_sp, const GrContextOptions&); - static sk_sp MakeVulkan(sk_sp); #endif #ifdef SK_METAL diff --git a/include/gpu/vk/GrVkBackendContext.h b/include/gpu/vk/GrVkBackendContext.h index e68e27988a..fe018e494f 100644 --- a/include/gpu/vk/GrVkBackendContext.h +++ b/include/gpu/vk/GrVkBackendContext.h @@ -34,9 +34,11 @@ 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) need to be created -// in or transitioned to that family. -struct SK_API GrVkBackendContext : public SkRefCnt { +// 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 { VkInstance fInstance; VkPhysicalDevice fPhysicalDevice; VkDevice fDevice; @@ -48,50 +50,9 @@ struct SK_API GrVkBackendContext : public SkRefCnt { sk_sp fInterface; sk_sp fMemoryAllocator; - /** - * 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; - - /** - * 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; + // 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; }; #endif -- cgit v1.2.3