D3D12DDI_VIDEO_DECODE_TIER_0020 枚举 (d3d12umddi.h)

指定视频解码层。 解码视频层定义一组硬件功能。 层越高,硬件的能力就越强。

语法

typedef enum D3D12DDI_VIDEO_DECODE_TIER_0020 {
  D3D12DDI_VIDEO_DECODE_TIER_0020_NOT_SUPPORTED,
  D3D12DDI_VIDEO_DECODE_TIER_0020_1,
  D3D12DDI_VIDEO_DECODE_TIER_0020_2,
  D3D12DDI_VIDEO_DECODE_TIER_0020_3
} ;

常量

 
D3D12DDI_VIDEO_DECODE_TIER_0020_NOT_SUPPORTED
不支持解码配置文件。
D3D12DDI_VIDEO_DECODE_TIER_0020_1
视频解码第 1 层。 在视频解码第 1 层中,硬件要求解码输出纹理和引用纹理,以便在视频操作引用流时对流进行物理连续解码。

引用资源由应用程序分配为 D3D12 纹理数组。 驱动程序不会收到分配面向视频方案的显式提示,并且最初可能会分配非物理连续内存。 驱动程序应使用内存管理器提供的新 更新分配属性 功能,在提交实际要求其物理连续的视频工作时,计划转换为物理连续。

将硬件置于第 1 层的硬件特征:

* 解码硬件需要物理连续内存来解码输出和引用。 具有压缩位流的输入缓冲区可能还需要物理连续。

* 解码硬件可能具有与其他引擎或视频操作不兼容的特殊平铺格式或其他内存布局定义。

压缩的输入缓冲区要求:

* 给定帧的所有切片必须按顺序放置,并且连续 (切片) 之间没有间隙。

* 驱动程序不得执行位流数据的其他副本。

* 第一个切片必须从 128 字节边界开始。

* 硬件必须支持从D3D12DDI_MEMORY_POOL_L0 (始终系统内存) 分配的缓冲区解码。

* 硬件必须支持使用 D3D12DDI_CPU_PAGE_PROPERTY_NOT_AVAILABLE D3D12DDI_MEMORY_POOL_L1 (默认池) 解码。
D3D12DDI_VIDEO_DECODE_TIER_0020_2
视频解码第 2 层。 解码第 2 层允许调用方将引用和输出纹理分配为单独的 2D 纹理资源。 应用程序不再需要分配纹理数组,但必须支持这一点。

解码第 2 层没有物理连续的要求。 硬件可能具有连续的 VA (视频解码加速) 此层的要求,应用程序需要创建纹理数组来支持此要求。

若要启用第 2 层,必须支持驱动程序支持的引用和输出格式的保留资源(也称为平铺或稀疏资源)。 可以通过两种方法实现此目的:

* 如果硬件支持每进程 GPU VA,并且具有支持保留资源的磁贴形状要求的磁贴模式,则可以使用预先存在的 D3D12 平铺资源机制。

* 如果硬件支持每进程 GPU VA,但磁贴模式不符合保留资源的磁贴形状要求,并且硬件可以支持映射和取消映射整个子资源的平铺映射,对于 D3D12 中作为独立子资源的平面资源的每个平面,该机制要求可以单独映射磁贴和取消映射磁贴。 请注意,此机制正在开发中,但会在 API 上模糊化磁贴形状。

将硬件置于第 2 层的硬件特征:

* 不需要物理连续内存。

* 硬件具有连续 VA 要求。

* 解码硬件可能具有与其他引擎或视频操作不兼容的特殊平铺格式或其他内存布局定义。

压缩的输入缓冲区要求与第 1 层相同。
D3D12DDI_VIDEO_DECODE_TIER_0020_3
视频解码第 3 层。 WDDM 2.3 中支持启动此层。

解码第 3 层允许调用方将引用和输出纹理分配为标准 2D 纹理资源。 应用程序不再需要分配纹理数组,但必须支持这一点。

解码第 3 层不需要物理连续分配。 硬件必须不再需要D3D12DDI_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY,但仍必须支持它。 查询时,D3D12DDI_VIDEO_DECODE_SUPPORT_DATA_0020 结构的 D3D12DDI_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY 成员必须设置为 FALSE。

若要启用第 3 层,驱动程序支持的引用和输出格式必须支持保留资源 (也称为平铺或稀疏资源) 。 发生这种情况的方式有两种:

* 如果硬件支持每进程 GPU VA,并且具有支持保留资源的磁贴形状要求的磁贴模式,则可以使用预先存在的 D3D12 平铺资源机制。

* 如果硬件支持每进程 GPU VA,但磁贴模式不符合保留资源的磁贴形状要求,并且硬件可以支持映射和取消映射整个子资源的平铺映射,对于 D3D12 中作为独立子资源的平面资源的每个平面,该机制要求可以单独映射磁贴和取消映射磁贴。 请注意,此机制正在开发中,但会在 API 上模糊化磁贴形状。

压缩的输入缓冲区要求与第 1 层相同。

注解

如果解码硬件需要其他引擎或其他视频操作不支持的唯一平铺格式,则解码器可能会在查询配置文件支持时在D3D12DDI_VIDEO_DECODE_SUPPORT_DATA_0020结构中设置 D3D12DDI_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY 。 此标志指示应用程序必须分配具有D3D12DDI_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY标志的引用。 如果需要将输出作为将来的参考帧,则传递给 PFND3D12DDI_VIDEO_DECODE_FRAME 的输出帧是可由管道其他部分使用的 D3D12 资源,并且不得具有D3D12DDI_RESOURCE_FLAG_VIDEO_DECODE_REFERENCE_ONLY标志。

下表显示了每个层的不同功能:

功能 第 1 层 第 2 层 第 3 层
支持单独分配的引用帧和输出。 必需
支持引用并分配为纹理数组。 必需 必需 必需
可以选择性地要求REFERENCE_ONLY资源标志。 请注意,所有层都需要使用存在的标志,即使不需要标志也是如此。 可选 可选
支持使用REFERENCE_ONLY分配的引用,即使上限不需要它。 必需 必需 必需
支持用于引用、输入和输出的平铺/稀疏资源。 必需 必需
压缩的位流输入缓冲区可以分配为 L0 (main 系统内存) 或 dGPU、视频内存) 的 L1 (。 必需 必需 必需
需要压缩的位流数据,以便切片位于单个缓冲区分配中,切片之间没有间隙。 必需 必需 必需
压缩输入缓冲区中第一个切片的偏移量必须对齐 256 字节。 必需 必需 必需
驱动程序不得执行压缩的位流数据的其他副本。 必需 必需 必需

要求

要求
Header d3d12umddi.h (包括 D3d12umddi.h)