1
7
这里有几件事要记住。首先,很多“常识”是建立在一些事实的基础上的,这些事实已经不再适用。 在AGP时代,当CPU直接与GPU通信时,它总是使用基本的PCI协议,这种情况以1x的速率发生(总是不可避免)。AGX 2x/4x/8x型 只有 内存控制器 直接的。换句话说,取决于 什么时候 然而,当事情转到PCI-E时,情况就完全改变了。虽然根据路径的不同,带宽可能会有所不同,但并没有一般的规则规定内存-GPU将比CPU-GPU快。最安全的概括是 如果 在您的例子中,这并不重要——您正在讨论如何将数据从CPU空间移动到GPU空间。使用DirectX(或OpenGL)的主要速度差异发生在 在GPU上,完全避免使用CPU(或主内存)。它们(现在AGP已经成为历史)在内存显示带宽方面没有任何实质性的改进。 |
2
2
杰里·科芬说得不错。要记住的是DI在setdibittodevice中代表什么。它代表独立于设备。也就是说你总是任由司机摆布。有些车手过去是完全的垃圾,这对性能影响很大。DirectDraw也遇到了类似的问题。。。但是您也可以访问硬件Blitter,因此它通常更有用。IHVs也倾向于花更多的时间为DirectDraw编写合适的驱动程序,因为它的游戏关联性。当硬件能够做得更好的时候,谁想成为性能堆的底部呢?
相比之下,Direct3D性能如此糟糕的原因是,Direct3D本质上是完全用于GPU内部的,它使用奇怪和复杂的格式来提高缓存性能等等。 再加上你没有测试like for like(使用DDraw和D3D),你可以创建一个纹理/表面,锁定它,复制,解锁,然后在后台缓冲区上画画(通过各种方法)。为了获得最佳性能,最好使用DISCARD锁直接锁定backbuffer,然后在解锁之前将memcpy直接锁定到返回的缓冲区中。这将使您的性能更接近SetDIBitsToDevice。不过,出于上述原因,我仍然预计D3D将比DDraw慢。 |
3
1
你会听到人们对GDI不满的原因是它过去只是旧的windows API调用。它的新版本(上次查看em时称为GDI+)实际上只是一个放在DirectX调用之上的API。因此,有时使用GDI编程看起来相当简单,但是在事物之间添加一层总是会减慢速度。正如Jerry Coffin在回复中提到的,您的示例是关于移动数据的,这是一个缓慢的时间。虽然DirectX的速度慢了很多,但我还是有点惊讶,因为我无法帮助您深入研究DirectX文档(这在相当长的一段时间内非常棒,真的。。可能想看看www.codesampler.com。我总是从他身上找到很好的起点,事实上,虽然我可能会疯了,但我发誓在doc和示例中对DirectX SDK的改进是基于这些人的工作完成的!)
不管怎样,希望这有帮助!
|
vini · 安装wfp内核驱动程序后,devcon状态返回39 2 年前 |
I101I · 如何镜像HBITMAP 2 年前 |
E235 · 如何查看谁创建了Windows NamedPipe 2 年前 |
Pizza Ãcke · 创建带有内存映像的Windows托盘图标 2 年前 |
Jabu · 如何获取列表框滚动条“拇指”的高度? 2 年前 |
tree1234 · 对可执行文件进行代码设计,并允许修改某些字节 2 年前 |
Penachia · PDF FontDescriptor标志 6 年前 |