rhi: d3d12: Implement debug markers
As usual this is only doing anything when launched with QSG_RHI_PROFILE=1. Otherwise the debugMark* functions are no-ops. Uses the old PIX API (pix.h) since that is what is available in the Windows SDK. This works well with RenderDoc. The strings show up in PIX captures as well although that will warn that the pix.h stuff is deprecated. Unfortunately using the PIX3 API involves headers and libraries not part of the Windows SDK so we do not want to open that can of worms now. Problem is, pix.h may not be present in some SDKs as shown in the CI. So use __has_include and lose the whole feature if the header is not present at build time. Change-Id: I8606d151f75a492071bf0c8d98b16026ff94d45c Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
parent
14feb6792e
commit
5f3c3044a5
@ -14,6 +14,11 @@
|
||||
|
||||
#include "cs_mipmap_p.h"
|
||||
|
||||
#if __has_include(<pix.h>)
|
||||
#include <pix.h>
|
||||
#define QRHI_D3D12_HAS_OLD_PIX
|
||||
#endif
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
/*
|
||||
@ -514,7 +519,11 @@ bool QRhiD3D12::isFeatureSupported(QRhi::Feature feature) const
|
||||
case QRhi::MultisampleRenderBuffer:
|
||||
return true;
|
||||
case QRhi::DebugMarkers:
|
||||
return false; // ###
|
||||
#ifdef QRHI_D3D12_HAS_OLD_PIX
|
||||
return true;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
case QRhi::Timestamps:
|
||||
return false; // ###
|
||||
case QRhi::Instancing:
|
||||
@ -1261,19 +1270,43 @@ void QRhiD3D12::drawIndexed(QRhiCommandBuffer *cb, quint32 indexCount,
|
||||
|
||||
void QRhiD3D12::debugMarkBegin(QRhiCommandBuffer *cb, const QByteArray &name)
|
||||
{
|
||||
Q_UNUSED(cb);
|
||||
if (!debugMarkers)
|
||||
return;
|
||||
|
||||
QD3D12CommandBuffer *cbD = QRHI_RES(QD3D12CommandBuffer, cb);
|
||||
#ifdef QRHI_D3D12_HAS_OLD_PIX
|
||||
PIXBeginEvent(cbD->cmdList, PIX_COLOR_DEFAULT, reinterpret_cast<LPCWSTR>(QString::fromLatin1(name).utf16()));
|
||||
#else
|
||||
Q_UNUSED(cbD);
|
||||
Q_UNUSED(name);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QRhiD3D12::debugMarkEnd(QRhiCommandBuffer *cb)
|
||||
{
|
||||
Q_UNUSED(cb);
|
||||
if (!debugMarkers)
|
||||
return;
|
||||
|
||||
QD3D12CommandBuffer *cbD = QRHI_RES(QD3D12CommandBuffer, cb);
|
||||
#ifdef QRHI_D3D12_HAS_OLD_PIX
|
||||
PIXEndEvent(cbD->cmdList);
|
||||
#else
|
||||
Q_UNUSED(cbD);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QRhiD3D12::debugMarkMsg(QRhiCommandBuffer *cb, const QByteArray &msg)
|
||||
{
|
||||
Q_UNUSED(cb);
|
||||
if (!debugMarkers)
|
||||
return;
|
||||
|
||||
QD3D12CommandBuffer *cbD = QRHI_RES(QD3D12CommandBuffer, cb);
|
||||
#ifdef QRHI_D3D12_HAS_OLD_PIX
|
||||
PIXSetMarker(cbD->cmdList, PIX_COLOR_DEFAULT, reinterpret_cast<LPCWSTR>(QString::fromLatin1(msg).utf16()));
|
||||
#else
|
||||
Q_UNUSED(cbD);
|
||||
Q_UNUSED(msg);
|
||||
#endif
|
||||
}
|
||||
|
||||
const QRhiNativeHandles *QRhiD3D12::nativeHandles(QRhiCommandBuffer *cb)
|
||||
|
Loading…
Reference in New Issue
Block a user