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


Функции 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 в параметре DriverType DriverTypeD3D11CreateDevice. Средство отрисовки программного обеспечения WARP в Direct3D 11.2 добавляет полную поддержку уровня функций Direct3D 11_1, включая плитки ресурсов, IDXGIDevice3::Trim, общие поверхности BCn, minblend и сопоставление по умолчанию. поддержка double в шейдерах HLSL также была включена вместе с поддержкой 16x MSAA.

Заметки о графических командах

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

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

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

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

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

  1. Создайте объект компоновщика ID3D11Linker, представляющий контекст связывания. Для создания нескольких шейдеров нельзя использовать один контекст; Контекст связывания используется для создания одного шейдера, а затем контекст связывания выброшен.
  2. Используйте D3DLoadModule для загрузки и задания библиотек из больших двоичных объектов библиотек.
  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