| /* | |
| * Copyright 2022 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #ifndef skgpu_VulkanBackendContext_DEFINED | |
| #define skgpu_VulkanBackendContext_DEFINED | |
| #include "include/core/SkRefCnt.h" | |
| #include "include/gpu/GpuTypes.h" | |
| #include "include/gpu/vk/VulkanMemoryAllocator.h" | |
| #include "include/gpu/vk/VulkanTypes.h" | |
| #include "include/private/SkAPI.h" | |
| #include "include/private/gpu/vk/SkiaVulkan.h" | |
| #include <cstdint> | |
| namespace skgpu { | |
| class VulkanExtensions; | |
| // The VkBackendContext contains all of the base Vk objects needed by the skia Vulkan context. | |
| struct SK_API VulkanBackendContext { | |
| VkInstance fInstance = VK_NULL_HANDLE; | |
| VkPhysicalDevice fPhysicalDevice = VK_NULL_HANDLE; | |
| VkDevice fDevice = VK_NULL_HANDLE; | |
| VkQueue fQueue = VK_NULL_HANDLE; | |
| uint32_t fGraphicsQueueIndex = 0; | |
| // The max api version set here should match the value set in VkApplicationInfo::apiVersion when | |
| // then VkInstance was created. Skia requires Vulkan 1.1 as the minimum version. | |
| uint32_t fMaxAPIVersion = 0; | |
| const skgpu::VulkanExtensions* fVkExtensions = nullptr; | |
| // The client can create their VkDevice with either a VkPhysicalDeviceFeatures or | |
| // VkPhysicalDeviceFeatures2 struct, thus we have to support taking both. The | |
| // VkPhysicalDeviceFeatures2 struct is needed so we know if the client enabled any extension | |
| // specific features. If fDeviceFeatures2 is not null then we ignore fDeviceFeatures. If both | |
| // fDeviceFeatures and fDeviceFeatures2 are null we will assume no features are enabled. | |
| const VkPhysicalDeviceFeatures* fDeviceFeatures = nullptr; | |
| const VkPhysicalDeviceFeatures2* fDeviceFeatures2 = nullptr; | |
| // The client must provide an inplementation of a VulkanMemoryAllocator for Skia to use | |
| // for allocating Vulkan resources that use VkDeviceMemory. | |
| sk_sp<VulkanMemoryAllocator> fMemoryAllocator; | |
| skgpu::VulkanGetProc fGetProc; | |
| Protected fProtectedContext = Protected::kNo; | |
| // Optional callback which will be invoked if a VK_ERROR_DEVICE_LOST error code is received from | |
| // the driver. Debug information from the driver will be provided to the callback if the | |
| // VK_EXT_device_fault extension is supported and enabled (VkPhysicalDeviceFaultFeaturesEXT must | |
| // be in the pNext chain of VkDeviceCreateInfo). | |
| skgpu::VulkanDeviceLostContext fDeviceLostContext = nullptr; | |
| skgpu::VulkanDeviceLostProc fDeviceLostProc = nullptr; | |
| }; | |
| } // namespace skgpu | |
| #endif // skgpu_VulkanBackendContext_DEFINED |