32 ScopeTimings timings = {};
34 timings.finished =
false;
35 timings.cpu_start = ScopeTimings::Clock::now();
37 scope_timings.append(timings);
48 for (
int i = scope_timings.size() - 1;
i >= 0;
i--) {
49 ScopeTimings &query = scope_timings[
i];
50 if (!query.finished) {
51 query.finished =
true;
52 query.cpu_end = ScopeTimings::Clock::now();
56 CLOG_ERROR(&
LOG,
"Profile GPU error: Extra GPU_debug_group_end() call.");
61void VKContext::process_frame_timings()
69 bool frame_is_valid = !queries.
is_empty();
71 for (
int i = queries.
size() - 1;
i >= 0;
i--) {
72 if (!queries[
i].finished) {
73 frame_is_valid =
false;
74 CLOG_ERROR(&
LOG,
"Profile GPU error: Missing GPU_debug_group_end() call");
79 if (!frame_is_valid) {
83 for (ScopeTimings &query : queries) {
85 query.cpu_start.time_since_epoch().count(),
86 query.cpu_end.time_since_epoch().count());
102 bool result = renderdoc_api_.start_frame_capture(
device.instance_get(),
nullptr);
104 renderdoc_api_.set_frame_capture_title(title);
123 renderdoc_api_.end_frame_capture(
device.instance_get(),
nullptr);
135 const char *title = (
const char *)scope;
149 const char *title = (
const char *)scope;
177 VkDebugUtilsObjectNameInfoEXT info = {};
178 info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
179 info.objectType = vk_object_type;
180 info.objectHandle = object_handle;
181 info.pObjectName =
name;
192 std::stringstream ss;
193 for (uint32_t
object = 0;
object < callback_data->objectCount; ++object) {
194 ss <<
" - ObjectType[" <<
to_string(callback_data->pObjects[
object].objectType) <<
"],";
195 ss <<
"Handle[0x" << std::hex << uintptr_t(callback_data->pObjects[
object].objectHandle)
197 if (callback_data->pObjects[
object].pObjectName) {
198 ss <<
",Name[" << callback_data->pObjects[object].pObjectName <<
"]";
202 for (uint32_t label = 0; label < callback_data->cmdBufLabelCount; ++label) {
203 if (callback_data->pCmdBufLabels[label].pLabelName) {
204 ss <<
" - CommandBuffer : " << callback_data->pCmdBufLabels[label].pLabelName << std::endl;
207 for (uint32_t label = 0; label < callback_data->queueLabelCount; ++label) {
208 if (callback_data->pQueueLabels[label].pLabelName) {
209 ss <<
" - Queue : " << callback_data->pQueueLabels[label].pLabelName << std::endl;
213 printf(
"%s", ss.str().c_str());
216static VKAPI_ATTR VkBool32 VKAPI_CALL
218 VkDebugUtilsMessageTypeFlagsEXT ,
219 const VkDebugUtilsMessengerCallbackDataEXT *callback_data,
223 if (message_severity & (VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |
224 VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT))
228 if (message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
231 if (message_severity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) {
235 const char *
format =
"{0x%x}% s\n %s ";
239 callback_data->messageIdNumber,
240 callback_data->pMessageIdName,
241 callback_data->pMessage);
242 const bool do_labels = (callback_data->objectCount + callback_data->cmdBufLabelCount +
243 callback_data->queueLabelCount) > 0;
245 if (do_labels && log_active) {
255 if (vk_debug_utils_messenger) {
264 VkDebugUtilsMessengerCreateInfoEXT create_info;
265 create_info.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
266 create_info.pNext =
nullptr;
267 create_info.flags = 0;
268 create_info.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT |
269 VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |
270 VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |
271 VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
272 create_info.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |
273 VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |
274 VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
276 create_info.pUserData =
this;
278 vk_instance, &create_info,
nullptr, &vk_debug_utils_messenger);
284 if (vk_debug_utils_messenger ==
nullptr) {
290 vk_debug_utils_messenger =
nullptr;
#define CLOG_ERROR(clg_ref,...)
#define CLOG_CHECK(clg_ref, verbose_level,...)
void CLG_logref_init(CLG_LogRef *clg_ref)
#define CLOG_AT_LEVEL(clg_ref, verbose_level,...)
unsigned long long int uint64_t
static ProfileReport & get()
void add_group_cpu(StringRefNull name, uint64_t cpu_start, uint64_t cpu_end)
bool debug_capture_begin(const char *title)
void debug_group_begin(const char *, int) override
void debug_group_end() override
bool debug_capture_scope_begin(void *scope) override
void * debug_capture_scope_create(const char *name) override
bool debug_capture_begin(const char *title) override
const render_graph::VKRenderGraph & render_graph() const
void debug_capture_end() override
void debug_capture_scope_end(void *scope) override
TimelineValue flush_render_graph(RenderGraphFlushFlags flags, VkPipelineStageFlags wait_dst_stage_mask=VK_PIPELINE_STAGE_NONE, VkSemaphore wait_semaphore=VK_NULL_HANDLE, VkSemaphore signal_semaphore=VK_NULL_HANDLE, VkFence signal_fence=VK_NULL_HANDLE)
PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectName
VkDevice vk_handle() const
PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessenger
PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessenger
struct blender::gpu::VKDevice::@152120360333013146246346216002113345357100126073 functions
void debug_group_begin(const char *name, const ColorTheme4f &color)
static const char * to_string(const Interpolation &interp)
static ColorTheme4f get_debug_group_color(StringRefNull name)
static VKAPI_ATTR VkBool32 VKAPI_CALL messenger_callback(VkDebugUtilsMessageSeverityFlagBitsEXT message_severity, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT *callback_data, void *user_data)
void object_label(GLenum type, GLuint object, const char *name)