chrono_batch_render/
Coverage:
low: ≥ 0%
medium: ≥ 75.0%
high: ≥ 90.0%
Lines:
47 / 60
78.3%
Branches:
26 / 29
89.7%
Functions:
5 / 6, 2 excl
83.3%

device/vulkan/api.h
Line Branch Exec Source
1 // SPDX-License-Identifier: BSD-3-Clause
2 #pragma once
3
4 #include <cstdint>
5 #include <vector>
6
7 #include <volk.h>
8
9 #include "chrono_batch_render/util/version.h"
10
11 namespace chrono::batch_render::device::vulkan {
12
13 constexpr Version kMinimumInstanceVersion{1, 3};
14
15 inline constexpr const char* kSurfaceExtensions[] = {
16 VK_KHR_SURFACE_EXTENSION_NAME, "VK_KHR_xlib_surface", "VK_KHR_xcb_surface",
17 "VK_KHR_wayland_surface", "VK_KHR_win32_surface", "VK_EXT_metal_surface"};
18
19 95 constexpr Version DecodeVersion(uint32_t packed) {
20
2/3
✗ Branch 0 not taken.
✓ Branch 1 taken 11 times.
✓ Branch 1 taken 42 times.
95 return {int(packed >> 22 & 0x7f), int(packed >> 12 & 0x3ff), int(packed & 0xfff)};
21 }
22
23 struct Api {
24 Version instanceVersion;
25 };
26
27 343 template <class T, class Count = uint32_t, class Query> std::vector<T> Enumerate(Query query) {
28 343 Count count = 0;
29 343 query(&count, static_cast<T*>(nullptr));
30
5/5
std::vector<VkExtensionProperties, std::allocator<VkExtensionProperties> > chrono::batch_render::device::vulkan::Enumerate<VkExtensionProperties, unsigned int, chrono::batch_render::device::vulkan::Extensions::Extensions(VkPhysicalDevice_T*)::{lambda(unsigned int*, VkExtensionProperties*)#1}>(chrono::batch_render::device::vulkan::Extensions::Extensions(VkPhysicalDevice_T*)::{lambda(unsigned int*, VkExtensionProperties*)#1}):
✓ Branch 2 taken 137 times.
std::vector<VkPhysicalDevice_T*, std::allocator<VkPhysicalDevice_T*> > chrono::batch_render::device::vulkan::Enumerate<VkPhysicalDevice_T*, unsigned int, chrono::batch_render::device::vulkan::PhysicalDevices(VkInstance_T*)::{lambda(unsigned int*, VkPhysicalDevice_T**)#1}>(chrono::batch_render::device::vulkan::PhysicalDevices(VkInstance_T*)::{lambda(unsigned int*, VkPhysicalDevice_T**)#1}):
✓ Branch 2 taken 62 times.
std::vector<VkQueueFamilyProperties, std::allocator<VkQueueFamilyProperties> > chrono::batch_render::device::vulkan::Enumerate<VkQueueFamilyProperties, unsigned int, chrono::batch_render::device::vulkan::ComputeQueueFamily(VkPhysicalDevice_T*, unsigned int)::{lambda(unsigned int*, VkQueueFamilyProperties*)#1}>(chrono::batch_render::device::vulkan::ComputeQueueFamily(VkPhysicalDevice_T*, unsigned int)::{lambda(unsigned int*, VkQueueFamilyProperties*)#1}):
✓ Branch 2 taken 104 times.
std::vector<VkTimeDomainKHR, std::allocator<VkTimeDomainKHR> > chrono::batch_render::device::vulkan::Enumerate<VkTimeDomainKHR, unsigned int, chrono::batch_render::device::vulkan::(anonymous namespace)::CalibratedTimestampsExtension(VkPhysicalDevice_T*, chrono::batch_render::device::vulkan::Extensions const&)::{lambda(unsigned int*, VkTimeDomainKHR*)#1}>(chrono::batch_render::device::vulkan::(anonymous namespace)::CalibratedTimestampsExtension(VkPhysicalDevice_T*, chrono::batch_render::device::vulkan::Extensions const&)::{lambda(unsigned int*, VkTimeDomainKHR*)#1}):
✓ Branch 2 taken 20 times.
std::vector<char, std::allocator<char> > chrono::batch_render::device::vulkan::Enumerate<char, unsigned long, chrono::batch_render::device::vulkan::VulkanDevice::Destroy()::{lambda(unsigned long*, char*)#1}>(chrono::batch_render::device::vulkan::VulkanDevice::Destroy()::{lambda(unsigned long*, char*)#1}):
✓ Branch 2 taken 20 times.
343 std::vector<T> items(count);
31
5/6
std::vector<VkExtensionProperties, std::allocator<VkExtensionProperties> > chrono::batch_render::device::vulkan::Enumerate<VkExtensionProperties, unsigned int, chrono::batch_render::device::vulkan::Extensions::Extensions(VkPhysicalDevice_T*)::{lambda(unsigned int*, VkExtensionProperties*)#1}>(chrono::batch_render::device::vulkan::Extensions::Extensions(VkPhysicalDevice_T*)::{lambda(unsigned int*, VkExtensionProperties*)#1}):
✓ Branch 1 taken 137 times.
std::vector<VkLayerProperties, std::allocator<VkLayerProperties> > chrono::batch_render::device::vulkan::Enumerate<VkLayerProperties, unsigned int, VkResult (*)(unsigned int*, VkLayerProperties*)>(VkResult (*)(unsigned int*, VkLayerProperties*)):
✗ Branch 1 not taken.
std::vector<VkPhysicalDevice_T*, std::allocator<VkPhysicalDevice_T*> > chrono::batch_render::device::vulkan::Enumerate<VkPhysicalDevice_T*, unsigned int, chrono::batch_render::device::vulkan::PhysicalDevices(VkInstance_T*)::{lambda(unsigned int*, VkPhysicalDevice_T**)#1}>(chrono::batch_render::device::vulkan::PhysicalDevices(VkInstance_T*)::{lambda(unsigned int*, VkPhysicalDevice_T**)#1}):
✓ Branch 1 taken 62 times.
std::vector<VkQueueFamilyProperties, std::allocator<VkQueueFamilyProperties> > chrono::batch_render::device::vulkan::Enumerate<VkQueueFamilyProperties, unsigned int, chrono::batch_render::device::vulkan::ComputeQueueFamily(VkPhysicalDevice_T*, unsigned int)::{lambda(unsigned int*, VkQueueFamilyProperties*)#1}>(chrono::batch_render::device::vulkan::ComputeQueueFamily(VkPhysicalDevice_T*, unsigned int)::{lambda(unsigned int*, VkQueueFamilyProperties*)#1}):
✓ Branch 1 taken 104 times.
std::vector<VkTimeDomainKHR, std::allocator<VkTimeDomainKHR> > chrono::batch_render::device::vulkan::Enumerate<VkTimeDomainKHR, unsigned int, chrono::batch_render::device::vulkan::(anonymous namespace)::CalibratedTimestampsExtension(VkPhysicalDevice_T*, chrono::batch_render::device::vulkan::Extensions const&)::{lambda(unsigned int*, VkTimeDomainKHR*)#1}>(chrono::batch_render::device::vulkan::(anonymous namespace)::CalibratedTimestampsExtension(VkPhysicalDevice_T*, chrono::batch_render::device::vulkan::Extensions const&)::{lambda(unsigned int*, VkTimeDomainKHR*)#1}):
✓ Branch 1 taken 20 times.
std::vector<char, std::allocator<char> > chrono::batch_render::device::vulkan::Enumerate<char, unsigned long, chrono::batch_render::device::vulkan::VulkanDevice::Destroy()::{lambda(unsigned long*, char*)#1}>(chrono::batch_render::device::vulkan::VulkanDevice::Destroy()::{lambda(unsigned long*, char*)#1}):
✓ Branch 1 taken 20 times.
343 query(&count, items.data());
32
5/6
std::vector<VkExtensionProperties, std::allocator<VkExtensionProperties> > chrono::batch_render::device::vulkan::Enumerate<VkExtensionProperties, unsigned int, chrono::batch_render::device::vulkan::Extensions::Extensions(VkPhysicalDevice_T*)::{lambda(unsigned int*, VkExtensionProperties*)#1}>(chrono::batch_render::device::vulkan::Extensions::Extensions(VkPhysicalDevice_T*)::{lambda(unsigned int*, VkExtensionProperties*)#1}):
✓ Branch 1 taken 137 times.
std::vector<VkLayerProperties, std::allocator<VkLayerProperties> > chrono::batch_render::device::vulkan::Enumerate<VkLayerProperties, unsigned int, VkResult (*)(unsigned int*, VkLayerProperties*)>(VkResult (*)(unsigned int*, VkLayerProperties*)):
✗ Branch 1 not taken.
std::vector<VkPhysicalDevice_T*, std::allocator<VkPhysicalDevice_T*> > chrono::batch_render::device::vulkan::Enumerate<VkPhysicalDevice_T*, unsigned int, chrono::batch_render::device::vulkan::PhysicalDevices(VkInstance_T*)::{lambda(unsigned int*, VkPhysicalDevice_T**)#1}>(chrono::batch_render::device::vulkan::PhysicalDevices(VkInstance_T*)::{lambda(unsigned int*, VkPhysicalDevice_T**)#1}):
✓ Branch 1 taken 62 times.
std::vector<VkQueueFamilyProperties, std::allocator<VkQueueFamilyProperties> > chrono::batch_render::device::vulkan::Enumerate<VkQueueFamilyProperties, unsigned int, chrono::batch_render::device::vulkan::ComputeQueueFamily(VkPhysicalDevice_T*, unsigned int)::{lambda(unsigned int*, VkQueueFamilyProperties*)#1}>(chrono::batch_render::device::vulkan::ComputeQueueFamily(VkPhysicalDevice_T*, unsigned int)::{lambda(unsigned int*, VkQueueFamilyProperties*)#1}):
✓ Branch 1 taken 104 times.
std::vector<VkTimeDomainKHR, std::allocator<VkTimeDomainKHR> > chrono::batch_render::device::vulkan::Enumerate<VkTimeDomainKHR, unsigned int, chrono::batch_render::device::vulkan::(anonymous namespace)::CalibratedTimestampsExtension(VkPhysicalDevice_T*, chrono::batch_render::device::vulkan::Extensions const&)::{lambda(unsigned int*, VkTimeDomainKHR*)#1}>(chrono::batch_render::device::vulkan::(anonymous namespace)::CalibratedTimestampsExtension(VkPhysicalDevice_T*, chrono::batch_render::device::vulkan::Extensions const&)::{lambda(unsigned int*, VkTimeDomainKHR*)#1}):
✓ Branch 1 taken 20 times.
std::vector<char, std::allocator<char> > chrono::batch_render::device::vulkan::Enumerate<char, unsigned long, chrono::batch_render::device::vulkan::VulkanDevice::Destroy()::{lambda(unsigned long*, char*)#1}>(chrono::batch_render::device::vulkan::VulkanDevice::Destroy()::{lambda(unsigned long*, char*)#1}):
✓ Branch 1 taken 20 times.
343 items.resize(count);
33 343 return items;
34 ✗ }
35
36 bool Available();
37
38 const Api& GetApi();
39
40 const char* ResultName(VkResult result);
41
42 void Check(VkResult result, const char* what);
43
44
3/3
<unknown function 19>:
✓ Branch 2 taken 42 times.
<unknown function 27>:
✓ Branch 1 taken 18 times.
✓ Branch 2 taken 2 times.
137 class Extensions {
45 public:
46 explicit Extensions(VkPhysicalDevice device = VK_NULL_HANDLE);
47 bool Has(const char* name) const;
48
49 private:
50 std::vector<VkExtensionProperties> m_extensions;
51 };
52
53 VkInstance Instance(bool validation);
54
55 struct Creator;
56
57 class OwnedInstance {
58 public:
59
1/1
✓ Branch 1 taken 18 times.
38 OwnedInstance() = default;
60
61 2 OwnedInstance(VkInstance instance, VkDebugUtilsMessengerEXT messenger)
62 2 : m_instance(instance), m_messenger(messenger) {}
63
64 OwnedInstance(OwnedInstance&& other) noexcept;
65 OwnedInstance& operator=(OwnedInstance&& other) noexcept;
66 ~OwnedInstance();
67
68 41 VkInstance Get() const {
69
5/5
<unknown function 27>:
✓ Branch 0 taken 18 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 2 times.
✓ Branch 3 taken 18 times.
<unknown function 59>:
✓ Branch 1 taken 1 time.
41 return m_instance;
70 }
71
72 private:
73 void Destroy() noexcept;
74
75 VkInstance m_instance = VK_NULL_HANDLE;
76 VkDebugUtilsMessengerEXT m_messenger = VK_NULL_HANDLE;
77 };
78
79 OwnedInstance CreateInstance(bool validation, const Creator& creator);
80
81 bool ValidationEnabled();
82
83 uint64_t ValidationMessageCount();
84
85 std::vector<VkPhysicalDevice> PhysicalDevices(VkInstance instance);
86
87 void LoadDeviceFunctions(VolkDeviceTable& functions, VkDevice device);
88
89 }
90