From e3c50ad204ffecc015e9054bbb91bd9c4dd09000 Mon Sep 17 00:00:00 2001 From: redstrate <54911369+redstrate@users.noreply.github.com> Date: Wed, 12 May 2021 10:06:29 -0400 Subject: [PATCH] Implement PushGroup and PopGroup command types in Vulkan --- engine/gfx/vulkan/src/gfx_vulkan.cpp | 29 ++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/engine/gfx/vulkan/src/gfx_vulkan.cpp b/engine/gfx/vulkan/src/gfx_vulkan.cpp index b784a21..1553dc8 100755 --- a/engine/gfx/vulkan/src/gfx_vulkan.cpp +++ b/engine/gfx/vulkan/src/gfx_vulkan.cpp @@ -189,6 +189,18 @@ VkResult name_object(VkDevice device, VkObjectType type, uint64_t object, std::s return VK_ERROR_EXTENSION_NOT_PRESENT; } +void cmd_debug_marker_begin(VkDevice device, VkCommandBuffer command_buffer, VkDebugMarkerMarkerInfoEXT marker_info) { + auto func = (PFN_vkCmdDebugMarkerBeginEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerBeginEXT"); + if (func != nullptr) + func(command_buffer, &marker_info); +} + +void cmd_debug_marker_end(VkDevice device, VkCommandBuffer command_buffer) { + auto func = (PFN_vkCmdDebugMarkerEndEXT)vkGetDeviceProcAddr(device, "vkCmdDebugMarkerEndEXT"); + if (func != nullptr) + func(command_buffer); +} + bool GFXVulkan::initialize(const GFXCreateInfo& info) { #ifdef PLATFORM_WINDOWS const char* surface_name = "VK_KHR_win32_surface"; @@ -1461,6 +1473,23 @@ void GFXVulkan::submit(GFXCommandBuffer* command_buffer, const int identifier) { vkCmdDispatch(cmd, command.data.dispatch.group_count_x, command.data.dispatch.group_count_y, command.data.dispatch.group_count_z); } break; + case GFXCommandType::PushGroup: + { + VkDebugMarkerMarkerInfoEXT marker_info = {}; + marker_info.sType = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT; + marker_info.pMarkerName = command.data.push_group.name.data();\ + + cmd_debug_marker_begin(device, cmd, marker_info); + } + break; + case GFXCommandType::PopGroup: + { + cmd_debug_marker_end(device, cmd); + } + break; + default: + prism::log::error(System::GFX, "Unhandled GFX Command Type {}", utility::enum_to_string(command.type)); + break; } }