-
Notifications
You must be signed in to change notification settings - Fork 11.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Bug]: 笔记本上V2rayN 6.45版运行时阻止NVIDIA控制面板改变显示模式 #5255
Comments
老问题了, 一直没找到咋修 |
@ShiinaRinne 好的谢谢,请问如何使用 |
直接解压点开就可以,重新走一遍和v2rayN出问题时相同的流程,看看是否还会触发 |
@ShiinaRinne 还是会有同样的问题 |
@ShiinaRinne 好的感谢,我会关注的 |
你试试 |
@ShiinaRinne 我看了问题,预计不是 WPF 这边的问题,但是确实加上一些显卡限制进入硬件渲染模式是可行的 比方说之前在处理 dotnet/wpf#3817 问题时,我就建议使用判断显卡决定是否进入软渲染模式 由于等厂商修复的时间一般都会比较长,也许自救也是个好主意 但是我进一步阅读相关帖子发现似乎关闭了硬件加速依然还会有此问题: #2981 (comment) 我手头上也没有可以复现的设备可以调查,也很抱歉没有调查思路 |
我咨询了NVIDIA的技术支持, 他们需要一些日志来定位问题. @Teiii14
之后应该也会有技术支持来查看这几个issue |
自动切换和关闭硬件加速时都会出错, 可以强行让它使用显卡渲染吗? 在后台时应该也不会吃很多资源, 但不知道那个自动切换是个什么逻辑 也可以试试 @Kukuair 的方法能不能临时解决, 为v2rayN单独配置一下https://nvidia.custhelp.com/app/answers/detail/a_id/2615/related/1
使用相当早期的wpf打包几个, 直到找到是哪部分功能导致的, 这个方法会有效吗? 但测试起来感觉实在有点麻烦XD |
@Kukuair 谢谢,这个方法我试过了没有用 |
@ShiinaRinne @lindexi 非常感谢 |
@lindexi @ShiinaRinne 顺带一提,最近我发现Microsoft Store中的Quick look软件也会出现这样的情况,不知道和V2rayN出现的错误有没有共同之处https://www.microsoft.com/store/productId/9NV4BS3L1H4S?ocid=pdpshare |
核心就是麻烦咯,要是自己有设备还好,不然每次要麻烦大家帮忙测试也是要命 |
QL-Win/QuickLook#1126 https://www.nvidia.com/content/Control-Panel-Help/vLatest/en-us/mergedProjects/nv3d/Closing_Blocking_Programs.htm |
Eugeny/tabby#657 (comment) |
Quick look 是一个 .NETFramework 4.6.2 的 WPF 程序,共同点都是 WPF 程序 |
感谢你的链接地址,我去给他们加上引用。现在 WPF 这边是按闹分配资源的,所以链接多了,说不定就有更多资源好投入了 |
我看powertoys甚至都有这个问题, 提了好几个了, 看微软会不会出个大佬修修 |
啊这, tabby那边不是wpf的问题, 只是找到了个可能有点用的相关信息... |
我估计要 NVIDIA 的大佬哩 由于 WPF 底层使用 DX 进行渲染,此时可能就被 NVIDIA 通过加载模块,或者是调用函数识别为游戏进程之类的。如果是这样的话, 有可能确实不能切换,否则可能遇到丢失设备等问题导致应用程序挂掉 |
@ShiinaRinne @lindexi 感谢你们,之后有什么方法要测试的我可以帮忙 |
@Teiii14 我有两个测试应用,还请你帮忙测试一下:
这是我编写的空 WPF 应用,还请帮忙测试一下,看看是否空 WPF 都能复现问题: 下载之后解压缩,双击 EmptyWPF.exe 打开看看效果 应用的代码: https://github.com/lindexi/lindexi_gd/blob/831156070b218d0186e6d44e0307b2bc9962a167/EmptyWPF
下载地址: D2D.zip 下载之后解压缩,双击 D2D.exe 打开看看效果 我预期以上两个应用都能复现问题 |
@lindexi 在我这里还是不行,甚至第一个程序自己都会出现这个问题 |
@Teiii14 特别感谢,通过这两个小测试应用可以确定这个问题和 v2rayN 没有关系。如果你能单独测试第二个程序,即“空 D2D 应用”的话,那可以继续排除 WPF 框架部分的关系 |
@lindexi 单独第二个程序没有出现问题。但是我认为问题还是在v2rayN或者v2rayN使用的某些代码。因为在我用的绝大多是软件都没出现这个问题,唯独v2rayN还有一些其他的软件。我想这些程序应该是有触发了显示模式无法自动切换的共同点,或许是WPF,也或许是软件里存在什么与英伟达冲突而产生冲突 |
@lindexi 神奇的是这个问题只出现在自动模式上面,而我进行手动独集显切换是没有任何问题的,我在想是不是v2rayN等之类的软件的权限要高于英伟达自动切换模式,仅次于系统和用户,导致显示模式切换被这些程序阻止。因为用户具有绝对高的权限,而软件不一定 |
@lindexi 然后我觉得我们可以排除“程序正在调用独显时英伟达时不会切换显示模式”这种情况,一是当独立显卡有进程时,依旧可以切换至集显模式,无论自动还是手动。二是v2rayN本身并没有调用英伟达独立显卡。 |
你的猜测是很有道理的。但是这部分比较广泛,不太好直接定位到问题。也有可能是 英伟达 自己挖了什么坑,刚好咱掉进去而已 |
第二点是有点迷的,因为除了直接调用之外,不排除驱动层间接帮忙调用了之类的。这个我不知道可以如何入手进行调查 |
那是一个坏消息,很可能是 wpf 的 gfx 层,即渲染层,踩到某个坑了,这一层比较庞大,可能需要上点二分的方法了 |
@lindexi @ShiinaRinne 不知道是否可以联系上Project X的人,看看他们会不会管这种小问题 |
我没有这个渠道的联系方式 |
xray那边吗?某个群倒是能找到,但他们应该不管这个 |
能否提供一下,我去找他们。问题毕竟是出现在这个软件上 |
@Teiii14 根据咱的测试,空 WPF 应用也能复现问题,有可能这个问题到我这一层或者更下层就够了。我认为找他们可能兜兜转转最后还是回到我这里哈 |
有空再来试试这个测试程序,这是开了进程级软渲染的空 WPF 应用: 应用的代码: https://github.com/lindexi/lindexi_gd/blob/d73b650dcb7109966eb8619acc36f8bba54cf2a2/EmptyWPF 预期是这个应用能够正常。 如这个应用不能复现问题,那就是任何触碰到硬件加速的模块都被标记,估计只有在开启渲染之前进入软渲染模式才能规避 如这个应用也能复现,则可能问题就在 D3D 相关模块,任何触碰 D3D 的 3D 模块都会被标记,这就只能等 N 的大佬来解决了 |
现在 v2rayN 的关闭硬件加速功能就是通过 |
@ShiinaRinne 我正是发现了这一点才写了以上的测试应用。这是因为 https://github.com/2dust/v2rayN/pull/3493/files#diff-96773009aed874ddc50e8da8fb0d2a82ba83e862fb01c323de31a8e573bbadfdR203 已经在碰触 D3D 模块之后再开启软渲染 此时已经经过了很多初始化逻辑了。为了减少这部分影响,我就尝试在 App 构造函数里面做,在构造函数进行配置,尝试规避碰触 D3D 模块带来的影响 我担心的问题是一旦碰触 D3D 模块的硬件渲染部分模块,将会给到 N 一个信号,导致后续即使切换为软渲染也不会被清理掉此信号,从而导致了此问题 |
受教了,一直没想到过这个。 |
@ShiinaRinne 这也是猜测的,毕竟不知道 N 内部的实现 |
@lindexi 还是出现问题 |
@Teiii14 感谢测试。看起来这个问题很棘手了。似乎任何有初始化 D3D 相关的模块,都会导致此问题,需要英伟达来解决了 |
@lindexi 这该怎么反馈给他们,感觉好麻烦 |
等个一年半载之类的hhh |
感谢各位 |
|
@ShiinaRinne 我试过的,改成独显或者集显都没用。 |
有位微软的大佬和我分析说可能是在某些设备上,走了 D3D9On12 这条路,走这条路线的话,底层全统一进入了 Dx12 入口层,此时预期是不会有问题的。在有问题的设备上,很可能是直接 DX9 的入口层对到 N 卡驱动层,而 N 卡图省事,就直接简单判断 DX9 入口进来的就不给切 额外说的是一旦走了 D3D9On12 这条路,那么 DX9 只是一个 API 层而已,底层全统一进入的都是 DX12 入口层。而根据 #5255 (comment) 测试结果,看起来走 DX12 入口层是没有问题的 可能的测试步骤是调试一下,看渲染层是否走了 D3D9On12 这条路 上图是我画的示意图,但由于调查是否走了 d3d9on12.dll 可能需要捞 dump 或用其他工具,相对来说比较麻烦,我先继续找找周边看有没有设备 也许可以使用 https://github.com/narzoul/ForceD3D9On12 项目来辅助测试 |
这个只影响电脑有两个显卡, 临时解决,需要大型渲染应用,退出阻止的应用,手动切换到独立显卡后,重新启动他们. 这个问题需要微软和硬件上讨论一个流程,估计没那么容易解决,等待更长的时间 |
@vnobo 看起来 NVIDIA 是可以解决问题的,但是没有动手。如 dotnet/wpf#9286 (comment) 所述:
这个问题似乎我给微软和 NVIDIA 两个都挂了好久了,已经很久没有动静了,也许可以再重新挂一个问题了。不过我没有英伟达的内部反馈渠道,反馈了都没有动静
这个指的是?如果好动手的话,我就在 WPF 这边修修看 |
这个没办法从软件层面去解决. |
如果他们能给个显示模式更改的接口,应该可以自己在客户端实现一个可选的切换功能来适应这个变化,当程序获取到显示模式即将改变时,自动完成重启或切换。不求用户无感,哪怕只能减少几步操作,也是很大的改善了。 或者试试能不能 hook 一下,在显卡模式更改之前通知一下其他程序之类的。 |
预期情况
正常情况下应该不对此显示模式自动切换功能产生任何影响
实际情况
在我的笔记本电脑(ThinkBook 16+)上,当6.45版V2rayN运行时,控制面板上面的显示模式设置为“自动”(即自动切换显示屏输出为CPU核显或者独立显卡),若我试图启动一款游戏或者其他任何会使得NVIDIA控制面板将显示模式自动切换为“仅NVIDIA GPU”的应用程序时,NVIDIA控制面板将提示无法切换显示模式,且NVIDIA控制面板会提示是V2rayN阻止了显示模式的切换。
复现方法
日志信息
2024-06-20 01:51:05.8235-INFO Current_SessionEnding
2024-06-20 01:51:05.8235-INFO MyAppExit Begin
2024-06-20 01:51:05.8554-INFO MyAppExit End
2024-06-20 01:51:05.8694-INFO OnExit
2024-06-20 01:52:52.6891-INFO v2rayN start up | v2rayN - V6.45 - 2024/06/18 | C:\v2rayN\v2rayN-With-Core\v2rayN.exe
2024-06-20 01:53:54.1064-INFO UpdateTaskRunSubscription
2024-06-20 01:54:54.1370-INFO UpdateTaskRunGeo
2024-06-20 03:37:57.0238-INFO subscription更新订阅结束
2024-06-20 09:38:04.5298-INFO subscription更新订阅结束
2024-06-20 10:36:34.2820-INFO MyAppExit Begin
2024-06-20 10:36:34.3139-INFO MyAppExit End
2024-06-20 10:36:34.3481-INFO OnExit
2024-06-20 11:36:36.4677-INFO v2rayN start up | v2rayN - V6.45 - 2024/06/18 | C:\v2rayN\v2rayN-With-Core\v2rayN.exe
2024-06-20 11:37:13.0152-INFO MyAppExit Begin
2024-06-20 11:37:13.0415-INFO MyAppExit End
2024-06-20 11:37:13.0599-INFO OnExit
2024-06-20 11:37:14.8091-INFO v2rayN start up | v2rayN - V6.45 - 2024/06/18 | C:\v2rayN\v2rayN-With-Core\v2rayN.exe
2024-06-20 11:38:15.2725-INFO UpdateTaskRunSubscription
2024-06-20 11:39:15.2688-INFO UpdateTaskRunGeo
2024-06-20 11:41:56.9607-INFO MyAppExit Begin
2024-06-20 11:41:56.9941-INFO MyAppExit End
2024-06-20 11:41:57.0075-INFO OnExit
2024-06-20 11:47:36.5422-INFO v2rayN start up | v2rayN - V6.45 - 2024/06/18 | C:\v2rayN\v2rayN-With-Core\v2rayN.exe
2024-06-20 11:48:37.1796-INFO UpdateTaskRunSubscription
2024-06-20 11:49:37.1860-INFO UpdateTaskRunGeo
2024-06-20 12:00:13.8919-INFO MyAppExit Begin
2024-06-20 12:00:13.9231-INFO MyAppExit End
2024-06-20 12:00:13.9458-INFO OnExit
2024-06-20 12:00:26.3664-INFO v2rayN start up | v2rayN - V6.45 - 2024/06/18 | C:\v2rayN\v2rayN-With-Core\v2rayN.exe
2024-06-20 12:01:26.9108-INFO UpdateTaskRunSubscription
额外信息
No response
我确认已更新至最新版本
我确认已查询历史issues
The text was updated successfully, but these errors were encountered: