/src/skia/src/gpu/graphite/vk/VulkanSharedContext.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright 2022 Google LLC |
3 | | * |
4 | | * Use of this source code is governed by a BSD-style license that can be |
5 | | * found in the LICENSE file. |
6 | | */ |
7 | | |
8 | | #ifndef skgpu_graphite_VulkanSharedContext_DEFINED |
9 | | #define skgpu_graphite_VulkanSharedContext_DEFINED |
10 | | |
11 | | #include "include/private/base/SkMutex.h" |
12 | | #include "src/gpu/graphite/SharedContext.h" |
13 | | |
14 | | #include "include/gpu/vk/VulkanTypes.h" |
15 | | #include "src/gpu/graphite/vk/VulkanCaps.h" |
16 | | |
17 | | namespace skgpu { |
18 | | struct VulkanBackendContext; |
19 | | struct VulkanInterface; |
20 | | class VulkanMemoryAllocator; |
21 | | } |
22 | | |
23 | | namespace skgpu::graphite { |
24 | | |
25 | | struct ContextOptions; |
26 | | class VulkanCaps; |
27 | | |
28 | | class VulkanSharedContext final : public SharedContext { |
29 | | public: |
30 | | static sk_sp<SharedContext> Make(const VulkanBackendContext&, const ContextOptions&); |
31 | | ~VulkanSharedContext() override; |
32 | | |
33 | 0 | const VulkanCaps& vulkanCaps() const { return static_cast<const VulkanCaps&>(*this->caps()); } |
34 | | |
35 | 0 | const skgpu::VulkanInterface* interface() const { return fInterface.get(); } |
36 | | |
37 | 0 | skgpu::VulkanMemoryAllocator* memoryAllocator() const { return fMemoryAllocator.get(); } |
38 | | |
39 | 0 | VkDevice device() const { return fDevice; } |
40 | 0 | uint32_t queueIndex() const { return fQueueIndex; } |
41 | | |
42 | | std::unique_ptr<ResourceProvider> makeResourceProvider(SingleOwner*, |
43 | | uint32_t recorderID, |
44 | | size_t resourceBudget) override; |
45 | | |
46 | | bool checkVkResult(VkResult result) const; |
47 | | |
48 | 0 | bool isDeviceLost() const override { |
49 | 0 | SkAutoMutexExclusive lock(fDeviceIsLostMutex); |
50 | 0 | return fDeviceIsLost; |
51 | 0 | } |
52 | | |
53 | | private: |
54 | | VulkanSharedContext(const VulkanBackendContext&, |
55 | | sk_sp<const skgpu::VulkanInterface> interface, |
56 | | sk_sp<skgpu::VulkanMemoryAllocator> memoryAllocator, |
57 | | std::unique_ptr<const VulkanCaps> caps); |
58 | | |
59 | | sk_sp<const skgpu::VulkanInterface> fInterface; |
60 | | sk_sp<skgpu::VulkanMemoryAllocator> fMemoryAllocator; |
61 | | |
62 | | VkDevice fDevice; |
63 | | uint32_t fQueueIndex; |
64 | | |
65 | | mutable SkMutex fDeviceIsLostMutex; |
66 | | // TODO(b/322207523): consider refactoring to remove the mutable keyword from fDeviceIsLost. |
67 | | mutable bool fDeviceIsLost SK_GUARDED_BY(fDeviceIsLostMutex) = false; |
68 | | skgpu::VulkanDeviceLostContext fDeviceLostContext; |
69 | | skgpu::VulkanDeviceLostProc fDeviceLostProc; |
70 | | }; |
71 | | |
72 | | } // namespace skgpu::graphite |
73 | | |
74 | | #endif // skgpu_graphite_VulkanSharedContext_DEFINED |