Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как драйвер WDDM может поддерживать сканирование ресурсов между адаптерами (CASO), уменьшая количество копий между графическими процессорами и ресурсами перекрестного адаптера с двух до одного. Эта функция доступна начиная с Windows Server 2022 и Windows 11.
Производительность pre-CASO (путь для двух копий)
Начиная с Windows 8.1 (WDDM 1.3), приложения D3D9 и DXGI могли использовать поддержку презентации между адаптерами в конфигурациях с несколькими адаптерами, таких как гибридные системы. Благодаря этой поддержке отрисовка выполняется на адаптере отрисовки (обычно дискретный GPU), а затем производится два копирования, чтобы передать содержимое на адаптер отображения (обычно интегрированный GPU) для вывода на дисплей.
- Копирование 1 производится из ресурса адаптера визуализации в ресурс перекрестного адаптера.
- Скопируйте 2 из ресурса адаптера кросс в ресурс адаптера дисплея.
Эти копии могут ограничить производительность приложений, особенно для приложений, оптимизированных для низкой задержки.
Использование CASO для оптимизации модели презентации перевернутого отображения (единственный путь копирования)
Драйверы Windows Server 2022 (WDDM 2.9) и более поздних версий могут объявить поддержку соответствующего уровня ресурсов между адаптерами, что позволяет стеку презентаций системы оптимизировать представления между адаптерами. Драйверы должны объявлять поддержку этой функции на основе собственных возможностей адаптера, независимо от конфигурации устройства, так, чтобы значение функции адаптировалось ко всем применимым конфигурациям оборудования. Это масштабирование включает, но не ограничивается одним устройством GPU с динамическим присоединением других внешних GPU.
Если адаптер отображения поддерживает CASO, система выполняет только первую копию с поверхности адаптера отрисовки на поверхность кросс-адаптера, а затем выводит изображение напрямую с поверхности кросс-адаптера. Эта функция приводит к снижению обработки, пропускной способности, мощности и задержки.
Функция CASO реализована для среды выполнения DXGI для модели презентации flip.
Изменения и дополнения DDI для CASO
Указание уровня поддержки для ресурсов, используемых между адаптерами
DXGI реализует три уровня поддержки ресурсов между адаптерами:
- Копирование в кросс-адаптерные ресурсы и из них (самый низкий уровень)
- Текстурирование с использованием кросс-адаптерных ресурсов
- Сканирование ресурсов между адаптерами (самый высокий уровень)
Каждый более высокий уровень поддержки должен гарантировать поддержку уровней под ним. Например, чтобы претендовать на поддержку сканирования ресурсов перекрестного адаптера, драйвер также должен поддерживать текстирование и копирование.
Драйверы объявляют поддержку каждого уровня, задав следующие значения битового поля DXGK_VIDMMCAPS в DXGK_DRIVERCAPS. MemoryManagementCaps:
Уровень | Значение уровня | значение DXGK_VIDMMCAPS |
---|---|---|
Уровень 1 | Поддержка копирования: копирование в и из ресурсов между адаптерами | CrossAdapterResource (предоставляется для пользовательского режима графическим ядром через бит SupportCrossAdapterResource в D3DKMT_WDDM_1_3_CAPS |
Уровень 2 | Поддержка текстур: текстуры из ресурсов кросс-адаптера. | CrossAdapterResourceTexture (включает поддержку представления ресурсов шейдера, неупорядоченного представления доступа и целевого объекта отрисовки). |
Уровень 3 | Поддержка CASO: сканирование из ресурсов перекрестного адаптера | CrossAdapterResourceScanout |
Графическое ядро завершает запуск адаптера сбоем, если он не указывает на поддержку в виде надмножества для трех уровней. Например, параметр CrossAdapterResource должен быть задан, если задан CrossAdapterResourceTexture .
Требования к поддержке уровня 1
Ресурсы кроссадаптера по-прежнему определены так же, как и для поддержки копирования WDDM 1.3 уровня 1.
Требования к поддержке уровня 2
Требования аналогичны возможности пользовательского драйвера режима D3D12 CrossAdapterRowMajorTextureSupported (cap); то есть устройство поддерживает представления ресурсов шейдера, неупорядоченные представления доступа и представления целевых объектов отрисовки кросс-адаптерных текстур с построчной разметкой. Однако, в то время как CrossAdapterRowMajorTextureSupported D3D12 требует поддержки всех соответствующих форматов текстур, это ограничение уровня 2 требует, как минимум, поддержки только в форматах DisplayScanOut, перечисленных в требованиях к поддержке уровня 3.
Так как ограничение D3D12 является супермножеством второго уровня, D3D12CreateDevice также проверяет, что ограничение драйвера ядра CrossAdapterResourceTexture задано, если задано его ограничение CrossAdapterRowMajorTextureSupported, и создание устройства завершается неудачно, если это не так.
Требования к поддержке уровня 3
Система должна иметь возможность выполнять поддерживаемые возможности переворота, объявленные драйвером в DXGK_FLIPCAPS, для ресурсов межадаптерного взаимодействия следующих минимальных спецификаций:
- Размер основного буфера между адаптерами 1920 x 1080 или меньше
- Формат пикселя буфера любого из поддерживаемых форматов DisplayScanOut . Начиная с Windows 10 версии 20H1, эти форматы:
- DXGI_FORMAT_R16G16B16A16_FLOAT
- DXGI_FORMAT_R10G10B10A2_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM
- DXGI_FORMAT_R8G8B8A8_UNORM_SRGB
- DXGI_FORMAT_B8G8R8A8_UNORM
- DXGI_FORMAT_B8G8R8A8_UNORM_SRGB
Если драйвер поддерживает высвобождение ресурсов для кросс-адаптеров в большем количестве форматов текстур, то он также должен обеспечивать создание текстур из этих форматов в соответствии с требованиями уровня поддержки.
Примечание.
Среда выполнения DXGI запрашивает драйвер для поддержки CrossAdapterResourceScanout . Если это поддерживается, стек презентации использует метод одноразового копирования. Поэтому драйверы, заявляющие о поддержке CrossAdapterResourceScanout, обязаны поддерживать DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI. Кроме того, он должен поддерживать все соответствующие интерфейсы данных, связанные с презентацией, для межадаптерных первичных объектов, соответствующих указанным выше минимальным спецификациям. Ниже приведены несколько примеров: pfnCreateResource, pfnCheckMultiplaneOverlaySupport и pfnPresentMultiplaneOverlay/pfnPresent1. Для получения дополнительной информации см. раздел Поддержка многопланового наложения. Дополнительные сведения о выходе из CASO см. в разделе "DDIs драйвера" для оптимизации презентации.
Оба этих уровня сопровождают тесты HLK для проверки.
Поддержка флага StaticCheck для DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3
Флаг StaticCheck был добавлен в DXGK_MULTIPLANE_OVERLAY_FLAGS в WDDM 3.0. Этот флаг расширяет использование DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI для поддержки CASO. Этот флаг позволяет DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 запрашивать драйвер, чтобы определить, способна ли плоскость, помеченная флагом StaticCheck, на вывод изображения. Этот вызов является одноразовым и не должен влиять на реальное поведение презентации. Таким образом, драйверы, выполняющие любое кэширование сведений из DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3, не должны включать сведения из DDI-вызовов с плоскостью StaticCheck. Они должны просто выполнять определение поддержки автономным или статическим способом.
DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 с установленным флагом StaticCheck гарантированно:
- Иметь ровно одну плоскость, помеченную флагом
- Не содержит информации о плоскости PostComposition
Вызов DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 с набором флагов StaticCheck используется из процесса приложения из DXGI во время создания буфера, например во время создания цепочки буферов или ResizeBuffers, в качестве наилучшей попытки определить, поддерживается ли CASO для текущей конфигурации оборудования.
Специальный случай HybridIntegrated
Важно отметить, что драйверы HybridIntegrated предназначены для поддержки сканирования уровня 3. Начиная с версии WDDM 3.0, драйверы HybridIntegrated обязаны объявлять о поддержке CrossAdapterResourceScanout. Тест HLK проверяет это требование.
Существующие гибридные ограничения могут рассматриваться для отмены в будущем. Таким образом, важно, чтобы возможность CrossAdapterResourceScanout была отделена, что позволит обеспечить большую гибкость для будущего развития в этой области. Следовательно, даже драйверы, которые не являются HybridIntegrated , могут задать уровень поддержки кроссадаптера соответствующим образом.
Изменения ядра графики
Начиная с версии WDDM 2.9, для поддержки ресурсов между адаптерами были внесены следующие дополнения и изменения:
Значение KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT было добавлено в существующее перечисление KMTQUERYADAPTERINFOTYPE
Добавлена структура D3DKMT_CROSSADAPTERRESOURCE_SUPPORT и перечисление D3DKMT_CROSSADAPTERRESOURCE_SUPPORT_TIER
Пример использования:
D3DKMT_CROSSADAPTERRESOURCE_SUPPORT KernelSupport = {};
D3DKMT_QUERYADAPTERINFO QueryAdapterInfo;
QueryAdapterInfo.hAdapter = m_hAdapter;
QueryAdapterInfo.Type = KMTQAITYPE_CROSSADAPTERRESOURCE_SUPPORT;
QueryAdapterInfo.pPrivateDriverData = &KernelSupport;
QueryAdapterInfo.PrivateDriverDataSize = sizeof( KernelSupport );
VERIFY_SUCCEEDED(D3DKMTQueryAdapterInfo(&QueryAdapterInfo));
// Use KernelSupport.SupportTier as appropriate
DDIs драйвера для оптимизации презентаций
Драйверы используют следующие DDIs, чтобы указать, поддерживается ли сканирование между адаптерами:
DXGK_VIDMMCAPS::CrossAdapterResourceScanout cap
Система запрашивает эту возможность рано, чтобы определить, поддерживает ли драйвер функцию CASO.
Если драйвер поддерживает CASO, DXGI продолжает работать с одношаговым путем CASO; в противном случае DXGI возвращается к двухшаговому пути.
-
В пути CASO с одной копией DXGI создает кросс-адаптерный ресурс в качестве основного на адаптере отображения через pfnCreateResource. Драйвер должен оцениваться на основе свойств ресурса, может ли он сканировать этот ресурс.
Если драйвер поддерживает сканирование на основе свойств ресурса, DXGI продолжает использовать путь CASO с одним копированием. В противном случае драйвер должен отказаться от сканирования, возвращая DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT. В этом случае DXGI возвращается к пути двух копирования. Этот резервный вариант должен произойти только в том случае, если свойства ресурса выходят за рамки минимальных требований, указанных в требованиях к поддержке уровня 3.
pfnCheckMultiplaneOverlaySupport DDI
В соответствии с текущим поведением диспетчер Windows (DWM) вызывает DDI драйвера отображения pfnCheckMultiplaneOverlaySupport DDI, чтобы точно определить, может ли основная поверхность быть отсканирована. При поддержке драйвера происходит сканирование. В противном случае DWM возвращается в режим композиции DWM.
Представления, составленные в DWM, скорее всего, будут менее предпочтительны, чем независимый флип (iFlip) по пути с двумя копиями или iFlip по пути CASO с одной копией. Таким образом, могут быть распространенные сценарии отображения, в которых пропускная способность презентации ограничена, например вращаемые или несколько дисплеев, где драйверы могут последовательно завершать сбой поддержки pfnCheckMultiplaneOverlaySupport в DWM, скорее всего, что приводит к снижению производительности, чем путь двух копирования.
Чтобы смягчить негативный опыт при возврате на резервный режим, DXGI вызывает pfnCheckMultiplaneOverlaySupport во время создания буфера, где ресурс кроссадаптера рассматривается как плоскость, помеченная флагом StaticCheck, чтобы с высокой точностью проверить, может ли драйвер осуществлять сканирование с учетом существующих известных характеристик пропускной способности. Если поддерживается, DXGI продолжает работу в режиме одного копирования CASO; в противном случае он переходит к режиму двух копирований.
Тестирование HLK
Добавлено требование и функция HLK WDDM 3.0 с соответствующими тестами HLK. Это требование связано с DXGK_VIDMMCAPS поддержкой, которую могут объявить драйверы; в частности, CrossAdapterResourceTexture и CrossAdapterResourceScanout.
Текстура ресурса для кросс-адаптера
Был добавлен тест HLK для проверки выполнения операций представления ресурсов шейдера (SRV) с ресурсами, общими для нескольких адаптеров.
Для D3D12 существующий тест HLK "D3D12 — кроссплатформенный ресурс DX12" для device.Graphics.AdapterRender.D3D12Core.CoreRequirement был добавлен в; в частности, тестовый случай CrossAdapterResource::CrossAdapterTextureSRV.
Добавлена в этот тестовый случай HLK проверка отношения суперсовокупности между параметром KMD CrossAdapterResourceTexture и параметром D3D12 UMD CrossAdapterRowMajorTextureSupported. Аналогично, в D3D12CreateDevice добавлена логика проверки, что если установлена настройка UMD, то должна быть установлена настройка драйвера уровня 2, и создание устройства завершится неудачей, если это условие не выполнено.
Для D3D11 был добавлен тот же тестовый случай в тест HLK для Device.Graphics.WDDM30.Render.CrossAdapterScanOut; в частности, D3DConf_11_CrossAdapterResource::CrossAdapterResourceSRV.
Перекрестное сканирование ресурсов адаптера
Добавлены следующие тесты HLK:
Device.Graphics.WDDM30.Render.CrossAdapterScanOut
- Тест HLK, чтобы убедиться, что драйверы могут успешно создавать кросс-адаптерные первичные ресурсы без отказа от поведения сканирования с помощью флага DXGI_DDI_PRIMARY_DRIVER_FLAG_NO_SCANOUT.
- Тест HLK для проверки поддержки этих драйверов DXGKDDI_CHECKMULTIPLANEOVERLAYSUPPORT3 DDI.
- Тест HLK вручную для тестировщика, чтобы убедиться, что:
- Отсканированная межадаптерная поверхность свободна от визуального искажения, артефактов или неожиданного разрыва.
- Поверхность перекрестного адаптера сканируется напрямую без каких-либо предварительных внутренних преобразований или копий.
Эти комплексные тесты также естественным образом проверяют, поддерживаются ли CheckMultiplaneOverlaySupport и Present DDI для ресурсов между адаптерами. Тестовое приложение вручную имеет определенные требования к оборудованию, такие как высокий разрешение и монитор высокой частоты обновления. Дополнительные сведения см. в справочном документе , сопровождающем тест.
Устройство.Графика.WDDM30.Рендер.ОсновноеТребование
- Тест HLK для проверки того, что драйверы, объявляющие возможность HybridIntegrated, также объявляют возможность CrossAdapterResourceScanout.
System.Fundamentals.Graphics.HybridGraphics.MultiGPU
- Системный HLK тест, позволяющий изготовителям оборудования запускать эти тесты на гибридных девайсах, способных использовать маршрут с одной копией в DXGI в рамках сквозной системы проверки.