2

使用 Direct3D9ex,可以在设备之间共享资源。是否也可以将这些共享资源与 Direct3D10 设备一起使用?

4

3 回答 3

3

是的,您可以使用此处描述的技术在 D3D9Ex 和 D3D10 设备之间共享资源:

功能总结(Direct3D 9 for Windows Vista)- 资源共享

请注意,GPU 对共享表面的访问是不同步的——例如,如果您同时在两台设备上渲染到相同的渲染表面,则预计会出现各种损坏和竞争。

要解决此问题,请确保一台设备在另一台设备使用它之前完成对共享表面的渲染。一种选择是事件查询(IDirect3DQuery9),另一种是对一个小表面做一个 StretchRect 并锁定它(如果锁定成功,GPU 完成了之前的所有工作)

于 2009-05-16T18:20:51.000 回答
0

您可以在设备或进程之间共享 Direct3D9 资源。

功能总结(Direct3D 9 for Windows Vista)- 资源共享

类似的技术适用于 Direct3D10 资源(您还可以指定共享句柄)。

这个GameDev.net 主题详细讨论了 D3D9Ex 和 D3D10 之间的共享。该主题的结论似乎是,虽然基于文档它应该是可能的(有一些限制),但在实践中它根本不起作用(也许限制非常严重,它们阻止了任何实际使用场景?)

于 2009-05-10T17:54:09.923 回答
-1

如果我错了,请有人纠正我,但是,不,不。

你有什么打算?在两个设备上都有静态纹理?如果是这样,通过将相同的纹理两次加载到两个不同的默认池中很容易实现。请注意,修改一个不一定会修改另一个。

如果您尝试在两个设备上共享托管纹理,我认为这无法通过任何形式的控制来实现。SLI 可能会在幕后进行,但您无法控制它。

如果您想在另一个设备上显式使用从一个设备生成的纹理,则必须从源设备下载它并在每一帧将其上传到目标设备。这会很慢,但如果绝对必要,可以这样做。

于 2009-02-11T16:48:04.760 回答