游戏开发论坛

 找回密码
 立即注册
搜索
查看: 8682|回复: 27

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

[复制链接]

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
发表于 2006-12-21 22:55:00 | 显示全部楼层 |阅读模式
在DX中的调用CPU指令DrawPrimitive画一个大量的网格之后,紧接着调用这个画另一个网格,会怎么样?CPU运行应该不会阻塞(函数直接返回吧)?

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
 楼主| 发表于 2006-12-21 23:19:00 | 显示全部楼层

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

自己先顶一个~
还想问问各位大侠,有没有一些在D9中实现一次传入多个transform矩阵给渲染管,这样绘制多个不同位置相同物体时不用多次调用settransform()

36

主题

1047

帖子

1147

积分

金牌会员

Rank: 6Rank: 6

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

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

这样可以,不过要在顶点中加入矩阵索引信息。

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
 楼主| 发表于 2006-12-22 00:40:00 | 显示全部楼层

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

那样每个顶点都要做一次索引查询,也不好。。。

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
 楼主| 发表于 2006-12-22 10:09:00 | 显示全部楼层

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

   再来顶一个。大家帮帮忙呀

8

主题

553

帖子

560

积分

高级会员

Rank: 4

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

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

在DX中的调用CPU指令DrawPrimitive画一个大量的网格之后,紧接着调用这个画另一个网格,会怎么样?CPU运行应该不会阻塞(函数直接返回吧)?
=======================================================
看你的stream source,加入有system memory的stream,那么要么CPU需要synchronize,要么这些stream里的data回被copy倒一块GPU可以访问的地方,看驱动的实现。这些都很费时间,所以你可以认为CPU被猪塞了。
假如没有system memory的stream,你可以认为救是“立刻返回”。
但事情实际还是要复杂得多.......

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
 楼主| 发表于 2006-12-22 19:46:00 | 显示全部楼层

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

谢谢kypck的热心帮助~

35

主题

370

帖子

376

积分

中级会员

Rank: 3Rank: 3

积分
376
 楼主| 发表于 2006-12-23 12:10:00 | 显示全部楼层

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

       假如有system memory的stream,那么要么CPU需要synchronize,要么这些stream里的data回被copy倒一块GPU可以访问的地方,看驱动的实现。这些都很费时间,所以你可以认为CPU被猪塞了。
---------------------------------------------------------------------
        拷贝完了不堵塞吧?(拷贝的目标没被GPU使用)?也就是说GPU正在draw其他的图元的时候,几乎不影响这几个CPU指令操作。还有个问题是CPU接连发出的draw命令过多,而且GPU还在处理第一个stream,会怎么办?那些stransform是存储在那里?

8

主题

553

帖子

560

积分

高级会员

Rank: 4

积分
560
发表于 2006-12-23 14:21:00 | 显示全部楼层

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

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

       拷贝完了不堵塞吧?(拷贝的目标没被GPU使用)?也就是说GPU正在draw其他的图元的时候,几乎不影响这几个CPU指令操作。还有个问题是CPU接连发出的draw命令过多,而且GPU还在处理第一个stream,会怎么办?那些stransform是存储在那里?

不会,因为driver设计架构时,肯定就有ring buffer机制,和每个buffer得timestamp机制一起工作,这样copy得dest总是可以写的,并且保证不会写冲突,这方面其实原理非常简单。
第二个问题,只是因为你不太了解硬件得工作原理,所以有此疑问。你可以吧3D API调用理解为“给硬件下命令”,“命令”分两种,一种是可放在DMA buffer(也叫command-listable)中的,另一种是必须是同步完成的。第一种典型的如Draw,第二种的代表是改变refresh rate,resolution等,SetTransform就是command-listable,比如可以吧matrix及其种类放到DMA buffer中(当然必须按照HW spec的要求存放),然后硬件执行到这个地方时,才真正吧此matrix设置上。

17

主题

258

帖子

264

积分

中级会员

Rank: 3Rank: 3

积分
264
发表于 2006-12-23 23:48:00 | 显示全部楼层

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

第一次听说DrawPrimitive是不阻塞的函数,关于这个函数我查了一下,sdk上我没有找到有关阻塞的说明啊,你们是看什么书知道的啊?
只知道在画图元的时候是流水的..........这个在体系结构讲cpu上有,但是关于显卡的体系结构是要看什么有关的书呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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