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


Рекомендации по программированию DXVA-HD DDI

Этот раздел относится только к Windows 7 и более поздним версиям, а также Windows Server 2008 R2 и более поздним версиям операционной системы Windows.

При реализации DXVA-HD DDI в драйвере дисплея в пользовательском режиме следует учитывать следующие советы по программированию:

  • Драйвер должен задать бит D3DCAPS3_DXVAHD (0x000000400L) в элементе Caps3 структуры D3DCAPS9 , чтобы указать, что он поддерживает DXVA-HD DDI, в противном случае среде выполнения Direct3D не удается вызвать функцию CreateVideoProcessor для создания устройства DXVA-HD. Структура D3DCAPS9 описана в документации по пакету SDK для DirectX 9.0. Драйвер задает бит D3DCAPS3_DXVAHD в ответ на вызов функции GetCaps , в которой значение D3DDDICAPS_GETD3D9CAPS задается в элементе Typeструктуры D3DDDIARG_GETCAPS , на которую указывает параметр pData .

  • Значение DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE перечисления DXVAHD_SURFACE_TYPE уровня приложения не имеет соответствующего значения DDI. Приложение задает значение DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE для открытой поверхности вне экрана, выделенной в другом формате для ЦП или подключаемого модуля видеопроцессора на основе шейдеров.

  • Значение DXVAHD_SURFACE_TYPE_VIDEO_OUTPUT перечисления DXVAHD_SURFACE_TYPE на уровне приложения соответствует флагу битового поля VideoProcessRenderTarget структуры D3DDDI_RESOURCEFLAGS . Среда выполнения Direct3D задает VideoProcessRenderTarget в элементе Flags структуры D3DDDIARG_CREATERESOURCE, когда среда выполнения вызывает функцию CreateResource драйвера для создания цели отрисовки видеообработки.

  • Среда выполнения Direct3D поддерживает как битовую передачу (bitblt), так и состояние потока. Среда выполнения возвращается в приложение при запросе среды выполнения.

  • Метод IDXVAHD_VideoProcessor::GetVideoProcessBltState на уровне приложения не имеет соответствующей функции DDI. Однако, когда приложение вызывает IDXVAHD_VideoProcessor::GetVideoProcessBltState для получения частных данных о состоянии bitblt для видеопроцессора, среда выполнения Direct3D вызывает функцию GetVideoProcessBltStatePrivate драйвера.

  • Метод IDXVAHD_VideoProcessor::GetVideoProcessStreamState на уровне приложения не имеет соответствующей функции DDI. Однако когда приложение вызывает IDXVAHD_VideoProcessor::GetVideoProcessBltState для получения данных о состоянии частного потока для видеопроцессора, среда выполнения Direct3D вызывает функцию GetVideoProcessStreamStatePrivate драйвера.

  • Значение DXVAHD_STREAM_STATE_D3DFORMAT перечисления DXVAHD_STREAM_STATE уровня приложения не имеет соответствующего значения DDI в перечислении DXVAHDDDI_STREAM_STATE . Подключаемый модуль видеопроцессор использует значение DXVAHD_STREAM_STATE_D3DFORMAT для поверхности, выделенной с DXVAHD_SURFACE_TYPE_VIDEO_INPUT_PRIVATE значением перечисления DXVAHD_SURFACE_TYPE на уровне приложения.

  • Перечисление DXVAHD_DEVICE_TYPE не имеет соответствующего перечисления DDI (например, нет DXVAHDDDI_DEVICE_TYPE). Первый член структуры DXVAHDDDI_VPDEVCAPS резервируется, а первый член структуры DXVAHD_VPDEVCAPS уровня приложения имеет значение DXVAHD_DEVICE_TYPE в элементе DeviceType . Элемент DeviceType задается подключаемым модулем среды выполнения или видеопроцессора, который всегда сообщает драйверу как DXVAHD_DEVICE_TYPE_HARDWARE.

  • Элемент множителяструктуры DXVAHDDDI_FILTER_RANGE_DATA является значением с плавающей запятой. Драйвер должен использовать значение, которое может быть представлено точно в виде дроби базового 2. Например, 0,25 можно представить точно как дробь 2, но 0,1 — нет.

  • Любая функция DXVA-HD DDI должна возвращать S_OK, E_INVALIDARG или E_OUTOFMEMORY.