/* * 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_graphite_VulkanSharedContext_DEFINED #define skgpu_graphite_VulkanSharedContext_DEFINED #include "src/gpu/graphite/SharedContext.h" #include "include/gpu/vk/VulkanTypes.h" #include "src/gpu/graphite/vk/VulkanCaps.h" namespace skgpu { struct VulkanBackendContext; struct VulkanInterface; class VulkanMemoryAllocator; } namespace skgpu::graphite { struct ContextOptions; class VulkanCaps; class VulkanSharedContext final : public SharedContext { public: static sk_sp Make(const VulkanBackendContext&, const ContextOptions&); ~VulkanSharedContext() override; const VulkanCaps& vulkanCaps() const { return static_cast(*this->caps()); } const skgpu::VulkanInterface* interface() const { return fInterface.get(); } skgpu::VulkanMemoryAllocator* memoryAllocator() const { return fMemoryAllocator.get(); } VkDevice device() const { return fDevice; } uint32_t queueIndex() const { return fQueueIndex; } std::unique_ptr makeResourceProvider(SingleOwner*) override; bool checkVkResult(VkResult result) const; private: VulkanSharedContext(const VulkanBackendContext&, sk_sp interface, sk_sp memoryAllocator, std::unique_ptr caps); sk_sp fInterface; sk_sp fMemoryAllocator; VkDevice fDevice; uint32_t fQueueIndex; }; } // namespace skgpu::graphite #endif // skgpu_graphite_VulkanSharedContext_DEFINED