-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathDebugUtils.h
98 lines (89 loc) · 3.14 KB
/
DebugUtils.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// Author : Jihong Shin (snowapril)
#if !defined(VULKAN_FRAMEWORK_DEBUG_UTILS_H)
#define VULKAN_FRAMEWORK_DEBUG_UTILS_H
#include <VulkanFramework/pch.h>
namespace vfs
{
class DebugUtils
{
public:
DebugUtils() = default;
DebugUtils(DevicePtr device) : _device(device) {};
public:
static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT severity,
VkDebugUtilsMessageTypeFlagsEXT flags,
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
void* userData);
static void GlfwDebugCallback(int errorCode, const char* description);
public:
struct ScopedCmdLabel
{
ScopedCmdLabel(VkCommandBuffer cmdBuffer, const char* label)
: _cmdBuffer(cmdBuffer)
{
VkDebugUtilsLabelEXT labelInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, nullptr, label, {1.0f, 1.0f, 1.0f, 1.0f} };
vkCmdBeginDebugUtilsLabelEXT(_cmdBuffer, &labelInfo);
}
~ScopedCmdLabel()
{
vkCmdEndDebugUtilsLabelEXT(_cmdBuffer);
}
void insertLabel(const char* label)
{
VkDebugUtilsLabelEXT labelInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT, nullptr, label, {1.0f, 1.0f, 1.0f, 1.0f} };
vkCmdInsertDebugUtilsLabelEXT(_cmdBuffer, &labelInfo);
}
private:
VkCommandBuffer _cmdBuffer { VK_NULL_HANDLE };
};
inline ScopedCmdLabel scopeLabel(VkCommandBuffer cmdBuffer, const char* label)
{
return ScopedCmdLabel(cmdBuffer, label);
}
inline void setObjectName(VkBuffer buffer, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(buffer), name, VK_OBJECT_TYPE_BUFFER);
}
inline void setObjectName(VkImage image, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(image), name, VK_OBJECT_TYPE_IMAGE);
}
inline void setObjectName(VkImageView imageView, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(imageView), name, VK_OBJECT_TYPE_IMAGE_VIEW);
}
inline void setObjectName(VkSampler sampler, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(sampler), name, VK_OBJECT_TYPE_SAMPLER);
}
inline void setObjectName(VkPipeline pipeline, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(pipeline), name, VK_OBJECT_TYPE_PIPELINE);
}
inline void setObjectName(VkRenderPass renderPass, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(renderPass), name, VK_OBJECT_TYPE_RENDER_PASS);
}
inline void setObjectName(VkFence fence, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(fence), name, VK_OBJECT_TYPE_FENCE);
}
inline void setObjectName(VkSemaphore semaphore, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(semaphore), name, VK_OBJECT_TYPE_SEMAPHORE);
}
inline void setObjectName(VkDescriptorSet descSet, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(descSet), name, VK_OBJECT_TYPE_DESCRIPTOR_SET);
}
inline void setObjectName(VkBufferView bufferView, const char* name)
{
setObjectName(reinterpret_cast<uint64_t>(bufferView), name, VK_OBJECT_TYPE_BUFFER_VIEW);
}
private:
void setObjectName(uint64_t object, const char* name, VkObjectType type);
private:
DevicePtr _device{ nullptr };
};
}
#endif