Windows 平台 OpenGL 与 DXVA2 硬件视频解码互操作插件
libglinterop_dxva2_plugin.dll 是 Mesa 图形栈(Windows 版 OpenGL/WGL 实现)以及 Chromium、Firefox 等浏览器所集成的 GL 互操作层中随包分发的动态链接库。它本身并非独立运行的程序,而是由 libglinterop 主模块通过 LoadLibrary 按需动态装载的插件,专门承担 OpenGL 上下文与 DirectX Video Acceleration 2(DXVA2)解码会话之间的桥接工作,使 GPU 解码出的视频帧能够直接进入图形渲染管线。
1. 硬件表面注册与纹理绑定:调用 WGL_NV_DX_interop、EGL_ANGLE_d3d_share_handle 等扩展,把 IDirect3DSurface9 等 DXVA2 输出表面注册为 OpenGL 可采样的纹理对象,供着色器直接读取。
2. 零拷贝显存共享:解码表面与 GL 纹理共享同一块 GPU 显存,无需经 CPU 回读与重新上传,显著降低内存带宽占用与显示时延。
3. 格式与色彩空间映射:完成 NV12、YV12、P010 等硬件解码像素格式到 GL 纹理格式的转换,并处理 BT.601/709 色彩矩阵及有限/全范围(limited/full range)适配。
4. 同步与生命周期管理:负责解码完成事件与 GL 命令队列之间的同步、表面锁定与解锁,以及纹理与设备的释放顺序,避免画面撕裂与资源泄漏。
5. 能力协商与回退:向调用方报告可用的互操作能力,当驱动或设备不支持时通知上层切换渲染路径。