1

我有一个 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::SwapChainPanelxaml 控件。

有谁知道如何做到这一点?

2018 年 8 月 13 日更新:

我尝试将 Nsight 与 Microsoft 的另一个项目一起使用,该项目与我的非常相似,您可以在此处找到:https ://github.com/Microsoft/DirectX-Graphics-Samples/tree/feature_xaml_template/Templates/DirectX12XamlApp

它与我的项目有完全相同的问题,所以看起来swapChainPanelXAML 控件是问题所在。

我怀疑一种可能的解决方法是在调试时使用不同的交换链,例如使用创建的交换链IDXGIFactory2::CreateSwapChainForCoreWindow

4

0 回答 0