一次DrawPrimitive画一个三角形,这样效率会低多少啊

u010098070 2013-05-02 02:06:53
和一次DrawPrimitive画所有的三角形相比

软件和硬件处理时,效率分别会低大概多少啊
...全文
364 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010208053 2013-05-09
  • 打赏
  • 举报
回复
引用 11 楼 liuxingzdh 的回复:
D3DCREATE_SOFTWARE_VERTEXPROCESSING这个的意思是渲染过程,不用GPU而是用软件方式去模拟,当然慢了。 我说的对比都是基于D3DCREATE_HARDWARE_VERTEXPROCESSING的设置之下的。 不用测试了。 这在游戏界里是个常识性的东西。 调用一次DrawPrimitive俗称调用一次draw call,调用引发的同步是个很慢的事情。 还有涉及到设置显卡状态的其他函数也是很慢的。比如设置采样状态啊、混合状态啊、传递参数啊、深度开关啊什么的,一切需要和GPU通信的函数调用都很慢。 大多情况下,CPU告诉GPU要做一件事情所花的时间比GPU把这件事做完所花的时间要长很多倍。 对于游戏引擎研发来说,尽量减少需要和GPU做通信的函数调用,是个常识性的东西。
谢谢了啊,不过这方面没什么资料,怎么没人像研究win32一样来研究这一块啊 比如我在10楼提到的,为什么要在动态分配的数据段上来执行sse指令啊 还有你说同步,不一定要同步吧,异步驱动不可以吗,要么就是显卡驱动不支持异步 而且directx程序,除了主线程,你可以发现系统会启动很多另外的线程,不知道干什么的
芳草天 2013-05-09
  • 打赏
  • 举报
回复
显卡的驱动,只有显卡用到的GPU厂商去开发,其他人自然不会去研究了。 我印象中CPU和GPU的交互是不支持异步的,GPU渲染的时候,CPU都是直接阻塞的。 渲染引发的数据流非常大,GPU渲染的状态设置非常复杂,状态切换非常频繁,起码,暴露给应用程序去设置的状态参数估计都有上百了吧,在d3d的API里,有七八个参数要填的函数调用那是常有的事。 也许这也是为什么做不成异步的原因吧。 D3d10开始可以多线程渲染,不过不清楚,底层通信是不是做成了异步,好像共享纹理表面是可以了。
寻开心 2013-05-08
  • 打赏
  • 举报
回复
dxsdk里面不是例子几乎都是可以看到fps的,用不同的方法,看看fps的变化有多大吧
u010208053 2013-05-08
  • 打赏
  • 举报
回复
引用 7 楼 happy__888 的回复:
说一千道一万,还是测试数据说话。 你可以自己写一些代码测试效率就是了 这个本来就不是一个什么难处理的工作 测试结果会和你的电脑的具体的硬件环境有关, 不同的配置应该在不同的数量级上发生瓶颈 多次传输肯定会大幅度降低内存到显寸数据传输的工作效率, 毕竟pc是总线分时的架构
怎么测试啊,有什么工具没有啊 没测试的习惯,都是直接逆向的 图像方面没相关的资料啊,不知道具体是什么操作花时间,记得以前2000是用的lpc
芳草天 2013-05-08
  • 打赏
  • 举报
回复
D3DCREATE_SOFTWARE_VERTEXPROCESSING这个的意思是渲染过程,不用GPU而是用软件方式去模拟,当然慢了。 我说的对比都是基于D3DCREATE_HARDWARE_VERTEXPROCESSING的设置之下的。 不用测试了。 这在游戏界里是个常识性的东西。 调用一次DrawPrimitive俗称调用一次draw call,调用引发的同步是个很慢的事情。 还有涉及到设置显卡状态的其他函数也是很慢的。比如设置采样状态啊、混合状态啊、传递参数啊、深度开关啊什么的,一切需要和GPU通信的函数调用都很慢。 大多情况下,CPU告诉GPU要做一件事情所花的时间比GPU把这件事做完所花的时间要长很多倍。 对于游戏引擎研发来说,尽量减少需要和GPU做通信的函数调用,是个常识性的东西。
u010208053 2013-05-08
  • 打赏
  • 举报
回复
引用 9 楼 happy__888 的回复:
dxsdk里面不是例子几乎都是可以看到fps的,用不同的方法,看看fps的变化有多大吧
就每次render算个时间,再减一减,这样不精确啊 稍微逆向了下,调用gpu应该是通过vnd3dum.dll,然后处理得到的结果,不知道是为了安全还是什么原因,具体代码是在动态分配的数据上执行的 可以发现有大量的sse指令,这样多次调用的话应该确实会影响不少性能
寻开心 2013-05-07
  • 打赏
  • 举报
回复
说一千道一万,还是测试数据说话。 你可以自己写一些代码测试效率就是了 这个本来就不是一个什么难处理的工作 测试结果会和你的电脑的具体的硬件环境有关, 不同的配置应该在不同的数量级上发生瓶颈 多次传输肯定会大幅度降低内存到显寸数据传输的工作效率, 毕竟pc是总线分时的架构
u010208053 2013-05-06
  • 打赏
  • 举报
回复
引用 5 楼 liuxingzdh 的回复:
[quote=引用 4 楼 u010208053 的回复:] [quote=引用 3 楼 liuxingzdh 的回复:] DrawPrimitive的执行分两个部分,一个是CPU和GPU的通信、同步什么的,一个是GPU绘制图形。 很负责的告诉你,通信、同步上花费的时间远远比GPU绘制图形需要的时间要多的多。 一般的显卡,一秒你能调用几千次DrawPrimitive已经是逆天了。 但一般的显卡一秒绘制七八十帧,一帧几万个三角形那是很容易的事(前提是你优化做的好)。
什么意思啊,你是不是说一次DrawPrimitive画一个三角形的效率低很多啊 一秒你能调用几千次DrawPrimitive,这个是不是指D3DCREATE_SOFTWARE_VERTEXPROCESSING,后面几万个三角形指的是D3DCREATE_HARDWARE_VERTEXPROCESSING啊[/quote] 你可以大致这么理解: 一次DrawPrimitive画一个三角形,一秒只能画几万个三角形。 一次DrawPrimitive画一千个三角形,一秒能画几千万个三角形。 这样子应该比较直观了吧。[/quote] 不可能吧,那为什么用D3DCREATE_SOFTWARE_VERTEXPROCESSING的时候,画很多三角形会很卡啊 还有你为什么那么肯定,好像和1楼的看法不太一样啊 其实我也是感觉差不太多的,毕竟主要就是些顶点数据,应该都有cache的
芳草天 2013-05-05
  • 打赏
  • 举报
回复
引用 4 楼 u010208053 的回复:
[quote=引用 3 楼 liuxingzdh 的回复:] DrawPrimitive的执行分两个部分,一个是CPU和GPU的通信、同步什么的,一个是GPU绘制图形。 很负责的告诉你,通信、同步上花费的时间远远比GPU绘制图形需要的时间要多的多。 一般的显卡,一秒你能调用几千次DrawPrimitive已经是逆天了。 但一般的显卡一秒绘制七八十帧,一帧几万个三角形那是很容易的事(前提是你优化做的好)。
什么意思啊,你是不是说一次DrawPrimitive画一个三角形的效率低很多啊 一秒你能调用几千次DrawPrimitive,这个是不是指D3DCREATE_SOFTWARE_VERTEXPROCESSING,后面几万个三角形指的是D3DCREATE_HARDWARE_VERTEXPROCESSING啊[/quote] 你可以大致这么理解: 一次DrawPrimitive画一个三角形,一秒只能画几万个三角形。 一次DrawPrimitive画一千个三角形,一秒能画几千万个三角形。 这样子应该比较直观了吧。
u010208053 2013-05-05
  • 打赏
  • 举报
回复
引用 3 楼 liuxingzdh 的回复:
DrawPrimitive的执行分两个部分,一个是CPU和GPU的通信、同步什么的,一个是GPU绘制图形。 很负责的告诉你,通信、同步上花费的时间远远比GPU绘制图形需要的时间要多的多。 一般的显卡,一秒你能调用几千次DrawPrimitive已经是逆天了。 但一般的显卡一秒绘制七八十帧,一帧几万个三角形那是很容易的事(前提是你优化做的好)。
什么意思啊,你是不是说一次DrawPrimitive画一个三角形的效率低很多啊 一秒你能调用几千次DrawPrimitive,这个是不是指D3DCREATE_SOFTWARE_VERTEXPROCESSING,后面几万个三角形指的是D3DCREATE_HARDWARE_VERTEXPROCESSING啊
芳草天 2013-05-04
  • 打赏
  • 举报
回复
DrawPrimitive的执行分两个部分,一个是CPU和GPU的通信、同步什么的,一个是GPU绘制图形。 很负责的告诉你,通信、同步上花费的时间远远比GPU绘制图形需要的时间要多的多。 一般的显卡,一秒你能调用几千次DrawPrimitive已经是逆天了。 但一般的显卡一秒绘制七八十帧,一帧几万个三角形那是很容易的事(前提是你优化做的好)。
彩阳 2013-05-03
  • 打赏
  • 举报
回复
多次调用DrawPrimitive,主要是为了绘制不同的图元,否则如果全都是三角形的话,应该把它们都放在顶点缓冲中,一次调用DrawPrimitive渲染。
寻开心 2013-05-02
  • 打赏
  • 举报
回复
应该差不了多少, 如果只是把一个三角形队列分拆成为多次的话 影响效率最高的是更换渲染状态的操作 这个我想没有多少人专门去研究这个, 你不妨自己做个测试,搞上十万个三角形test, 太少了测试不出来的

8,324

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧