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


Новые возможности технической версии Direct3D 11 за ноябрь 2008 г.

Эта версия Direct3D 11 содержит новые функции, средства и документацию.

Элемент Описание
Тесселяции
Direct3D 11 предоставляет дополнительные этапы конвейера для поддержки тесселяции примитивов высокого порядка в режиме реального времени . Благодаря широко программируемым возможностям эта функция позволяет использовать множество различных методов для оценки поверхностей высокого порядка, включая поверхности деления с использованием методов аппроксимации, патчей Безье, адаптивной тесселяции и сопоставления смещения. Эта функция будет доступна только на оборудовании Direct3D 11 класса, поэтому для оценки этой функции необходимо использовать растеризатор ссылок. Для демонстрации тесселяции в действии проверка пример SubD11, доступный в примере браузера.
Шейдер вычислений
Шейдер вычислений — это дополнительный этап, не зависящий от конвейера Direct3D 11, который позволяет выполнять вычисления общего назначения на GPU. В дополнение ко всем функциям шейдера, предоставляемым ядром унифицированного шейдера, шейдер вычислений также поддерживает разрозненные операции чтения и записи в ресурсы через представления неупорядоченного доступа, общий пул памяти в группе выполняемых потоков, примитивы синхронизации, атомарные операторы и многие другие расширенные функции параллельного использования данных. В этом выпуске включен вариант шейдера вычислений Direct3D 11, который может работать на оборудовании Класса Direct3D 10. Поэтому можно разрабатывать вычислительные шейдеры на фактическом оборудовании, но требуется обновленный драйвер. Полная функциональность шейдера вычислений Direct3D 11 предназначена для поддержки оборудования Direct3D 11-класса, поэтому для оценки полной функциональности необходимо использовать эталонный растеризатор, пока такое оборудование не будет доступно. Для демонстрации шейдера вычислений в действии проверка образец HDRToneMappingCS11, доступный в примере браузера.
Многопоточность отрисовки
Основное отличие API от Direct3D 10 в Direct3D 11 заключается в добавлении отложенных контекстов, что позволяет масштабировать выполнение команд Direct3D, распределенных по нескольким ядрам. Отложенный контекст фиксирует и собирает такие действия, как изменения состояния и отрисовывает отправки, которые могут быть выполнены на фактическом устройстве позже. Используя отложенные контексты в нескольких потоках, приложение может распределить затраты на ЦП, необходимые в среде выполнения Direct3D11 и драйвере, на несколько ядер, что позволяет лучше использовать конфигурацию компьютера конечного пользователя. Эта функция доступна для использования на текущем оборудовании Direct3D 10, а также в эталонном растеризаторе. Для демонстрации использования API проверка пример MultithreadedRendering11, доступный в примере браузера.
Динамическое связывание шейдеров
Чтобы решить проблему комбинаторного взрыва, которая наблюдается в специализированных шейдерах для повышения производительности, Direct3D 11 вводит ограниченную форму компоновки шейдеров среды выполнения, которая обеспечивает почти оптимальную специализацию шейдеров во время выполнения приложения. Это достигается путем указания реализаций конкретных функций в коде шейдера, когда шейдер назначается конвейеру, что позволяет драйверу быстро встраивать собственные инструкции шейдера, а не заставлять драйвер перекомпилировать промежуточный язык в машинные инструкции с новой конфигурацией. Разработка шейдеров предоставляется за счет внедрения классов и интерфейсов в HLSL. Для демонстрации проверка пример динамической компоновки шейдера 11, доступный в браузере sample.
Windows Advanced Rasterizer (WARP)
Доступный в этом пакете SDK через Direct3D 11 и в конечном итоге также через Direct3D 10.1, WARP — это быстрый многоядерный растризатор масштабирования, полностью совместимый с Direct3D 10.1. Использовать эту технологию так же просто, как передать флаг D3D_DRIVER_TYPE_WARP при создании устройства.
Direct3D 10 и Direct3D 11 на оборудовании Direct3D 9 (D3D10 уровня 9)
Api Direct3D, доступный в этом пакете SDK через Direct3D 11 и в конечном итоге через Direct3D 10.1, может быть предназначен для большинства оборудования Direct3D 9, а также для Direct3D 10, Direct3D 10.1 и Direct3D 11. Это достигается путем предоставления механизма уровня компонентов, который объединяет оборудование на шесть категорий в зависимости от функциональности: 9_1, 9_2, 9_3, 10_0, 10_1 и 11_0. Карта соответствует уровню функций только в том случае, если он полностью соответствует его уровню, и каждый уровень является строгим супер-набором тех, кто находится ниже. Функциональные возможности минимально эмулируются, чтобы гарантировать отсутствие неожиданных обрывов производительности. Таким образом, такие функции, как геометрические шейдеры, недоступны для целевых объектов уровня Direct3D 9.
Двоичные файлы среды выполнения
Все двоичные файлы среды выполнения, предоставляемые в технической предварительной версии Direct3D 11, которые будут доступны в Windows 7 и Windows Vista с пакетом обновления 1 (SP1), устанавливаются вместе с пакетом SDK и помечены как бета-компоненты (т. е. D3D11_beta.DLL). Все компоненты с метками бета-версии заминированы. Чтобы создать проекты для оценки этих новых компонентов, необходимо связать их с эквивалентными библиотеками импорта с бета-метками (т. е. D3D11_beta.lib). Если у вас есть копия PDC Windows 7, заголовки, библиотеки и pdbs, предоставляемые в windows SDK со сборкой, подходят для разработки с помощью компонентов Direct3D 11, предоставляемых в Windows 7. Зарезервируйте использование заголовков, библиотек и pdbs в этом пакете SDK для бета-версий компонентов, предоставленных здесь.
D3DX11
В настоящее время D3DX11 поддерживает загрузку текстур, компиляцию шейдеров, загрузку данных и рабочие потоки для ресурсов Direct3D 11. В будущем этот компонент предоставит больше технологий, доступных в D3DX10. Функции компиляции шейдеров также предоставляются непосредственно через компонент компилятора Direct3D, описанный далее.
Компилятор HLSL и Direct3D
Компилятор HLSL имеет несколько новых функций для поддержки новых технологий, доступных в Direct3D 11. Сюда входит объектно-ориентированное программирование с помощью интерфейсов и классов, синтаксис прямого индексирования для загрузки ресурсов и "точный" ключевое слово для обеспечения того, чтобы все операции, выполняемые с определенной переменной, соответствовали строгим правилам с плавающей запятой. Почти все новые лингвистические функции имеют действительную функциональность в существующих целевых объектах шейдеров. Помимо поддержки всех шейдеров Direct3D 9, Direct3D 10, Direct3D 10.1 и Direct3D 11 компилятор HLSL также поддерживает специальные целевые объекты, необходимые для написания шейдеров для целевых объектов Direct3D 10 уровня 9. Компилятор D3D теперь доступен напрямую за пределами D3DX10 и D3DX11 через D3DCompiler.H и D3DCompiler.lib. При использовании этих новых файлов приложению не требуется связываться с D3DX для выполнения компиляции среды выполнения, а приложению не требуется включать компилятор, если требуется только функция D3DX.
Растеризатор ссылок D3D11
Эталонный растеризатор предоставляет реализацию растеризации по золотому стандарту для оценки функций Direct3D 11, которые еще не доступны на оборудовании. Растеризатор ссылок также предоставляется в качестве способа проверки точности конкретной аппаратной реализации по стандарту растеризации. Растеризатор ссылок предназначен для правильности, а не для производительности. Чтобы создать эталонное устройство, просто передайте флаг D3D_DRIVER_TYPE_REFERENCE при создании устройства.
Уровни пакета SDK для D3D11
Уровни пакета SDK для Direct3D11 предоставляют механизм отслеживания работы среды выполнения Direct3D 11 во время разработки. В настоящее время он используется для предоставления полезных отладочных сведений, которые включают не только ошибки при неправильном использовании, но и предупреждения, которые рекомендуют использовать среду выполнения и часто предоставляют подробные полезные сведения для отладки. Настоятельно рекомендуется включать выходные данные отладки из слоев пакета SDK D3D11 во время разработки, а приложение не создает выходные данные отладки во время выполнения, прежде чем оно будет выпущено или использовано с PIX для Windows для профилирования. Включить уровень отладки так же просто, как передать флаг D3D11_CREATE_DEVICE_DEBUG во время создания устройства. Разработчикам настоятельно рекомендуется использовать слои в отладочных сборках. Слои не рекомендуется использовать в сборках профилей или выпусков.
Новые примеры
В этом выпуске есть четыре новых примера.
  • Пример динамической компоновки шейдеров 11 демонстрирует использование интерфейсов шейдеров модели 5 и поддержки Direct3D 11 для связывания методов интерфейса шейдера во время выполнения.
  • В примере HDRToneMappingCS11 показано, как настроить и запустить шейдер вычислений (CS в ближайшее время), который является одной из самых интересных новых функций Direct3D 11. Хотя в образце используется только CS для реализации тонового сопоставления HDR, концепция должна легко распространяться на другие алгоритмы постобработки, а также на более общие вычисления.
  • В примере MultithreadedRendering11 показано, как разделить отрисовку между несколькими потоками с очень низкими издержками.
  • Новый пример SubD11 очень похож на пример SubD10 в пакете SDK для DirectX, за исключением того, что он был расширен для использования трех новых этапов конвейера Direct3D 11: шейдер корпуса, тесселятор и шейдер предметной области.

Функции, представленные в предыдущих выпусках