...
和Xserver之间的同步操作是通过信号和一个叫做SAREA的共享内存buffer来实现的。对DRM device的访问是独占的,所以任何DRI client都需要在渲染开始时锁定该设备。这也意味着其他用户,包括Xserver在同时刻时被阻塞的。他们只能等到渲染完成后的锁释放时刻。即使两者的操作不会有冲突也必须这样。另外一个缺点就是所有的操作释放锁之后,就不能保留已分配的内存。所以被上传到显存里的纹理数据也会丢失。因此对性能影响很大。client都需要在渲染开始时锁定该设备。这也意味着其他用户,包括Xserver在内,同时刻是被阻塞的。他们只能等到渲染完成后的锁释放时刻。即使两者的操作不会有冲突也必须这样。另外一个缺点就是所有的操作释放锁之后,就不能保留已分配的内存。所以被上传到显存里的纹理数据也会丢失。因此对性能影响很大。
DRI2
由于合成窗口管理器如compiz越来越受欢迎,DRI需要重新设计来满足X client在使用直接渲染时也可以进行离线渲染功能。一般情况下X client时满足重定向图形到由X server提供的另外一个pixmap(offscreen pixmap)作为渲染目标,但是DRI client还是只能渲染到共享的backbuffer,这个流程充当了实际的合成管理器,导致compiz等实际的合成管理器无效。终极解决方案时改变DRI处理渲染buffer的方式,这就导致一个完全不同的DRI 扩展——DRI2被设计出来。DRI2不是DRI1的延续,而是另外一个扩展。
...