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


Отладка графики DirectX

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

Отладка графики DirectX в Visual Studio

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

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

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

Hh315751.collapse_all(ru-ru,VS.110).gifСостояние устройства

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

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

Hh315751.collapse_all(ru-ru,VS.110).gifОшибки шейдера

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

Диагностика графики может помочь обнаружить и устранить ошибки шейдера, поскольку она позволяет отлаживать код HLSL.С помощью сведений, записанных в журнал графики, отладчик HLSL может «воспроизвести» события рисования на уровне шейдера, чтобы можно было перейти к пошаговому выполнению, установить точки останова и просмотреть содержимое временных переменных, параметров и постоянных буферов.Чтобы помочь сосредоточиться на правильной вещи, диагностика графики предоставляет точки входа для отладчика HLSL из событий рисования (через окно Этапы графического конвейера) и из отдельных пикселей (через Журнал пикселей графики).

Hh315751.collapse_all(ru-ru,VS.110).gifНеинициализированные или неверные параметры и константы

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

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

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

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

Hh315751.collapse_all(ru-ru,VS.110).gifОграниченная поддержка Direct2D

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

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

Windows 8 установит компоненты среды выполнения, которые необходимы для функций отладки графики, описанные в этом документе.Для использования этих функций в Windows 7 и Windows Vista, необходимо установить один из следующих пакетов средств разработки программного обеспечения (SDK):

  • DirectX SDK (июнь 2010)

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

См. также

Заголовок

Описание

Диагностика графики

Описывает способ использования диагностики графики для поиска и отладки проблем отрисовки в приложениях на основе DirectX.

Примеры диагностики графики

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

Отладка в Visual Studio

Предоставляет функциональные возможности отладки в Visual Studio .

DirectX Graphics and Gaming

Ссылки на статьи, посвященные технологии графики DirectX.