gpt4 book ai didi

c++ - 链接 Cuda (cudart.lib) 使 DXGI DuplicateOutput1() 失败

转载 作者:行者123 更新时间:2023-12-01 14:48:25 25 4
gpt4 key购买 nike

由于一个模糊的原因,在我的项目中添加 cudart.lib 后,我对 IDXGIOutput5::DuplicateOutput1() 的调用失败并出现错误 0x887a0004 (DXGI_ERROR_UNSUPPORTED)。

我在 Visual Studio 2019 上工作,我的监视器复制代码是经典的:

hr = output5->DuplicateOutput1(this->dxgiDevice, 0, sizeof(supportedFormats) / sizeof(DXGI_FORMAT), supportedFormats, &this->dxgiOutputDuplication);

我目前唯一尝试对 cuda 做的就是列出 Cuda 设备:
 int nDevices = 0;

cudaError_t error = cudaGetDeviceCount(&nDevices);

for (int i = 0; i < nDevices; i++) {

cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, i);

LOG_FUNC_DEBUG("Graphic adapter : Descripion: %s, Memory Clock Rate : %d kHz, Memory Bus Width : %u bits",
prop.name,
prop.memoryClockRate,
prop.memoryBusWidth
);
}

而且这段代码是 之后很久才调用我尝试使用 DXGI 开始监视器复制。

在我的应用程序中,每件事似乎都是正确的:我调用了 SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2),但我没有在离散 GPU 上运行(参见 [ https://support.microsoft.com/en-us/help/3019314/error-generated-when-desktop-duplication-api-capable-application-is-ru][1])

顺便说一句,它曾经工作过,如果我从链接器输入中删除“如此简单”的 Cuda 调用和 cudart.lib ,它就会再次工作!

我真的不明白什么会导致这种奇怪的行为,有什么想法吗?

最佳答案

...after I added cudart.lib in my project



当您链接 CUDA 库时,您会强制您的应用程序在离散 GPU 上运行。您已经知道应该避免这种情况,但您仍然通过此链接强制它。

...and I'm not running on e discrete GPU...



您是,到 CUDA 的静态链接是提示使用 dGPU 的特定情况。

在某些系统中,桌面复制不适用于 dGPU,而您的系统似乎就是其中之一。即使不明显,您也看到了 [NVIDIA] 设计的行为。

(但也有其他系统,其中桌面复制对 dGPU 有效,但对 iGPU 无效)。

您的潜在解决方案是 this line :

Application is not directly linked against cuda.lib or cudart.lib or LoadLibrary to dynamically load the nvcuda.dll or cudart*.dll and uses GetProcAddress to retrieve function addresses from nvcuda.dll or cudart*.dll.

关于c++ - 链接 Cuda (cudart.lib) 使 DXGI DuplicateOutput1() 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60892280/

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