Coverage Report

Created: 2024-05-20 07:14

/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