MSVC 2017 中的图形调试 - 发生错误。您的应用程序的播放可能不完整

Graphics debugging in MSVC 2017 - An error occured. Playback of your application may be incomplete

我成功录制了一次 DX11 诊断会话。当 运行 第二次和以后的任何时候,当我点击一个框架时,我得到这个错误:

An error occured. Playback of your application may be incomplete. (HRESULT = 0x00630000) "Unknown error (0x00630000)"

我使用代码 shown here in Microsoft Docs 以编程方式捕获帧。它以前与其他着色器以及我现在正在调试的着色器一起工作。

我有一个 RAII class 用于调试:

class GPUBlock
{
public:
  GPUBlock() : _startResult(DXGIGetDebugInterface1(0, __uuidof(_directXAnalysis), reinterpret_cast<void**>(&_directXAnalysis)))
  {
    if (debugInitialized())
      _directXAnalysis->BeginCapture();
  }

  ~GPUBlock()
  {
    if (debugInitialized())
      _directXAnalysis->EndCapture();
  }

  bool debugInitialized() const { return _directXAnalysis && !FAILED(_startResult); }
private:
  IDXGraphicsAnalysis* _directXAnalysis = nullptr;
  HRESULT _startResult = OLE_E_BLANK;
};

用作:

{
    Debug::GPUBlock debugGPUplease;
    DoGPUWork();
}

原来你必须点击"Stop collection"按钮。如果您以这种方式结束调试,日志将正常工作。

不清楚为什么它以前没有它就可以工作,但这可能是运气而不是正常行为。

此外,如果 BeginCapture()EndCapture() 在不适当的时候调用,也会发生此错误。你不能把它们放在任何地方!您需要捕获整个 GPU 操作,包括设置。