Отладчик HLSL
Отладчик HLSL, являющийся одним из инструментов диагностики графики в Visual Studio, помогает понять, как код шейдера HLSL работает с данными графики, которые были записан во время сеанса захвата диагностики графики.
Это отладчик HLSL:
Что такое отладчик HLSL
Отладчик HLSL может помочь понять проблемы, возникающие в коде шейдера. Отладка кода HLSL в Visual Studio напоминает отладку кода, написанного на других языках, например на C++, C# или Visual Basic. Вы можете отслеживать содержимое переменных, устанавливать точки останова, пошагово выполнять код и перемещаться по стеку вызовов, как и при отладке кода на других языках.
Однако поскольку GPU обеспечивают высокую производительность за счет выполнения кода шейдера в нескольких сотнях потоков одновременно, отладчик HLSL предназначен для работы совместно с другими инструментами диагностики графики, предоставляя информацию в наиболее понятном виде. Инструменты диагностики графики воспроизводят захваченные кадры, используя данные, которые были записаны в журнал графики; отладчик HLSL не отслеживает работу GPU в режиме реального времени во время выполнения кода шейдеров. Поскольку журнал графики содержит достаточно информации для воспроизведения любой части вывода графики, а диагностика графики предоставляет средства, которые могут помочь точно выявить пиксель и событие, где произошла ошибка, отладчик HLSL должен имитировать только точный поток шейдера, интересующий пользователя. Это означает, что работу шейдера можно имитировать на ЦП, где хорошо видны все выполняемые операции. Именно благодаря этому работа отладчика HLSL похожа на отладку процессов на ЦП.
Однако отладчик HLSL в настоящее время имеет следующие ограничения:
невозможно отлаживать приложение и его код шейдера одновременно. Однако можно выбирать между ними;
в окно контрольных значений можно добавлять переменные и регистры, однако выражения не поддерживаются.
Тем не менее отладчик HLSL обеспечивает лучшую, более приближенную к ЦП, среду отладки по сравнению с другими средствами.
Режим «Изменить и применить» для шейдеров HLSL
Отладчик шейдеров HLSL не поддерживает режим «Изменить и продолжить» так, как отладчик ЦП, потому что модель выполнения графического процессора не позволяет отменить состояние шейдера. Вместо этого отладчик HLSL поддерживает режим «Изменить и применить», который позволяет изменить исходные файлы HLSL, а затем выбрать команду Применить, чтобы повторно создать кадр и увидеть результаты изменений. Измененный код шейдера сохраняется в отдельном файле с целью поддержания целостности исходного файла HLSL проекта, но если вы удовлетворены изменениями, вы можете выбрать команду Копировать в…, чтобы скопировать изменения в проект. С помощью этой функции вы можете быстро выполнять итерацию кода шейдера, содержащего ошибки, и избежать затратных операций повторного построения и захвата в рамках рабочего процесса отладки HLSL.
Важно!
Измененный шейдер не применяется для анализа кадров.
Дизассемблирование HLSL
Отладчик шейдеров HLSL предоставляет код сборки шейдеров HLSL справа от исходного кода HLSL.
Отладка кода HLSL
Отладчик HLSL можно запускать из окна Этапы графического конвейера или из раздела Журнал пикселей графики.
Запуск отладчика HLSL из окна "Этапы графического конвейера"
В окне Этапы графического конвейера найдите этап конвейера, связанный с шейдером, который требуется отладить.
Под заголовком этапа конвейера выберите команду Начать отладку, обозначенную небольшой зеленой стрелкой.
Примечание
Эта точка входа в отладчик HLSL отлаживает только первый поток шейдера для соответствующего этапа, то есть первую обрабатываемую вершину или пиксель.Для доступа к другим потокам этих этапов шейдера можно использовать Журнал пикселей графики.
Запуск отладчика HLSL из журнала пикселей графики
В Журнале пикселей графики разверните вызов рисования, связанный с шейдером, который требуется отладить. Каждый вызов рисования может соответствовать нескольким примитивам.
В данных вызова рисования разверните примитив, результирующий вклад в цвет которого предположительно содержит ошибку в коде шейдера. Если ошибку могут содержать несколько примитивов, выберите первый их них, чтобы избежать накопления ошибок, которое может затруднить диагностику проблемы.
В данных примитива укажите, что следует отлаживать —Шейдер вершин или Шейдер пикселей. Выберите шейдер вершин, если вы предполагаете, что шейдер пикселей работает правильно, но формирует неверный вклад в цвет, поскольку шейдер вершин передает ему неправильные константы. В противном случае следует отлаживать шейдер пикселей.
Справа от выбранного шейдера выберите команду Начать отладку, обозначенную небольшой зеленой стрелкой.
Примечание
Эта точка входа в отладчик HLSL отлаживает поток шейдера пикселей, соответствующего выбранному вызову рисования, примитиву или пикселю, или потоки шейдера вершин, результаты которых интерполируются выбранным вызовом рисования, примитивом или пикселем.В случае шейдеров вершин можно дополнительно уточнить точку входа (до конкретной вершины), развернув сведения шейдера вершин.
Примеры использования отладчика HLSL для устранения ошибок шейдеров см. в разделе Примеры диагностики графики и в пошаговых руководствах, указанных в разделе "См. также".
См. также
Задачи
Пошаговое руководство. Отсутствие объектов вследствие заливки вершин
Пошаговое руководство. Отладка ошибок отрисовки, возникающих из-за заливки
Пошаговое руководство. Использование диагностики графики для отладки вычислительного шейдера