Implement SetPrivateData WKPDID_D3DDebugObjectName for select resources: buffers, fences, textures, views.

This commit is contained in:
Aaron Leiby 2025-01-06 14:07:54 -08:00
parent 8048be5774
commit 7e9a423ae4
14 changed files with 174 additions and 4 deletions

View file

@ -181,7 +181,12 @@ namespace dxvk {
D3D11_BUFFER_DESC* pBufferDesc);
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_buffer)
m_buffer->setDebugName(name);
}
D3D11_BUFFER_DESC m_desc;
D3D11_ON_12_RESOURCE_INFO m_11on12;
D3D11_COMMON_BUFFER_MAP_MODE m_mapMode;

View file

@ -1,5 +1,6 @@
#pragma once
#include <initguid.h>
#include "d3d11_include.h"
#include "../util/com/com_private_data.h"
@ -30,6 +31,8 @@ namespace dxvk {
REFGUID guid,
UINT DataSize,
const void *pData) final {
if (guid == WKPDID_D3DDebugObjectName)
SetD3DDebugObjectName((const char*)pData);
return m_privateData.setData(
guid, DataSize, pData);
}
@ -55,6 +58,8 @@ namespace dxvk {
}
D3D11Device* const m_parent;
virtual void SetD3DDebugObjectName(const char* name) {}
private:

View file

@ -40,7 +40,12 @@ namespace dxvk {
}
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_fence)
m_fence->setDebugName(name);
}
Rc<DxvkFence> m_fence;
D3D11_FENCE_FLAG m_flags;

View file

@ -769,6 +769,11 @@ namespace dxvk {
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_texture.GetImage())
m_texture.GetImage()->setDebugName(name);
}
D3D11CommonTexture m_texture;
D3D11VkInteropSurface m_interop;
D3D11DXGISurface m_surface;
@ -834,6 +839,11 @@ namespace dxvk {
}
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_texture.GetImage())
m_texture.GetImage()->setDebugName(name);
}
D3D11CommonTexture m_texture;
D3D11VkInteropSurface m_interop;
@ -884,6 +894,11 @@ namespace dxvk {
}
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_texture.GetImage())
m_texture.GetImage()->setDebugName(name);
}
D3D11CommonTexture m_texture;
D3D11VkInteropSurface m_interop;

View file

@ -91,6 +91,11 @@ namespace dxvk {
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_view)
m_view->setDebugName(name);
}
ID3D11Resource* m_resource;
D3D11_DEPTH_STENCIL_VIEW_DESC m_desc;
D3D11_VK_VIEW_INFO m_info;

View file

@ -80,6 +80,11 @@ namespace dxvk {
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_view)
m_view->setDebugName(name);
}
ID3D11Resource* m_resource;
D3D11_RENDER_TARGET_VIEW_DESC1 m_desc;
D3D11_VK_VIEW_INFO m_info;

View file

@ -82,6 +82,13 @@ namespace dxvk {
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_bufferView)
m_bufferView->setDebugName(name);
if (m_imageView)
m_imageView->setDebugName(name);
}
ID3D11Resource* m_resource;
D3D11_SHADER_RESOURCE_VIEW_DESC1 m_desc;
D3D11_VK_VIEW_INFO m_info;

View file

@ -78,6 +78,15 @@ namespace dxvk {
private:
virtual void SetD3DDebugObjectName(const char* name) {
if (m_bufferView)
m_bufferView->setDebugName(name);
if (m_imageView)
m_imageView->setDebugName(name);
if (m_counterView)
m_counterView->setDebugName(name);
}
ID3D11Resource* m_resource;
D3D11_UNORDERED_ACCESS_VIEW_DESC1 m_desc;
D3D11_VK_VIEW_INFO m_info;

View file

@ -99,5 +99,37 @@ namespace dxvk {
return m_allocator->createBufferResource(info, allocationInfo, nullptr);
}
void DxvkBuffer::setDebugName(
const char* name) {
if (!m_vkd->vkSetDebugUtilsObjectNameEXT)
return;
VkDebugUtilsObjectNameInfoEXT nameInfo{};
nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
nameInfo.pNext = nullptr;
nameInfo.objectType = VK_OBJECT_TYPE_BUFFER;
nameInfo.objectHandle = (uint64_t)storage()->getBufferInfo().buffer;
nameInfo.pObjectName = name;
m_vkd->vkSetDebugUtilsObjectNameEXT(m_vkd->device(), &nameInfo);
}
void DxvkBufferView::setDebugName(
const char* name) {
if (!m_buffer->m_vkd->vkSetDebugUtilsObjectNameEXT)
return;
VkDebugUtilsObjectNameInfoEXT nameInfo{};
nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
nameInfo.pNext = nullptr;
nameInfo.objectType = VK_OBJECT_TYPE_BUFFER_VIEW;
nameInfo.objectHandle = (uint64_t)handle();
nameInfo.pObjectName = name;
m_buffer->m_vkd->vkSetDebugUtilsObjectNameEXT(m_buffer->m_vkd->device(), &nameInfo);
}
}

View file

@ -132,6 +132,13 @@ namespace dxvk {
return lookupFormatInfo(m_key.format);
}
/**
* \brief Sets debug name for this resources when markers are enabled
*
* \params[in] name Name of the resource to set
*/
void setDebugName(const char* name);
private:
DxvkBuffer* m_buffer = nullptr;
@ -406,6 +413,13 @@ namespace dxvk {
Rc<DxvkResourceAllocation> relocateStorage(
DxvkAllocationModes mode);
/**
* \brief Sets debug name for this resources when markers are enabled
*
* \params[in] name Name of the resource to set
*/
void setDebugName(const char* name);
private:
Rc<vk::DeviceFn> m_vkd;

View file

@ -181,4 +181,20 @@ namespace dxvk {
return sharedHandle;
}
void DxvkFence::setDebugName(
const char* name) {
if (!m_vkd->vkSetDebugUtilsObjectNameEXT)
return;
VkDebugUtilsObjectNameInfoEXT nameInfo{};
nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
nameInfo.pNext = nullptr;
nameInfo.objectType = VK_OBJECT_TYPE_FENCE;
nameInfo.objectHandle = (uint64_t)m_semaphore;
nameInfo.pObjectName = name;
m_vkd->vkSetDebugUtilsObjectNameEXT(m_vkd->device(), &nameInfo);
}
}

View file

@ -97,6 +97,13 @@ namespace dxvk {
*/
void wait(uint64_t value);
/**
* \brief Sets debug name for this resources when markers are enabled
*
* \params[in] name Name of the resource to set
*/
void setDebugName(const char* name);
private:
struct QueueItem {

View file

@ -283,6 +283,22 @@ namespace dxvk {
}
void DxvkImage::setDebugName(
const char* name) {
if (!m_vkd->vkSetDebugUtilsObjectNameEXT)
return;
VkDebugUtilsObjectNameInfoEXT nameInfo{};
nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
nameInfo.pNext = nullptr;
nameInfo.objectType = VK_OBJECT_TYPE_IMAGE;
nameInfo.objectHandle = (uint64_t)storage()->getImageInfo().image;
nameInfo.pObjectName = name;
m_vkd->vkSetDebugUtilsObjectNameEXT(m_vkd->device(), &nameInfo);
}
VkImageCreateInfo DxvkImage::getImageCreateInfo(
const DxvkImageUsageInfo& usageInfo) const {
VkImageCreateInfo info = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
@ -452,5 +468,20 @@ namespace dxvk {
m_version = m_image->m_version;
}
void DxvkImageView::setDebugName(
const char* name) {
if (!m_image->m_vkd->vkSetDebugUtilsObjectNameEXT)
return;
VkDebugUtilsObjectNameInfoEXT nameInfo{};
nameInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
nameInfo.pNext = nullptr;
nameInfo.objectType = VK_OBJECT_TYPE_IMAGE_VIEW;
nameInfo.objectHandle = (uint64_t)handle();
nameInfo.pObjectName = name;
m_image->m_vkd->vkSetDebugUtilsObjectNameEXT(m_image->m_vkd->device(), &nameInfo);
}
}

View file

@ -263,6 +263,13 @@ namespace dxvk {
view->imageSubresources());
}
/**
* \brief Sets debug name for this resources when markers are enabled
*
* \params[in] name Name of the resource to set
*/
void setDebugName(const char* name);
private:
DxvkImage* m_image = nullptr;
@ -601,6 +608,13 @@ namespace dxvk {
bool isInitialized(
const VkImageSubresourceRange& subresources) const;
/**
* \brief Sets debug name for this resources when markers are enabled
*
* \params[in] name Name of the resource to set
*/
void setDebugName(const char* name);
private:
Rc<vk::DeviceFn> m_vkd;