mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[dxvk] Add support for debug utils labels
Reviewed-by: Oleg Kuznetsov <okouznetsov@nvidia.com>
This commit is contained in:
parent
c89b274325
commit
5ce5999232
@ -110,6 +110,7 @@ The following environment variables can be used for **debugging** purposes.
|
|||||||
- `DXVK_LOG_LEVEL=none|error|warn|info|debug` Controls message logging.
|
- `DXVK_LOG_LEVEL=none|error|warn|info|debug` Controls message logging.
|
||||||
- `DXVK_LOG_PATH=/some/directory` Changes path where log files are stored. Set to `none` to disable log file creation entirely, without disabling logging.
|
- `DXVK_LOG_PATH=/some/directory` Changes path where log files are stored. Set to `none` to disable log file creation entirely, without disabling logging.
|
||||||
- `DXVK_CONFIG_FILE=/xxx/dxvk.conf` Sets path to the configuration file.
|
- `DXVK_CONFIG_FILE=/xxx/dxvk.conf` Sets path to the configuration file.
|
||||||
|
- `DXVK_PERF_EVENTS=1` Enables use of the VK_EXT_debug_utils extension for translating performance event markers.
|
||||||
|
|
||||||
## Troubleshooting
|
## Troubleshooting
|
||||||
DXVK requires threading support from your mingw-w64 build environment. If you
|
DXVK requires threading support from your mingw-w64 build environment. If you
|
||||||
|
@ -6,6 +6,7 @@ namespace dxvk {
|
|||||||
DxvkCommandList::DxvkCommandList(DxvkDevice* device)
|
DxvkCommandList::DxvkCommandList(DxvkDevice* device)
|
||||||
: m_device (device),
|
: m_device (device),
|
||||||
m_vkd (device->vkd()),
|
m_vkd (device->vkd()),
|
||||||
|
m_vki (device->instance()->vki()),
|
||||||
m_cmdBuffersUsed(0),
|
m_cmdBuffersUsed(0),
|
||||||
m_descriptorPoolTracker(device) {
|
m_descriptorPoolTracker(device) {
|
||||||
const auto& graphicsQueue = m_device->queues().graphics;
|
const auto& graphicsQueue = m_device->queues().graphics;
|
||||||
@ -206,4 +207,15 @@ namespace dxvk {
|
|||||||
return m_vkd->vkQueueSubmit(queue, 1, &submitInfo, fence);
|
return m_vkd->vkQueueSubmit(queue, 1, &submitInfo, fence);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
void DxvkCommandList::cmdBeginDebugUtilsLabel(VkDebugUtilsLabelEXT *pLabelInfo) {
|
||||||
|
m_vki->vkCmdBeginDebugUtilsLabelEXT(m_execBuffer, pLabelInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DxvkCommandList::cmdEndDebugUtilsLabel() {
|
||||||
|
m_vki->vkCmdEndDebugUtilsLabelEXT(m_execBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DxvkCommandList::cmdInsertDebugUtilsLabel(VkDebugUtilsLabelEXT *pLabelInfo) {
|
||||||
|
m_vki->vkCmdInsertDebugUtilsLabelEXT(m_execBuffer, pLabelInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -762,10 +762,17 @@ namespace dxvk {
|
|||||||
pipelineStage, queryPool, query);
|
pipelineStage, queryPool, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cmdBeginDebugUtilsLabel(VkDebugUtilsLabelEXT *pLabelInfo);
|
||||||
|
|
||||||
|
void cmdEndDebugUtilsLabel();
|
||||||
|
|
||||||
|
void cmdInsertDebugUtilsLabel(VkDebugUtilsLabelEXT *pLabelInfo);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
DxvkDevice* m_device;
|
DxvkDevice* m_device;
|
||||||
Rc<vk::DeviceFn> m_vkd;
|
Rc<vk::DeviceFn> m_vkd;
|
||||||
|
Rc<vk::InstanceFn> m_vki;
|
||||||
|
|
||||||
VkFence m_fence;
|
VkFence m_fence;
|
||||||
|
|
||||||
@ -801,4 +808,4 @@ namespace dxvk {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2485,6 +2485,27 @@ namespace dxvk {
|
|||||||
void DxvkContext::trimStagingBuffers() {
|
void DxvkContext::trimStagingBuffers() {
|
||||||
m_staging.trim();
|
m_staging.trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DxvkContext::beginDebugLabel(VkDebugUtilsLabelEXT *label) {
|
||||||
|
if (!m_device->instance()->extensions().extDebugUtils)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_cmd->cmdBeginDebugUtilsLabel(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DxvkContext::endDebugLabel() {
|
||||||
|
if (!m_device->instance()->extensions().extDebugUtils)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_cmd->cmdEndDebugUtilsLabel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DxvkContext::insertDebugLabel(VkDebugUtilsLabelEXT *label) {
|
||||||
|
if (!m_device->instance()->extensions().extDebugUtils)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_cmd->cmdInsertDebugUtilsLabel(label);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkContext::blitImageFb(
|
void DxvkContext::blitImageFb(
|
||||||
@ -5026,4 +5047,4 @@ namespace dxvk {
|
|||||||
return m_zeroBuffer;
|
return m_zeroBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -981,7 +981,32 @@ namespace dxvk {
|
|||||||
* given context are rare.
|
* given context are rare.
|
||||||
*/
|
*/
|
||||||
void trimStagingBuffers();
|
void trimStagingBuffers();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Begins a debug label region
|
||||||
|
* \param [in] label The debug label
|
||||||
|
*
|
||||||
|
* Marks the start of a debug label region. Used by debugging/profiling
|
||||||
|
* tools to mark different workloads within a frame.
|
||||||
|
*/
|
||||||
|
void beginDebugLabel(VkDebugUtilsLabelEXT *label);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Ends a debug label region
|
||||||
|
*
|
||||||
|
* Marks the close of a debug label region. Used by debugging/profiling
|
||||||
|
* tools to mark different workloads within a frame.
|
||||||
|
*/
|
||||||
|
void endDebugLabel();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Inserts a debug label
|
||||||
|
* \param [in] label The debug label
|
||||||
|
*
|
||||||
|
* Inserts an instantaneous debug label. Used by debugging/profiling
|
||||||
|
* tools to mark different workloads within a frame.
|
||||||
|
*/
|
||||||
|
void insertDebugLabel(VkDebugUtilsLabelEXT *label);
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Rc<DxvkDevice> m_device;
|
Rc<DxvkDevice> m_device;
|
||||||
@ -1246,4 +1271,4 @@ namespace dxvk {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -292,8 +292,9 @@ namespace dxvk {
|
|||||||
* used by DXVK if supported by the implementation.
|
* used by DXVK if supported by the implementation.
|
||||||
*/
|
*/
|
||||||
struct DxvkInstanceExtensions {
|
struct DxvkInstanceExtensions {
|
||||||
|
DxvkExt extDebugUtils = { VK_EXT_DEBUG_UTILS_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
DxvkExt khrGetSurfaceCapabilities2 = { VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, DxvkExtMode::Optional };
|
DxvkExt khrGetSurfaceCapabilities2 = { VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, DxvkExtMode::Optional };
|
||||||
DxvkExt khrSurface = { VK_KHR_SURFACE_EXTENSION_NAME, DxvkExtMode::Required };
|
DxvkExt khrSurface = { VK_KHR_SURFACE_EXTENSION_NAME, DxvkExtMode::Required };
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -91,11 +91,17 @@ namespace dxvk {
|
|||||||
VkInstance DxvkInstance::createInstance() {
|
VkInstance DxvkInstance::createInstance() {
|
||||||
DxvkInstanceExtensions insExtensions;
|
DxvkInstanceExtensions insExtensions;
|
||||||
|
|
||||||
std::array<DxvkExt*, 2> insExtensionList = {{
|
std::vector<DxvkExt*> insExtensionList = {{
|
||||||
&insExtensions.khrGetSurfaceCapabilities2,
|
&insExtensions.khrGetSurfaceCapabilities2,
|
||||||
&insExtensions.khrSurface,
|
&insExtensions.khrSurface,
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
// Hide VK_EXT_debug_utils behind an environment variable. This extension
|
||||||
|
// adds additional overhead to winevulkan
|
||||||
|
if (env::getEnvVar("DXVK_PERF_EVENTS") == "1") {
|
||||||
|
insExtensionList.push_back(&insExtensions.extDebugUtils);
|
||||||
|
}
|
||||||
|
|
||||||
DxvkNameSet extensionsEnabled;
|
DxvkNameSet extensionsEnabled;
|
||||||
DxvkNameSet extensionsAvailable = DxvkNameSet::enumInstanceExtensions(m_vkl);
|
DxvkNameSet extensionsAvailable = DxvkNameSet::enumInstanceExtensions(m_vkl);
|
||||||
|
|
||||||
|
@ -140,6 +140,12 @@ namespace dxvk::vk {
|
|||||||
VULKAN_FN(vkDebugReportMessageEXT);
|
VULKAN_FN(vkDebugReportMessageEXT);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef VK_EXT_debug_utils
|
||||||
|
VULKAN_FN(vkCmdBeginDebugUtilsLabelEXT);
|
||||||
|
VULKAN_FN(vkCmdEndDebugUtilsLabelEXT);
|
||||||
|
VULKAN_FN(vkCmdInsertDebugUtilsLabelEXT);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef VK_EXT_full_screen_exclusive
|
#ifdef VK_EXT_full_screen_exclusive
|
||||||
VULKAN_FN(vkGetPhysicalDeviceSurfacePresentModes2EXT);
|
VULKAN_FN(vkGetPhysicalDeviceSurfacePresentModes2EXT);
|
||||||
#endif
|
#endif
|
||||||
@ -343,4 +349,4 @@ namespace dxvk::vk {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user