游戏开发论坛

 找回密码
 立即注册
搜索
123
返回列表 发新帖
楼主: smile636

[请问]DX中的DrawPrimitive是异步的吗?

[复制链接]

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-12-25 22:29:00 | 显示全部楼层

Re: Re:[请问]DX中的DrawPrimitive是异步的吗?

congy: Re:[请问]DX中的DrawPrimitive是异步的吗?

我指的耗时是cpu到gpu的消耗的时间,在Driver 没有将 command buffer 提交到 gpu 之前,SetXXX 函数的耗时仅...

可driver本生也有可能是多线程的啊,再说排除driver实现的不同,Setxxx在不同的runtime上实现也不一样,比如喂死她上,那些和fixed function有关的,都需要driver做转换。将来的趋势就是:除资源同步外所有的API都是不阻塞的,其调用开销相对基本可以忽略不记。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-12-26 10:38:00 | 显示全部楼层

Re:[请问]DX中的DrawPrimitive是异步的吗?

我并没有说 SetXXX 函数是同步调用,我再一次说明:我指的耗时是cpu到gpu的消耗的时间,当 dip\dp 时会将 SetXXX 的设置提交到 GPU 中,这一个完整的 Pass 是 SetXXX 的消耗时间,如果没有 dip ,SetXXX 只是一个函数的调用开销,而且一定是异步的,立即返回。此时 Driver 的线程将 SetXXX 的 value 提交到 Command buffer 中。我们讲到的 API 调用开销是完整的一个 Pass( 从 CPU 到 GPU 的提交过程,不是渲染 pass),没有 dip 提交,单纯讲 API 的开销没有意义。

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-12-26 20:29:00 | 显示全部楼层

Re: Re:[请问]DX中的DrawPrimitive是异步的吗?

congy: Re:[请问]DX中的DrawPrimitive是异步的吗?

我并没有说 SetXXX 函数是同步调用,我再一次说明:我指的耗时是cpu到gpu的消耗的时间,当 dip\dp 时会将 S...

做技术的,看问题不可这么执着,软件的架构变化比硬件快,OS,runtime的实现都在不停的改变,4年前的东西现在不一定全对。有机会去ATI活硬威大做下driver development,一定能够对某类问题有跟深刻的看法。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-12-27 12:24:00 | 显示全部楼层

Re:[请问]DX中的DrawPrimitive是异步的吗?

我目前所了解到的所有细节都是从 d3d 文档中得来的,没有机会接触硬件开发,对硬件的实现只知皮毛,如果楼上懂得一些硬件实现的相关知识,可以开个专题给大家讲一下,我想大家都会感谢你的。

8

主题

716

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2006-12-27 13:15:00 | 显示全部楼层

Re:[请问]DX中的DrawPrimitive是异步的吗?

有什么问题,问狗狗,只要他知道的,肯定会回答,不过专门要求著书立作可能苛刻了些许

我也来插一脚
>还想问问各位大侠,有没有一些在D9中实现一次传入多个transform矩阵给渲染管,这样绘制多个不同位置相同物体时不用多次调用settransform
在6800之流支持sm3的,你可以使用Instancing,vb/ib只需一份
而在之前的显卡中,可以这样
修改物体Vertex定义,加一个attribute为MatrixIndex
如果有100个物体,那么开sizeof(物件) * 100的vb,其中各物体数据是相同的,不同处在于各物体的Vertex中的MatrixIndex不同
然后各物体在render时只是各自更新Matrix而并不实际渲染,等100个全部提交后,可以通过"常量寄存器"批量提交Matrix,VS中自行索引自己的Matrix来做Transform,从而减少DP调用
Instancing这种方法通常用于大量植被或是99夜那样的千军万马的效果

PS,LZ并没有理解我们上次讨论粒子中谈到的东西

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-12-27 14:46:00 | 显示全部楼层

Re:[请问]DX中的DrawPrimitive是异步的吗?

呵呵,我好像没有要求出著立作吧?写篇技术文档大家都能做得到吧,也不会浪费许多时间。
PS:马肝的头像图片很强啊。

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-12-27 20:27:00 | 显示全部楼层

Re:[请问]DX中的DrawPrimitive是异步的吗?

理解硬件的东西也不难,多看看spec,多从整个架构、流程上理解HW,当然前提是要有机会,这个可以自己争取。对于图形硬件,两点非常重要,一是并行,二是cache。就拿alpha blending这个stage来说,或许你认为可以弄一种shader,输入是dest color/alpha和src color/alpah,以及一些const,指令有add,mul这些,这种shader在每个象素级别运行。由于alpha blending有前后依赖性,那么就要求前面的操作必须完全写到cache中时,后面的操作才能继续,假如这种shader不支持动态跳转,那还好,可如果支持,就意味着一个tile(一条pixel pipe处理的基本单元)必须等待最慢的一个pixel完成,下一笔操作才能进来,这就好比若干pixel pipeline在操作,某一条被阻塞了,由于硬件必须按照严格的时序,这样会导致最前面的入口(vertex fetch)都被堵住了。。。
话又说回来,假如这种shader只支持静态跳转,那么你可以试着证明一下,任何2次以下的多项式,都可以通过alpha blending formula加上某些技巧实现,何况实际应用中又有多少复杂的情况呢,所以这种shader IHV们不想实现。
完全动态的分配任务,软件端做得都没有做得很完美,何况硬件,所以DX10硬件会有那么多得暴力资源。。。

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

积分
1147
发表于 2006-12-28 10:57:00 | 显示全部楼层

Re:[请问]DX中的DrawPrimitive是异步的吗?

嗯,硬件上的实现的确要考虑多种情况,如果兼顾所有可能,性能反而下降,还不如不实现。谢谢你的知识共享。只是不接触硬件开发的我们恐怕很难看到 spec ,这样的机会不好找啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 04:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表