Функции Direct3D 11.2

В Direct3D 11.2 добавлены следующие функции, которые входят в состав Windows 8.1, Windows RT 8.1 и Windows Server 2012 R2.

Плитки ресурсов

Direct3D 11.2 позволяет создавать фрагментированные ресурсы, которые можно рассматривать как большие логические ресурсы, использующие небольшие объемы физической памяти. Мозаичные ресурсы полезны (например, с ландшафтом в играх и пользовательским интерфейсом приложения).

Плитки ресурсов создаются путем указания флага D3D11_RESOURCE_MISC_TILED . Для работы с ресурсом с плиткой используйте следующие API:

Дополнительные сведения о ресурсах с плитками см. в разделе Плитки ресурсов.

Проверка поддержки мозаичного ресурса

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

HRESULT hr = D3D11CreateDevice(
    nullptr,                    // Specify nullptr to use the default adapter.
    D3D_DRIVER_TYPE_HARDWARE,   // Create a device using the hardware graphics driver.
    0,                          // Should be 0 unless the driver is D3D_DRIVER_TYPE_SOFTWARE.
    creationFlags,              // Set debug and Direct2D compatibility flags.
    featureLevels,              // List of feature levels this app can support.
    ARRAYSIZE(featureLevels),   // Size of the list above.
    D3D11_SDK_VERSION,          // Always set this to D3D11_SDK_VERSION for Windows Store apps.
    &device,                    // Returns the Direct3D device created.
    &m_d3dFeatureLevel,         // Returns feature level of device created.
    &context                    // Returns the device immediate context.
    );

if (SUCCEEDED(hr))
{
    D3D11_FEATURE_DATA_D3D11_OPTIONS1 featureData;
    DX::ThrowIfFailed(
        device->CheckFeatureSupport(D3D11_FEATURE_D3D11_OPTIONS1, &featureData, sizeof(featureData))
        );

    m_tiledResourcesTier = featureData.TiledResourcesTier;
}

Расширенная поддержка устройств WARP

Direct3D 11.2 расширяет поддержку устройств WARP , которые создаются путем передачи D3D_DRIVER_TYPE_WARP в параметре DriverTypeD3D11CreateDevice. Программный отрисовщик WARP в Direct3D 11.2 обеспечивает полную поддержку уровня функций Direct3D 11_1, включая мозаичный ресурс, IDXGIDevice3::Trim, общие поверхности BCn, minblend и map default. Двойная поддержка в шейдерах HLSL также включена вместе с поддержкой 16x MSAA.

Добавить заметки к графическим командам

Direct3D 11.2 позволяет примечать графические команды с помощью следующих API:

Связывание шейдера HLSL

Windows 8.1 добавляет отдельную компиляцию и связывание шейдеров HLSL, что позволяет программистам графики создавать предварительно скомпилированные функции HLSL, упаковывать их в библиотеки и связывать их с полными шейдерами во время выполнения. По сути, это эквивалент отдельной компиляции, библиотек и компоновки C/C++ и позволяет программистам создавать предварительно скомпилированные коды HLSL, когда становятся доступны дополнительные сведения для завершения вычислений. Дополнительные сведения об использовании компоновки шейдеров см. в разделе Использование связывания шейдеров.

Выполните эти действия, чтобы создать окончательный шейдер с помощью динамической компоновки во время выполнения.

Создание и использование связывания шейдеров

  1. Создайте объект компоновщика ID3D11Linker , который представляет контекст связывания. Один контекст нельзя использовать для создания нескольких шейдеров; контекст компоновки используется для создания одного шейдера, а затем контекст компоновки отбрасывается.
  2. Используйте D3DLoadModule для загрузки и задания библиотек из своих blob-объектов.
  3. Используйте D3DLoadModule для загрузки и задания большого двоичного объекта шейдера записи или создания шейдера FLG.
  4. Используйте ID3D11Module::CreateInstance для создания объектов ID3D11ModuleInstance , а затем вызовите функции этих объектов, чтобы повторно привязать ресурсы к их конечным слотам.
  5. Добавьте библиотеки в компоновщик, а затем вызовите ID3D11Linker::Link , чтобы создать окончательный байтовый код шейдера, который затем можно загрузить и использовать в среде выполнения так же, как полностью предварительно скомпилированный и связанный шейдер.

Граф связывания функций (FLG)

Windows 8.1 также добавляется граф связывания функций (FLG). FlG можно использовать для создания шейдеров, состоящих из последовательности предварительно скомпилированных вызовов функций, которые передают значения друг другу. При использовании FLG нет необходимости писать HLSL и вызывать компилятор HLSL. Вместо этого структура шейдера задается программным способом с помощью вызовов API C++. Узлы FLG представляют входные и выходные сигнатуры и вызовы предкомпилированных функций библиотеки. Порядок регистрации узлов вызова функции определяет последовательность вызовов. Узел входной сигнатуры должен быть указан первым, а выходной узел сигнатуры — последним. Ребра FLG определяют, как значения передаются от одного узла к другому. Типы данных передаваемых значений должны быть одинаковыми; неявное преобразование типов отсутствует. Правила формирования и поворота соответствуют поведению HLSL, и в этой последовательности значения можно передавать только вперед. Сведения об API FLG см. в разделе ID3D11FunctionLinkingGraph.

Компилятор HLSL для папки "Входящие"

Компилятор HLSL теперь является почтовым ящиком Windows 8.1 и более поздних версий. Теперь большинство API для программирования шейдеров можно использовать в приложениях Магазина Windows, созданных для Windows 8.1 и более поздних версий. Многие API для программирования шейдеров не удалось использовать в приложениях Магазина Windows, созданных для Windows 8. Справочные страницы по этим API были помечены заметкой. Но некоторые API-интерфейсы шейдеров (например, D3DCompileFromFile) по-прежнему можно использовать только для разработки приложений Магазина Windows, а не в приложениях, которые вы отправляете в Магазин Windows; Справочные страницы для этих API по-прежнему помечаются заметкой.

Новые возможности Direct3D 11