JCHub

  • Home
  • Category
    • A/V
    • WebRTC
    • Beauty of Programming
    • Linux
    • Windows
    • Moments of Life
    • Campus Life
  • Reference
    • API Reference
    • Utilities
    • AV Test
    • Doc
  • Message Board
  • About
JCHub
Code as My Sword, Lost in Obsession
  1. Main page
  2. Windows
  3. Main content

DXGI中的flip显示模型

2017年9月28日 3203hotness 11likes 0comments

从win8开始,就增加了flip显示模型,通过该显示模型,程序可以减少系统开销,同时增加性能。基于intel media
sdk解码,d3d11渲染,在我自己的电脑上通过对比,该模型确实可以明显降低CPU负载,渲染时间几乎忽略不计。不过坑爹的是,在部分独显不同电脑上,该模型并没有发挥出来该有的作用,反而增加GPU很大的负载,得不偿失。在d3d12中只支持flip model渲染,我想这些坑爹的电脑也就不支持d3d12渲染显示了,没想到这个flip model跟显卡类型,驱动等关系很大。下面简单说下flip model渲染。

桌面窗口管理器

桌面窗口管理器是Vista以后的系统中的一个新组件:Desktop Window Manager(DWM)。常见的任务栏窗口的实时缩略图效果,aero效果都是是DWM提供的。DWM提供了基于硬件加速的渲染。DWM出现后,应用程序的显示不再是直接画到屏幕上,而是送到显存中的一个离屏Surface。DWM将这些Surface合成一幅图像显示到屏幕之上。所以现在我们看到的显示器所有内容都是DWM处理过的。

DXGI flip model 与BitBlt model对比

二者主要区别是后台缓冲如何送到WDM。对于bitblt model,调用一次IDXGISwapChain1::Present1,后台缓冲内容就被拷贝到DWM 中一个叫做redirection surface的地方。对于flip model,后台缓冲内容直接与DWM共享,少了拷贝操作,因此更高效。
dxgi-flip-model

如何使用

创建交换链时。DXGI_SWAP_CHAIN_DESC1结构体按如下要求填充:
1)SwapEffect:DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL
2)BufferCount:2
3)Format:DXGI_FORMAT_R16G16B16A16_FLOAT, DXGI_FORMAT_B8G8R8A8_UNORM,DXGI_FORMAT_R8G8B8A8_UNORM之一;
4)SampleDesc.Count :1;
5)SampleDesc.Quality:0。
每一次调用Present1前,都要调用一次ID3D11DeviceContext::OMSetRenderTargets,因为Present1后,系统会把RenderTargetView解绑,所以每次都需要再调用OMSetRenderTargets设置RenderTargetView。

注意事项

1)一个窗口句柄只能绑定一个flip model交换链;
2)使用了flip model的句柄,就不能再使用其他api绘制了。在flip model中,只有flip model交换链传递到DWM中的Direct3D内容才可见,其他版本Direct3D 以及GDI内容更新将被忽略。

This article is licensed with Creative Commons Attribution-NonCommercial-No Derivatives 4.0 International License
Tag: windows
Last updated:2019年3月26日

Jeff

管理员——代码为剑,如痴如醉

Tip the author Like
< Last article
Next article >

Comments

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
Cancel

This site uses Akismet to reduce spam. Learn how your comment data is processed.

文章目录
  • 桌面窗口管理器
  • DXGI flip model 与BitBlt model对比
  • 如何使用
  • 注意事项
Related Posts
  • FireBreath插件IE浏览器中文字符乱码问题
  • Win10任务管理器GPU信息
  • CreateSwapChainForHwnd返回0x887A0001错误
  • DirectX 9 到DirectX 11 API的对应
  • 为什么Windows下无法实现ptp协议
Categories

COPYRIGHT © 2026 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang