当应用程序在支持无头图形的 Ec2 实例上启动时,IDirect3D9::CheckDeviceType 返回 D3DERR_NOTAVAILABLE

问题描述

我编写了一个应用程序,它在需要硬件加速才能正确呈现的 AWS Ec2 实例上启动统一应用程序。此启动器应用程序会进行预先健全性检查,以确保 HAL(硬件加速)设备存在 Direct3D 调用,例如

D3DDISPLAYMODE mode;
HRESULT hr;
if (FAILED (hr = s_D3D->GetAdapterDisplayMode (g_D3DAdapter,&mode)))
{
   return false;
}

if(FAILED (hr = s_D3D->CheckDeviceType (g_D3DAdapter,D3DDEVTYPE_HAL,mode.Format,TRUE)))
{
   /// This fails.
   return false;
}

当我按预期从远程桌面运行启动器应用程序时,健全性检查成功。但是在启动时启动应用程序时它会失败。

如果我删除健全性检查,Unity 应用程序会在启动时正确加载,但某些需要硬件加速的元素/着色器无法正确呈现。

我使用的是带有 Windows10 和 NVIDIA Tesla T4 显卡的 AWS EC2 G4 实例。我还安装了最新的驱动程序(Nvidia 和 Directx)。

为了进行额外的调试,我尝试打印一些调试日志以查看是否甚至检测到了图形驱动程序并且应用程序似乎确实找到了它。

D3DADAPTER_IDENTIFIER9 adapter_info;
hr = s_D3D->GetAdapterIdentifier (g_D3DAdapter,&adapter_info);
std::cout << "Device Name: " << adapter_info.DeviceName << std::endl;
std::cout << "Device Id: " << std::to_string (adapter_info.DeviceId) << std::endl;
std::cout << "Device Desc: " << adapter_info.Description << std::endl;
std::cout << "Device Driver: " << adapter_info.Driver << std::endl;

如果您对我如何在启动时启动应用程序过程感到好奇,我会使用 AWS 的 UserDataScripts 功能。通过 UserData 脚本,我确保应用程序进程以管理员权限运行并在正确的 Windows 会话下运行。以下是讨论我正在使用的方法的链接。 https://www.codeproject.com/Articles/35773/Subverting-Vista-UAC-in-Both-32-and-64-bit-Archite

到目前为止,我所做的搜索中没有发现与此主题相关的任何内容。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...