我有一个 UWP cppwinrt 应用程序,它使用 directx12 来渲染带有基本着色器的立方体。我想使用图形调试器来检查发送到此着色器的数据。
首先,我尝试将 Nvidia Nsight 调试器用于 Visual Studio 2017。问题是,当我从 Nsight 菜单转到“开始图形调试”时,应用程序立即停止并显示错误消息:“无法启动 UWP 应用程序(可能不终止现有进程)”。
我能够在从 Visual Studio 模板创建的 DirectX12 UWP 应用程序 (C++/CX) 上启动 Nsight 调试器,尽管这令人鼓舞。
我的 cppWinRT 应用程序正在渲染到使用如下创建的交换链IDXGIFactory2::CreateSwapChainForComposition
:
check_hresult(
m_factory->CreateSwapChainForComposition(
m_commandQueue.get(),
&swapChainDesc,
nullptr,
m_swapChain.put()
));
// associate DXGI swap chain with the XAML SwapChainPanel
check_hresult(
swapChainPanel().as<ISwapChainPanelNative>()->SetSwapChain(m_swapChain.get())
);
这swapChainPanel()
是一个winrt::Windows::UI::Xaml::Controls::SwapChainPanel
xaml 控件。
有谁知道如何做到这一点?
2018 年 8 月 13 日更新:
我尝试将 Nsight 与 Microsoft 的另一个项目一起使用,该项目与我的非常相似,您可以在此处找到:https ://github.com/Microsoft/DirectX-Graphics-Samples/tree/feature_xaml_template/Templates/DirectX12XamlApp
它与我的项目有完全相同的问题,所以看起来swapChainPanel
XAML 控件是问题所在。
我怀疑一种可能的解决方法是在调试时使用不同的交换链,例如使用创建的交换链IDXGIFactory2::CreateSwapChainForCoreWindow
。