【问题标题】:Preload texture to GPU memory in D3D11在 D3D11 中将纹理预加载到 GPU 内存
【发布时间】:2021-10-05 23:27:12
【问题描述】:

如何在 Direct3D11 中将更新的托管 2D 纹理预加载到 GPU 内存?

在 Direct3D9 中,我调用了 IDirect3DBaseTexture9::PreLoad 以保证纹理准备好进行渲染。

【问题讨论】:

    标签: directx texture-mapping direct3d11


    【解决方案1】:

    Direct3D9Ex 和 Direct3D 10 到 DirectX 12 没有 D3DPOOL_MANAGED 的概念。这是因为这些版本的 Direct3D 没有 Direct3D 9 所具有的“丢失设备”。他们只会在您的游戏/应用程序运行时 GPU 崩溃或更新驱动程序时发生“设备移除”。见Microsoft Docs

    从 Windows Vista 开始,显存由操作系统管理。纹理被分页进出显存,并由系统内存自动支持。您可以使用SetEvictionPriority 方法提供提示。

    【讨论】:

    • 感谢您的回复!我的应用程序加载了一系列纹理,它们都应该被复制到 GPU 内存中。例如,我需要在特定时间准确地显示纹理。我提前加载纹理,然后将其设置为渲染。如果纹理停留在 CPU 内存中,则意味着操作系统应该在渲染的那一刻复制这个纹理,当纹理呈现在屏幕上时,它可能会导致一个小的延迟(1-2 帧)。在 Metal (macOS) 中,我可以调用 didModifyChange() 函数来强制更新纹理到 GPU 内存。很奇怪,我不能对 DX11 做同样的事情。
    • DirectX 12 对驻留有更直接的控制,但也需要应用程序显式处理视频内存的“过度提交”场景。见Microsoft Docs
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2013-06-01
    • 2016-10-02
    相关资源
    最近更新 更多