|
|
1
1
根据微软的查克沃尔伯恩的directxdev响应,除了“地址空间不足”之外,另一个原因可能是“页面池不足”。
我们确实创建了很多Direct3D资源。 |
|
|
2
0
这是我发布给directxdev的:;)
调试运行时是否提供任何有用的信息? 编辑:我唯一能想到的是光圈内存用完了。我不知道这是如何与pciexpress工作的,但在agp上你可以设置光圈大小。我不知道怎么检查它是否满了。我怀疑你看到的错误是报告它已满。你用废弃标志锁了很多锁吗?如果是这样的话,它们可能会在光圈中创建大量的新分配,并导致内存不足。不过,这是纯粹的猜测工作。 我想要 猜测 如果这种情况只发生在你的一些用户身上,那就是低端机器上的用户。如果运行缓慢,那么最终会在命令缓冲区中缓冲大量数据。这将使控制滞后,而且“可能”会导致您看到的问题。您可能希望尝试确保命令缓冲区不会太长。如果确保在没有discard标志(即标志设置为0)的情况下完成每个帧的第一个锁定,则这将导致管道暂停,直到顶点缓冲区已渲染并使命令缓冲区与您同步。这将导致一个慢下来,因为命令缓冲将无法平滑出帧速率峰值一样容易… 总之…只是猜测而已! |
|
|
3
0
有关内存不足的问题是有效的。我们需要一些关于lock()调用的详细信息来确定, 但是 例如,如果它在默认池中,并且是动态的(通过了d3dlock_discard标志),那么很有可能您的驱动程序试图找到一个未使用的内存块来返回(因为它在内部有两个或三个缓冲区),并且失败,因为您很快就会发现,视频内存你累坏了。 |