Новые возможности драйверов дисплея и графики Windows 10
На этой странице описаны новые возможности драйверов дисплея и графики для Windows 10 версии 2004 (WDDM 2.7). Сведения о функциях, добавленных в предыдущих версиях WDDM 2.X, см. в статье Новые возможности предыдущих версий WDDM 2.X.
Шейдеры сетки
Шейдеры сетки — это средство повышения гибкости и производительности графического конвейера Direct3D 12 при использовании растеризации. Они выступают в качестве новой замены для ассемблеров входных данных, в частности этапов вершинного и геометрического шейдеров, заменяя некоторые из предопределенных функций ассемблеров входных данных поведением гибкой функции. С помощью шейдеров сетки приложения могут применять отбраковку раньше и, следовательно, более эффективно, чем сборщик входных данных. Примитивы можно отбирать без обработки данных индекса GPU, что очень полезно, так как число примитивов трехмерных приложений со временем становится все выше и выше.
В случае подключения пиксельного шейдера выходные данные примитивов из сетчатого шейдера будут передаваться непосредственно на стадию шейдера пикселей.
Функция шейдера сетки представляет этап шейдера сетки вместе с новым этапом: шейдером усиления. Шейдеры усиления заменяют этап тесселяции GPU. Приложения настраивают шейдер усиления для вызова шейдера сетки несколько раз по мере необходимости. Шейдеры усиления — это необязательный шаг, который позволяет приложению динамически управлять уровнями геометрической детализации.
Функция шейдера сетки включает новые конструкции языка заливки, а также изменения UMD. Для создания отчетов о возможностях устройств сетки шейдеров существует поле с именем MeshShaderTier, сообщаемоечерез D3D12DDI_D3D12_OPTIONS_DATA_0073. Так как это представляет два новых этапа шейдера, в D3D12DDIARG_CREATE_PIPELINE_STATE_0075 есть два новых поля: hMeshShader и hAmplificationShader. Чтобы запустить все, есть список команд DDI PFND3D12DDI_DISPATCH_MESH_0074 , а также D3D12DDI_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH для непрямой отправки.
DirectX Raytracing (DXR) 1.1
В WDDM 2.7 добавлены некоторые новые функции и улучшения, которые создаются на основе первоначального выпуска DXR в Direct3D 12.
Встраивание лучей — это альтернативная форма луча, в которой не используются отдельные динамические шейдеры или таблицы шейдеров. Это дает разработчику гибкость и некоторое удобство во всех тех случаях, когда шейдеры, использующие dxR 1.0-style raytracing, называют их "динамическим шейдером" на основе лучей, не подходят. Встроенные лучи доступны на любой стадии шейдера, включая вычислительные шейдеры, пиксельные шейдеры и т. д. Это упоминается здесь как что-то доступное в WDDM 2.7, хотя это не соответствует изменению DDI.
Приложения могут вызывать DispatchRays через ExecuteIndirect, что позволяет настроить работу по вытягивание лучей в GPU. Это может быть полезно для приложений, которые стремятся отбирать, сортировать или настраивать лучи работы, и они используют для этого шейдеры. При этом теперь имеется D3D12DDI_INDIRECT_ARGUMENT_TYPE значение перечисления. При использовании непрямой диспетчеризации лучей каждый элемент непрямого буфера выполнения имеет тип D3D12DDIARG_DISPATCH_RAYS_0054.
Затраты на создание состояния конвейера с учетом различных сочетаний шейдеров являются одной из тех сложных проблем в трехмерной компьютерной графике. DXR 1.1 содержит что-то, что может помочь: add-to-state-object. AddToStateObject(), предоставляемый в API, позволяет приложениям добавлять шейдеры к существующему объекту состояния с затратами на ЦП, пропорциональными только добавляемому объекту. При этом существуют две функции DDI устройства: PFND3D12DDI_ADD_TO_STATE_OBJECT_0072 и PFND3D12DDI_CALC_PRIVATE_ADD_TO_STATE_OBJECT_SIZE_0072.
Для общей отчетности о возможностях существует новое значение перечисления , D3D12DDI_RAYTRACING_TIER_1_1 используется для уровня отчетов 1.1.
Отзыв о выборке
Обратная связь по выборке — это функция Direct3D 12 для сбора и записи сведений о выборке текстур и расположениях. Без обратной связи с выборкой эти сведения были бы непрозрачными для разработчика. Эта функция дает приложениям возможность не просто знать, что mip было выбрано, но и знать, где на этих mips. Приложения могут быть заинтересованы в информации о выборке, например для выполнения следующих задач:
- точно знать, что загружать дальше в системе потоковой передачи текстур, или
- точно знать, что необходимо затенить в системе отрисовки пространства текстуры.
Обратная связь по примерам операций записывается в "карту отзывов", которая выступает в качестве непрозрачного ресурса, который необходимо перекодировать, чтобы получить проверяемую приложением информацию. Что касается написания самой обратной связи, для этого существуют конструкции HLSL в модели шейдера 6_5. Семантика очень похожа на семантику примера Texture2D и ее вариантов.
Хотя обратная связь с выборкой хорошо использует новые языковые конструкции заливки, она также включает изменения UMD. Для проверки возможностей устройства существует ограничение SamplerFeedbackTier, сообщаемое через D3D12DDI_D3D12_OPTIONS_DATA_0073. Для создания ресурсов было изменено новое поле , регион MIP обратной связи для выборки, с типом D3D12DDI_MIP_REGION_0075. При этом также существует новый метод создания дескрипторов, PFND3D12DDI_CREATE_SAMPLER_FEEDBACK_UNORDERED_ACCESS_VIEW_0075.
Защита содержимого
В WDDM 2.7 для операций с видео Direct3D 12 добавлена необязательная поддержка защищенных ресурсов. В фоновом режиме защищенные ресурсы существовали до WDDM 2.7, но были доступны только для совместного использования между API, графики или вычислений, но не для видео.
Поддержка защищенных ресурсов не сообщается драйвером как глобальная вещь; он выполняется для каждой операции. Если драйвер сообщает о поддержке защищенных ресурсов для конкретной операции, это означает, что эта операция может считывать и записывать защищенные ресурсы и поддерживает общий доступ между API, если это допускается типом ресурса. Еще одна вещь, которую стоит упомянуть, заключается в том, что если драйвер утверждает поддержку защищенных ресурсов для определенного формата, он должен поддерживать этот формат как незащищенный ресурс.
В WDDM 2.7 методы создания ресурсов изменяются, чтобы принимать необязательный экземпляр D3D12DDI_HPROTECTEDRESOURCESESSION. Драйверы получают этот параметр во время создания объекта для информирования о настройке и выделении. Кроме того, проверки бюджета памяти пересматриваются, чтобы указать, будет ли операция использовать защищенные ресурсы. Если параметр protected-resource-session имеет значение, отличное от NULL, это означает, что операция будет выполнять запись в защищенные ресурсы. Для записи в незащищенный ресурс необходимо повторно создать объект операции.
Ссылки на декодер и оценку движения должны быть защищенными ресурсами, если выходные данные являются защищенными ресурсами. Обработка видео может считывать данные из сочетания защищенных и незащищенных ресурсов при записи в защищенный ресурс.
Перед записью одной или нескольких операций, которые записывают данные в защищенный ресурс, необходимо вызвать PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 с сеансом ресурса, не имеющим значения NULL. Вызов PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 со значением NULL требуется перед записью одной или нескольких операций, которые выполняют запись в незащищенные ресурсы.
Дополнительные сведения об изменениях DDI для защиты содержимого в WDDM 2.7 см. в статье D3D12DDI_VIDEO_DECODE_PROTECTED_RESOURCES_DATA_0072 в качестве отправной точки.
Улучшенные отчеты буфера журнала для инструментов
В WDDM 2.7 представлено изменение DDI, которое использует буферы журнала средствами отладки GPU. При этом изменении одна отправка буфера команд может содержать работу, соответствующую нескольким спискам команд, а не только один список команд за раз. Это изменение позволяет средствам отладки GPU более точно сообщать о характеристиках производительности приложений.
Эта возможность сообщается через D3D12DDICAPS_TYPE_0073_SUPPORT_BATCHED_MARKERS. Существует новый D3DDDI_MARKERLOGTYPE значения перечисления D3DDDIMLT_BATCHED, соответствующий D3DDDI_BATCHEDMARKERDATA. Структуры данных событий Трассировки Событий Windows были обновлены для того, чтобы они содержали некоторое количество элементов D3DDDI_BATCHEDMARKERDATA , если они имеют тип D3DDDIMLT_BATCHED.
DisplayPort (DP) AUX/I2C
Канал DP Auxiliary (AUX) предоставляет доступ к данным конфигурации DP (DPCD), которые являются файлом регистрации для каждого устройства, используемого для чтения возможностей устройства DP, обучения связи, обнаружения топологии, доступа к шине I2C и т. д. В качестве отправной точки см. DXGK_DP_INTERFACE .