当前位置:网站首页 > 数据驱动管理 > 正文

vga驱动程序是什么(vga驱动是显卡驱动吗)



  • 如果lock的资源在被gpu使用,那么这个lock函数(在某些flag)就会卡住
  • 显存超出比较多的时候,会出现严重的paging



回到典型的5个会造成卡顿的原因:



shader编译:
我们写的hlsl,编译成asm后,在gpu运行的时候会进一步编译gpu需要使用的机器语言,这个语言是我们开发时候offline生成不了的,因为不同的gpu有不同的指令集,这个过程是driver在运行时刻完成。
一般来讲,是在CreateShader时候生成这个机器语言,但是实际中有一些例外:
  • 对于一些很复杂的shader会先生成一个能用的,但是优化的不好,然后后面时间富裕了在生成一个高度优化的
  • 有些state的转换会造成shader机器指令的编译,比如有的gpu会把alpha test变成shader里面的clip语句,进而就不用提供硬件的alpha test,那么这种render state的转换也会造成shader编译,一些会造成shader recompile
    • shadow map bound/unbound
    • 使用的贴图在fp和非fp格式之间转换--看来fp的texture会使用特殊的sampling指令吧
    • 贴图和rendertarget的srgb
    • 同样的pixel shader,但是COLORWRITEENABLE的状态不同
    • 使用一些枚举或者bool来控制static branch,不同的branch的排列都会造成编译
    • d3d9的
      • clipplane
      • mrt的状态
      • fog
  • 一些比较好的建议:
    • loading的时候把shader create出来,并且把各个mesh至少都画一遍,这样保证runtime的时候就不用recompile了
    • streaming的话,就render一个看不见的物体好了,反正保证画一遍
    • 如果都做不到的话,保证在createshader和使用shader之间有0.5s到1s的时间缓冲
    • 把一些严重的state放在一起画,
资源管理
  • 在vista以及后面的os上,资源创建的时候,内存不总是在create的时候分配,很多情况是在第一次被使用的时候
  • 大型资源的创建很耗费
  • 频繁的create/destroy会产生碎片,pool会改善这一点
  • 一些会造成同步的点,本来gpu和cpu是异步运行,一旦同步就会导致系统停顿,直到同步
    • lock系列(在一定的flag下)
    • 在release了一个大资源之后,创建一个大资源(oops)
  • 一些建议
    • lock和map的时候使用discard flag,这个会新创建一个资源,而不是等待gpu使用上一个
    • 经常更新的资源使用dynamic&NOOVERWRITE flag,这样driver会倾向于把资源放到systemmem,一些比较小的vb,ib,tex放到systemmem也ok啦
    • 尽量pool,而不是runtime的去create&destroy
      • 自己管理的pool,在释放和重用资源的时候,记住要query一下gpu使用它的情况,这个不像单独的一个资源有driver帮着管理,自己的pool就要多费些力气
    • 如果一定要runtime的create&destroy,保证先destroy,然后create,一小会的超内存也会让driver管理内存的时候傻眼
    • 显存的allocate策略是先到先得
    • 按照重要性的顺序来alloc显存
      • depth stencil
      • render target
      • frequently used resource : texture
      • less used resource:vb,ib,texture
    • 重要性一样的话,大的优先,float point的优先
  • 超显存的问题并不总是一个严重问题
    • 高频率使用的资源都放在显存里了,所以一般不会有严重的paging,所以前面说的是大幅度超显存才是问题
    • gpuview里面可以看paging的事件



queued frame
这个一般都是限制gpu不会落后cpu(render thread)超过一帧,但是这里看来似乎并不是最好的策略,如果可以的话落后个多达3帧的话,可以对gpu时间不稳定的情况有更好的容错。
也就是会更平滑。
但是副作用也是比较明显的,比如occlusion query就会晚好多帧。



frame落后有api的:
IDirect3DDevice9Ex::SetMaximumFrameLatency
IDXGIDevice1:: SetMaximumFrameLatency



其他一些会造成性能卡顿
  • gpu context switch,比如在graphics pipeline和direct compute pipeline之间切换
  • 多个d3d application同时运行的时候,会造成竞争(contention)
  • driver的paged/non-paged pool超内存了,xp上面这方面能力相对就差






到此这篇vga驱动程序是什么(vga驱动是显卡驱动吗)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 扬声器是电压驱动还是电流驱动(扬声器是电压驱动还是电流驱动呢)2026-03-17 20:54:08
  • 扬声器驱动器的作用(扬声器驱动器的作用是什么)2026-03-17 20:54:08
  • 扬声器驱动器怎么安装图解(扬声器驱动下载安装)2026-03-17 20:54:08
  • 8821ce linux驱动(linux安装8821ce驱动)2026-03-17 20:54:08
  • usb转console线(usb转console线驱动下载)2026-03-17 20:54:08
  • 虚拟u盘驱动器(虚拟u盘驱动器是什么)2026-03-17 20:54:08
  • vga驱动程序下载(vga驱动怎么安装)2026-03-17 20:54:08
  • 扬声器驱动是哪个(扬声器驱动是哪个部件)2026-03-17 20:54:08
  • tps65988驱动(TPS65988驱动)2026-03-17 20:54:08
  • 扬声器驱动器下载(扬声器的驱动)2026-03-17 20:54:08
  • 全屏图片