0

我们有一个使用 Direct3d/C++ 开发的渲染引擎的应用程序。最近我们遇到了一个涉及 ID3DXConstantTable SetFloat/SetVector 的崩溃(访问冲突),当我们在带有 PDB 的发布二进制文件中附加一个调试器时,它显示在 D3dx9_42.dll 内部。当我们减少使用的 D3dPOOL Rendertarget 纹理的数量时,这种崩溃消失的一种方式是,但从估计 GPU 内存负载它没有接近可用总量的一半,因为我们使用的是 3GB NVIDIA 卡。

怀疑这是由于内存覆盖导致的一些堆损坏,我们进行了代码检查,然后我们使用应用程序验证器和调试器来根除内存覆盖,这可能在运行的后期阶段崩溃。我们遇到了一些问题我们解决了。但是这种崩溃仍然存在于第一帧渲染 ID3DXConstantTable SetFloat/SetVector 。更多信息:这是使用 LARGEADDRESSAWARE 标志运行的 32 位应用程序。任何指针?

4

1 回答 1

0

过了一会儿,我才发现我使用注册表开关 MEM_TOP_DOWN(AllocationPreference=0x100000) 执行应用程序的问题,它立即在第一个 setfloat() 位置崩溃。然后转到知道必须使用 D3DXGetShaderConstantTableEx 检索常量表( ) 带有 D3DXCONSTTABLE_LARGEADDRESSAWARE 标志 :) 谢谢

于 2015-11-10T12:36:41.107 回答