1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-21 22:54:16 +01:00

[dxvk] Add debug regions to command buffers

This commit is contained in:
Philip Rebohle 2024-11-06 11:06:12 +01:00 committed by Philip Rebohle
parent b62a8c78b4
commit 71bd780340
3 changed files with 45 additions and 5 deletions

View File

@ -115,7 +115,7 @@ namespace dxvk {
}
VkCommandBuffer DxvkCommandPool::getCommandBuffer() {
VkCommandBuffer DxvkCommandPool::getCommandBuffer(DxvkCmdBuffer type) {
auto vk = m_device->vkd();
if (m_next == m_commandBuffers.size()) {
@ -143,6 +143,24 @@ namespace dxvk {
if (vk->vkBeginCommandBuffer(commandBuffer, &info))
throw DxvkError("DxvkCommandPool: Failed to begin command buffer");
if (m_device->isDebugEnabled()) {
auto vki = m_device->vki();
VkDebugUtilsLabelEXT label = { };
switch (type) {
case DxvkCmdBuffer::ExecBuffer: label = vk::makeLabel(0xdcc0a2, "Graphics commands"); break;
case DxvkCmdBuffer::InitBuffer: label = vk::makeLabel(0xc0dca2, "Init commands"); break;
case DxvkCmdBuffer::InitBarriers: label = vk::makeLabel(0xd0e6b8, "Init barriers"); break;
case DxvkCmdBuffer::SdmaBuffer: label = vk::makeLabel(0xc0a2dc, "Upload commands"); break;
case DxvkCmdBuffer::SdmaBarriers: label = vk::makeLabel(0xd0b8e6, "Upload barriers"); break;
default: ;
}
if (label.pLabelName)
vki->vkCmdBeginDebugUtilsLabelEXT(commandBuffer, &label);
}
return commandBuffer;
}
@ -162,7 +180,7 @@ namespace dxvk {
DxvkCommandList::DxvkCommandList(DxvkDevice* device)
: m_device (device),
m_vkd (device->vkd()),
m_vki (device->instance()->vki()) {
m_vki (device->vki()) {
const auto& graphicsQueue = m_device->queues().graphics;
const auto& transferQueue = m_device->queues().transfer;
@ -409,6 +427,9 @@ namespace dxvk {
void DxvkCommandList::endCommandBuffer(VkCommandBuffer cmdBuffer) {
auto vk = m_device->vkd();
if (m_device->isDebugEnabled())
m_vki->vkCmdEndDebugUtilsLabelEXT(cmdBuffer);
if (vk->vkEndCommandBuffer(cmdBuffer))
throw DxvkError("DxvkCommandList: Failed to end command buffer");
}
@ -416,8 +437,8 @@ namespace dxvk {
VkCommandBuffer DxvkCommandList::allocateCommandBuffer(DxvkCmdBuffer type) {
return type == DxvkCmdBuffer::SdmaBuffer || type == DxvkCmdBuffer::SdmaBarriers
? m_transferPool->getCommandBuffer()
: m_graphicsPool->getCommandBuffer();
? m_transferPool->getCommandBuffer(type)
: m_graphicsPool->getCommandBuffer(type);
}
}

View File

@ -172,9 +172,11 @@ namespace dxvk {
/**
* \brief Retrieves or allocates a command buffer
*
* \param [in] type Command buffer type
* \returns New command buffer in begun state
*/
VkCommandBuffer getCommandBuffer();
VkCommandBuffer getCommandBuffer(DxvkCmdBuffer type);
/**
* \brief Resets command pool and all command buffers

View File

@ -227,6 +227,23 @@ namespace dxvk::vk {
return name && name[0];
}
/**
* \brief Makes debug label
*
* \param [in] color Color, as BGR with implied opaque alpha
* \param [in] text Label text
*/
inline VkDebugUtilsLabelEXT makeLabel(uint32_t color, const char* text) {
VkDebugUtilsLabelEXT label = { VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT };
label.color[0] = ((color >> 16u) & 0xffu) / 255.0f;
label.color[1] = ((color >> 8u) & 0xffu) / 255.0f;
label.color[2] = ((color >> 0u) & 0xffu) / 255.0f;
label.color[3] = 1.0f;
label.pLabelName = text;
return label;
}
}