前言

​ 本篇将介绍图形调试工具pix,使用该工具可以对图形管线进行debug。貌似VS不再支持D3D12的图形调试,笔者的VS无法捕获帧

环境搭建

配置用于 CPU 捕获的 PDB

  1. 生成完整的 PDB
    image-20230406113818947

  2. 设置符号路径

    srvc:symcachehttps://msdl.microsoft.com/download/symbols
    image-20230406113936806

using pix3.h

pix3.h包含在 WinPixEventRuntime,在这里我们使用VS加载WinPixEventRuntime。步骤如下

  1. 右击解决方案,再点击"Manage NuGet Packages"
    image-20230406131559703

  2. 点击"Browse",搜索"WinPixEventRuntime",点击"Install"
    image-20230406132932931

  3. 在build中定义以下预处理器符号之一:USE_PIX, DBG, _DEBUG, PROFILE, or PROFILE_BUILD

  4. #inlcude"pix3.h"

  5. 在创建 D3D 设备前,需要将 WinPixGpuCapturer.dll 的副本加载到应用程序的进程中。而"pix3.h"包含一个辅助函数PIXLoadLatestWinPixGpuCapturerLibrary(),该函数会找到该库并加载它。使用方式如下:

    //find path to WinPixGpuCapturer.dll from the most-recently installed version of PIX
    static std::wstring GetLatestWinPixGpuCapturerPath_Cpp17()
    {
        LPWSTR programFilesPath = nullptr;
        SHGetKnownFolderPath(FOLDERID_ProgramFiles, KF_FLAG_DEFAULT, NULL, &programFilesPath);
    
        std::filesystem::path pixInstallationPath = programFilesPath;
        pixInstallationPath /= "Microsoft PIX";
    
        std::wstring newestVersionFound;
    
        for (auto const& directory_entry : std::filesystem::directory_iterator(pixInstallationPath))
        {
            if (directory_entry.is_directory())
            {
                if (newestVersionFound.empty() || newestVersionFound < directory_entry.path().filename().c_str())
                {
                    newestVersionFound = directory_entry.path().filename().c_str();
                }
            }
        }
    
        if (newestVersionFound.empty())
        {
            // TODO: Error, no PIX installation found
        }
    
        return pixInstallationPath / newestVersionFound / L"WinPixGpuCapturer.dll";
    }
    

GPU capture

更多细节可以参考这篇文章GPU Captures - PIX on Windows (microsoft.com)

运行了.exe文件后即可绑定该运行程序
image-20230406151443532

随后点击该相机按钮会生成一张帧画面
image-20230406151506106

单击该结果图,会跳转到如下界面,默认情况下该界面只显示与呈现工作相关的event
image-20230406151552379

点击左侧的"Enable",将显示GPU占用率
image-20230406152446255

在pipeline中,可以查看哪些资源绑定到管道、着色器代码、输入、输出和当前绑定的 rendertarget
image-20230406152842453

查看顶点缓冲区中对象当前的值
image-20230406154928358

debug shader.对于PS,点击上图中左下角的"RTV 0",再点击"Debug Pixel";对于VS,需要点击"VS"中的"Output",再右击顶点,随后Debug即可
image-20230406153918783
image-20230406153941625
image-20230406154430436

reference

Download - PIX on Windows (microsoft.com)

Configuring PIX to access PDBs for CPU Captures - PIX on Windows (microsoft.com)

Programmatic Capture - PIX on Windows (microsoft.com)

WinPixEventRuntime - PIX on Windows (microsoft.com)

Taking a Capture - PIX on Windows (microsoft.com)

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/chenglixue/p/17293046.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!