我在基于Direct3D11的应用程序中遇到以下问题:
有时候(在某些机器上)我会得到一个看似已损坏的纹理,几条线条只是黑色。像这样的东西(显示一个纹理):
有时它和它一样糟糕,有时它只有一两行。我确保它不是渲染问题;所有观察结果都表明纹理数据不正确。
到目前为止,只有在以下条件下才能观察到这一点:
- 我们正在创建一个不可变的纹理(CPUAccessFlags = None,Usage = Default,BindFlags = ShaderResource)
- 使用带有" Intel HD Graphics 520"的笔记本电脑和" AMD Radeon R7 M360"使用Windows 7(使用"AMD Enduro"-technology)
- 仅使用纹理格式" R16G16B16A16_UNorm"," R8G8B8A8_UNorm"," R32_Float",而不是" R8_UNorm"和" R16_UNorm" (其余的我不知道他们是否有效)
- 并且它似乎只是间歇性地发生(如果GPU非常繁忙,似乎更有可能)
我尝试整理一个小样本,以重现问题:https://github.com/ptahmose/ImmutableTextureUploadTest
在这段代码中,我正在上载一个不可变纹理,然后将其复制到一个临时纹理,然后将数据与上载的数据进行比较。
现在,通过这个repro项目,我得到以下内容:
- 如果这个repro-application在机器上独自运行,一切都很好。
- 如果我在机器上运行另一个使用D3D11的应用程序,我们会在此测试应用程序中遇到错误。
即。如果我们运行它的两个实例(或者,如果我运行基于D3D11的实际应用程序),则此测试应用程序报告错误。
有人跑过类似的东西吗?这个问题可以复制吗?我错过了什么吗? ......当然:我有什么方法可以解决/解决这个问题?
感谢阅读!