The following MR implements the necessary changes to implement HEVC encode and decode in the d3d12 driver, as well as extending some of the common pipe structures and the va frontend with more capabilities like multi slice and multi L0/L1 reference encoding.
With this change, these are the enabled VA entrypoints for D3D12:
vainfo: VA-API version: 1.16 (libva 2.12.0) vainfo: Driver version: Mesa Gallium driver 22.3.0-devel for D3D12 vainfo: Supported profile and entrypoints VAProfileH264ConstrainedBaseline: VAEntrypointVLD VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice VAProfileH264Main : VAEntrypointVLD VAProfileH264Main : VAEntrypointEncSlice VAProfileH264High : VAEntrypointVLD VAProfileH264High : VAEntrypointEncSlice VAProfileHEVCMain : VAEntrypointVLD VAProfileHEVCMain : VAEntrypointEncSlice VAProfileNone : VAEntrypointVideoProc
The changes were tested using VAAPI in
mpv for decode and
FFMpeg for encode and decode. For the encode cases, different bitrates, slice modes and group of picture structures were used. For the decode cases, a set of conformance HEVC bitstreames were used and compared against their md5 reference.
Finally, some d3d12 video bug fixes commits are also added as well.