Поделиться через


Общие сведения о диагностике графики

Диагностика графики помогает отлаживать ошибки отрисовки в играх и приложениях DirectX.

Требования Visual Studio 2013

Для использования диагностики графики в Visual Studio 2013 необходим один из следующих выпусков:

  • Visual Studio 2013 Ultimate

  • Visual Studio 2013 Premium

  • Visual Studio 2013 Professional

  • Visual Studio 2013 Express для Windows

Примечание

Visual Studio 2013 Express для Windows Desktop не поддерживает функции диагностики графики.

Требования к операционной системе и SDK

Windows SDK для Windows 8,1 устанавливает компоненты среды выполнения, которые требуются для диагностики графики и поддерживает разработку для Windows 8,1 и Windows 8. Чтобы использовать диагностику графики в Windows 7 и Windows Vista, необходимо установить один из следующих пакетов SDK.

  • Windows SDK (версия 7.1)

  • DirectX SDK (июнь 2010)

Совместимость версий DirectX

Диагностика графики поддерживает приложения, использующие Direct3D 10, Direct3D 10.1, Direct3D 11, Direct3D 11.1 и Direct3D 11.2 и предоставляет ограниченную поддержку приложений, использующих Direct2D. Она не поддерживает приложения, использующие предыдущие версии Direct3D, DirectDraw или другие графические API.

Windows 8.1 и Direct3D 11.2

В DirectX 11.2 в Windows 8,1 появились новые функции, поддерживающие захват графических данных во время выполнения. В Windows 8,1 для всех версий DirectX, поддерживаемых Windows 8,1, используется только новый режим захвата во время выполнения, известный как надежный захват.Надежный захват также поддерживает новые возможности Direct3D 11.2.

Поддержка Windows 8 и Windows 7

Так как предыдущие версии Windows не поддерживают DirectX 11.2, надежный захват недоступен на этих платформах. Вместо него приложения, выполняющиеся в Windows 8 и Windows 7, используют предыдущий метод захвата на основе перенаправления, известный как устаревший режим захвата. Так как необходимость в его поддержке в Windows 8,1 отсутствует, устаревший режим захвата не рекомендуется к использованию. Однако он по-прежнему доступен для поддержки приложений, выполняющихся в Windows 8 или Windows 7.

Ограниченная поддержка Direct2D

Поскольку Direct2D является API пользовательского режима, основанным на Direct3D, диагностику графики можно использовать для отладки проблем отрисовки в приложениях, использующих технологию Direct2D. Однако поскольку регистрируются только базовые события Direct3D, а не события Direct2D более высокого уровня, события Direct2D не будут отображаться в списке событий графики. Кроме того, поскольку связь между событиями Direct2D и результирующими событиям Direct3D не всегда очевидна, отладка проблем отрисовки в приложениях с Direct2D с помощью диагностики графики может быть не очень удобной. Тем не менее диагностику графики можно использовать для получения информации о низкоуровневых проблемах отрисовки в приложениях, использующих Direct2D.

Изменения пользовательского интерфейса в Visual Studio 2013 с обновлением 3

Начиная с Visual Studio 2013 с обновлением 3 окна средства диагностики графики размещаются в отдельной копии оболочки Visual Studio. Это позволяет уменьшить количество окон средства, занимающих ограниченное пространство в главном окне интегрированной среды разработки Visual Studio. В настраиваемой оболочке Visual Studio, в которой теперь размещаются средства диагностики графики и которая называется Visual Studio Graphics Analysis, нет ненужных меню и параметров, но в остальном средства диагностики графики и рабочие процессы остаются такими же, как и в предыдущих версиях Visual Studio.

Есть два существенных отличия.

  1. При запуске приложения в режиме диагностики графики в Visual Studio больше не выводится текущая версия документа журнала графики. Вместо этого Visual Studio предоставляет новый интерфейс захвата. Вот как выглядит новый интерфейс захвата:

    Средство использования GPU.

    В интерфейсе можно захватывать отдельные кадры или последовательности кадров, помещая их в журнал графики, а также просматривать графики, на которых в реальном времени отображается частота кадров приложения и время отрисовки каждого кадра в миллисекундах.

  2. Изменять код в среде "Анализ графики" нельзя. Если вы попытаетесь открыть код для изменения в этой среде, он откроется в главном окне интегрированной среды разработки Visual Studio и получит фокус.

Этот интерфейс тот же, что и в Visual Studio. Чтобы запустить Visual Studio Graphics Analysis, выберите один из кадров, перейдя по ссылке Кадр... над эскизом или дважды щелкнув эскиз.

Использование диагностики графики для отладки проблемы отрисовки

Отладка проблем отрисовки в приложении, насыщенном графикой, представляет собой более сложный процесс, чем простой запуск отладчика и пошаговое выполнение кода. В каждом кадре создаются сотни тысяч уникальный пикселей, каждый из которых соответствует сложному набору состояний, данных, параметров и кода; при этом, вероятно, лишь несколько пикселей будут вызывать проблему, которую вы пытаетесь обнаружить. Ситуация дополнительно усложняется тем, что код, формирующий эти пиксели, выполняется на специализированном оборудовании, которое параллельно обрабатывает сотни таких пикселей. Традиционные инструменты и методы отладки, которые трудно применять даже в коде с несколькими потоками, являются неэффективными при работе с такими большими объемами данных.

Инструменты диагностики графики в Visual Studio предназначены для упрощения поиска источника проблем отрисовки путем запуска с визуальными артефактами, которые указывают на неполадку, и последующего отслеживания в обратном порядке соответствующего кода шейдера, графического конвейера, вызовов рисования, ресурсов и состояния устройства, а также даже собственного исходного кода приложения.

Ниже приведены некоторые из типов проблем отрисовки, в устранении которых может помочь Visual Studio.

  • Состояние устройства
    Правильная конфигурация графических устройств имеет большое значение, поскольку она определяет, как конвейер графики интерпретирует данные, связанные с каждым вызовом рисования, и объединяются результаты вызовов рисования. Например, если состояние устройства указывает порядок обхода вершин по часовой стрелке, любая модель, которая определяет вершины против часовой стрелки, будет отрисовываться неправильно. Проблемы состояния устройства бывает трудно диагностировать, поскольку исходная проблема в коде часто находится далеко от объектов, на которые она влияет. С помощью диагностики графики можно просматривать текущее состояние устройства в любой момент во время отрисовки.

  • Неинициализированные или неверные постоянные буферы и параметры
    Графические приложения используют постоянные буферы и параметры для передачи дополнительных данных в вызовы рисования или наборы вызовов рисования. Например, данные могут задавать различные расположения или внешний виды различных объектов. Если данные не инициализированы или содержат неверные значения, соответствующий объект отрисовывается неправильно или, возможно, вообще не отрисовывается. Подобные проблемы бывает трудно выявлять, поскольку не всегда понятно, связана проблема с данными или же кодом шейдера, который использует их. Также может быть сложно определить, какие шейдеры, постоянные буферы и параметры соответствуют той или иной ошибке. Диагностика графики позволяет определить, какие шейдеры, постоянные буферы и параметры применяются к каждому вызову рисования и просмотреть соответствующее содержимое.

  • Ошибки шейдера
    Ошибки в коде приложения практически неизбежны, будь то код на C++ или на высокоуровневом языке шейдер (HLSL). Однако отладка кода HLSL обычно была сложнее, поскольку в нем не было таких широких возможностей отладки, как в C++ и других языках. Диагностика графика дает возможность использовать традиционные инструменты отладки в HLSL, позволяя выполнять код по шагам, задавать точки останова, отслеживать содержимое переменных, параметров и постоянных буферов.

Как работает диагностика графики

Чтобы использовать диагностику графики, необходимо сначала записать сведения о том, как приложение использует API Direct3D по мере его выполнения, а затем проверить записанное поведение. Для указанных кадров записываемые сведения включают вызовы API — например, очистку экрана, рисование геометрических фигур, вызов вычислительных шейдеров или изменение состояния графического устройства — и их аргументы и копии буферов и объектов, задаваемые косвенными ссылками. Кроме того, вызовы API, относящиеся к настройке и инициализации, записываются до отрисовки каких-либо кадров. Эти сведения записываются в файл журнала графики (.vsglog).

Поведение отрисовки, записанное в журнал графики, можно повторить путем воспроизведения событий графики на компьютере разработки или на удаленном компьютере или устройстве. Компьютер воспроизведения может совпадать с компьютером или устройством, на котором был изначально записан журнал графики, или отличаться от него. В большинстве случаев для повторного воспроизведения событий графики используется графическое оборудование компьютера воспроизведения, но когда используется отладчик HLSL, воспроизведение происходит с помощью эмулированного GPU на ЦП. Использование эмулированного GPU делает возможным пошаговое выполнение кода шейдера, отслеживание значений переменных и использование других стандартных методов отладки, независимо от того, поддерживает ли графическое оборудование компьютера воспроизведения аппаратную отладку.

Примечание

Хотя большая часть сведений записывается непосредственно в журнал графики, для полноценного использования некоторых функций диагностики графики требуется дополнительная информация.Например, для полноценного использования стека вызовов графики также необходим файл базы данных программы (PDB) и исходный код приложения.Для отладки кода шейдера HLSL также требуется исходный код шейдера.(Если шейдер компилироваться с помощью компилятора шейдера D3D11.1 и данные отладки включены, исходный код шейдера регистрируется в журнале графики.)

Примечание

Так как некоторые API могут быть недоступны в предыдущих версиях Windows или DirectX, воспроизведение журналов графики, содержащих вызовы этих API, на компьютере воспроизведения, который не поддерживает их, невозможно.

Журналы графики

Журнал графики содержит один или несколько кадров, захваченных в выполняемом графическом приложении DirectX. Поскольку журнал графики является самодостаточным, эти кадры можно впоследствии воспроизвести без какой-либо внешней информации или ссылок. Это означает, что можно передавать журналы графики другим разработчикам, изучать проблемы на различных компьютерах и просматривать старые журналы графики, даже когда модели и текстуры были изменены в процессе разработки. Кроме того, можно загрузить несколько файлов журналов графики (.vsglog) одновременно для сравнения данных и результатов отрисовки.

Открытие файла журнала графики (vsglog)

  1. В Visual Studio в строке меню выберите Файл, Открыть, Файл. Откроется диалоговое окно Открытие файла.

  2. Укажите файл журнала графики (.vsglog), который требуется открыть, и нажмите кнопку Открыть.

Примечание

Вы можете извлекать, изменять и сохранять копии сеток и текстур из журнала графики с помощью графических средств, которые являются частью Visual Studio.Однако эти изменения не влияют на содержание журнала графики.Сведения об этих графических инструментах см. в разделе Работа с трехмерными ресурсами для игр и приложений.

Панель инструментов "Графика"

Панель инструментов "Графика" предоставляет быстрый доступ к командам и окнам инструментов диагностики графики.

Панель инструментов "Графика" в режиме диагностики графики

Кнопка Начать диагностику запускает приложение в режиме диагностики графики. Если приложение выполняется в режиме диагностики графики, кнопка Захватить следующий отрисованный кадр включена, и можно использовать другие кнопки для просмотра различных окон инструментов. Дополнительные сведения о выполнении приложения в режиме диагностики графики и захвата графической информации см. в разделе Запись графических сведений.

Окна инструментов диагностики графики

На следующем рисунке показано типичное расположение окон инструментов, которые используются для инспекции и отладки захваченных кадров. Каждое окно предоставляет собственную категорию информации о рассматриваемом захваченном кадре, а также об отдельных пикселях этого кадра.

Все окна отладчика графики

Панель управления DirectX

Панель управления DirectX — это компонент DirectX, который можно использовать для изменения поведения DirectX. Например, можно включить отладочную версию компонентов времени выполнения DirectX, выбрать тип выводимых сообщений отладки, а также запретить использование определенных возможностей графического оборудования для эмуляции менее мощного оборудования. Этот уровень контроля над DirectX может помочь отладить и протестировать приложения DirectX. Панель управления DirectX можно открыть из Visual Studio.

Открытие панели управления DirectX

  • В строке меню выберите Отладка, Графика, Панель управления DirectX.

См. также

Основные понятия

Отладчик HLSL