gpt4 book ai didi

directx - 在 DirectX 11 中跨适配器传输纹理

转载 作者:行者123 更新时间:2023-12-02 18:35:42 30 4
gpt4 key购买 nike

我正在使用桌面复制 API 从一个 GPU 捕获桌面,并且需要将纹理(位于 GPU 内存中)复制到另一个 GPU。为此,我有一个捕获线程,用于获取桌面图像,然后使用 ID3D11DeviceContext::CopyResource 将其复制到暂存资源(在同一设备上创建)。然后,我使用 Read 映射该暂存资源,使用 WriteDiscard 映射目标动态资源(在其他设备上创建)并复制数据。在渲染线程上,我从动态纹理执行 ID3D11DeviceContext::CopyResource 到最终渲染目标。

这可行,但一段时间后(通常在 30 秒内)我会在 nvwgf2umx.dll 中随机崩溃(异常代码:0xc0000005)。这两个设备都是在没有 SingleThreaded 创建标志的情况下创建的。我做了一些研究,using a dynamic texture似乎是做到这一点的最佳方法。

关于导致崩溃的原因有什么想法吗?这可能是 Nvidia 驱动程序特有的错误吗?

最佳答案

您必须通过 QueryInterface 与您正在使用的其他设备共享资源。这在 C# 中看起来像这样(我猜你在 C++ 中除了给定的代码片段之外实际上正在使用它)

var sharedResource = aquiredDesktopTexture11.QueryInterface<SharpDX.DXGI.Resource>();
var sharedSurfDesktop = device11.OpenSharedResource<SharpDX.Direct3D11.Texture2D>(sharedResource.SharedHandle);

..were aquiredDesktopTexture11是从原始捕获中复制的资源,然后sharedSurfDesktop可以被其他设备使用。还要确保用法是互斥的。

关于directx - 在 DirectX 11 中跨适配器传输纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321167/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com