diff options
| author | Laszlo Agocs <laszlo.agocs@qt.io> | 2023-04-03 16:14:45 +0200 |
|---|---|---|
| committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2023-04-17 16:06:17 +0200 |
| commit | 5f3c3044a591576ac6ec1f0516cf7791f2c7d1cc (patch) | |
| tree | 4eb3e76a6607f786e14dd3464811e55d5c3c83b3 /src | |
| parent | 14feb6792eea28cfa21c781b0fae121fe784d669 (diff) | |
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>
Diffstat (limited to 'src')
| -rw-r--r-- | src/gui/rhi/qrhid3d12.cpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/src/gui/rhi/qrhid3d12.cpp b/src/gui/rhi/qrhid3d12.cpp index 20d01db1fae..d80fe8a4068 100644 --- a/src/gui/rhi/qrhid3d12.cpp +++ b/src/gui/rhi/qrhid3d12.cpp @@ -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) |
