[Image Removed]使用UE5.5.4官方源码引擎创建一个新工程,打一个安卓-Vulkan-Debug包,推送启动命令开启FDM:-dpCVars=“r.Vulkan.VRSFormat=3,r.VRS.Enable=1” ,运行时输入控制台命令:r.VRS.DebugForceRate 3,在某些设备上必现崩溃。
崩溃设备:小米11(骁龙888/Adreno660) 仅支持VK_EXT_fragment_density_map;
正常设备:小米15(骁龙8Elite/Adreno830) 同时支持VK_EXT_fragment_density_map和VK_KHR_fragment_shading_rate;
我的猜想:在仅支持VK_EXT_fragment_density_map的设备上,使用FDM功能都必定崩溃?
崩溃堆栈如上,Vulkan层有一个警告(Log中可见),我即使消除了这个警告后仍然会崩溃在上面的代码中,请问我该如何修复这个崩溃?
感谢回复!
Liu.Wei
(Liu.Wei)
2
Hi,
抱歉,我们内部没有测试过FDM,所以没有太多经验分享。你方便测试一下,在小米15的设备上,设置r.Vulkan.VRSFormat=5吗,因为引擎其实有两种扩展检查,小米15用的是FVulkanKHRFragmentShadingRateExtension,而小米11用的是FVulkanEXTFragmentDensityMapExtension,我想验证一下小米15用FVulkanEXTFragmentDensityMapExtension会不会也有一样的问题。
Hi,Liuwei
按照你的提示,我在小米15设备上,设置r.Vulkan.VRSFormat=5启动,运行时输入控制台命令:r.VRS.DebugForceRate=3,它正常运行,不会崩溃,但是会卡住,UI有反应但是相机不会移动;
在小米15上,我补充了测试,如果我将控制台命令:r.VRS.DebugForceRate=3放到UECommandline中,发现画面变成黑色的,RenderDoc上ColorAttachment没有内容;
我补充了测试机型,分别得到下面的结果:
红米 K50 Ultra Qualcomm Snapdragon 8+ Gen 1 Adreno 730 闪退
红米 Turbo 3 Qualcomm Snapdragon 8s Gen 3 Adreno 735 闪退
vivo X100 MediaTek Dimensity 9300 Immortalis-G720 MC12 闪退
vivo X90 MediaTek Dimensity 9200 Immortalis-G715 MC11 闪退
红魔 9S Pro+ Qualcomm Snapdragon 8 Gen 3 Adreno 750 闪退
红米 Note 14 Pro MediaTek Helio G100-Ultra Mali-G57 MC2 黑屏
你们后续有计划支持Mobile Vulkan 的 FDM吗?
感谢回复!
Liu.Wei
(Liu.Wei)
4
Hi,
感谢提供反馈,你方便把FVulkanEXTFragmentDensityMapExtension.PostPhysicalDeviceProperties 里的GRHIVariableRateShadingImageDataType和GRHIVariableRateShadingImageFormat改成下面的格式,然后再测试一下吗?
GRHIVariableRateShadingImageDataType = VRSImage_Palette; GRHIVariableRateShadingImageFormat = PF_R8_UINT;
Hi,Liuwei
按照你的提示,我仍然用Commandline -dpCVars="r.Vulkan.VRSFormat=5,r.VRS.Enable=1,r.VRS.DebugForceRate=3"启动,并把FVulkanEXTFragmentDensityMapExtension.PostPhysicalDeviceProperties 里的GRHIVariableRateShadingImageDataType和GRHIVariableRateShadingImageFormat改成了VRSImage_Palette和PF_R8_UINT,对于小米11来说,仍会报错,堆栈与之前相同;但对于小米15来说,原来是画面会黑色,但现在能够正常显示了,且控制台命令r.VRS.DebugForceRate能够正常切换VRS分辨率;
我补充了一下用Commandline -dpCVars="r.Vulkan.VRSFormat=5,r.VRS.Enable=1"启动,在小米15上,发现使用控制台命令r.VRS.DebugForceRate不能正常的切换VRS分辨率,表现是没有VRS切换的效果,但相机能够正常移动了,供参考;
我补充了一下:让小米15 FDM不黑屏后和卡住的修改是GRHIVariableRateShadingImageFormat=PF_R8_UINT;我只改这一句FDM也是生效的;另外我在红米Turbo3(支持VK_KHR_fragment_shading_rate),但是它同样崩溃(Vulkan层提示不支持VK_FORMAT_R8_UINT+FRAGMENT_DENSITY_MAP_BIT_EXT的组合),它和小米15pro是相同的Vulkan版本(1.3.128),供参考
感谢回复!
Liu.Wei
(Liu.Wei)
6
Hi,
请问你有其他Snapdragon 888的设备吗?我在三星Galaxy Z Flip3 5G的设备上测试(只有 **VK_EXT_fragment_density_map),**设置r.VRS.Enable=1, r.Vulkan.VRSFormat=3,并动态修改r.VRS.DebugForceRate,没有出现你说的崩溃情况。所以我感觉应该还是设备驱动层实现有问题。如果需要,可以单独添加这些出问题的设备到deviceprofile里,然后关闭vrs。或者只在明确支持vrs的设备上,开启vrs。
Hi,Liuwei
我这边也测试了一下三星Galaxy Z Flip3设备,同样会崩溃,此外也测试了一下红魔 6(NX669J Adreno 660 骁龙888)和真我 GT(RMX2202 Adreno 660 骁龙888),这两台设备也会崩溃:
r.Vulkan.VRSFormat=3这个命令需要添加到启动命令上,我使用UECommandline文件来添加的命令,所以这部分是否和我的测试条件一致?
另外,想问下你输入r.VRS.DebugForceRate=3的时候,能否观察到VRS生效的效果?
感谢回复!
Hi,Liuwei
附件中存放了未修改引擎下打的Debug包,仅在DefaultEngine.ini中添加了r.Vulkan.VRSFormat=3,r.VRS.Enable=1,控制台指令输入r.VRS.DebugForceRate=3,我这边还是会崩溃(三星Galaxy Z Flip3);
我尝试修改了FVulkanEXTFragmentDensityMapExtension.PostPhysicalDeviceProperties中的GRHIVariableRateShadingImageFormat=PF_R8_UINT; 结果仍然崩溃;
感谢回复!
Liu.Wei
(Liu.Wei)
9
Hi,很奇怪,我用你的apk 设置r.VRS.DebugForceRate=3就会崩溃,但是我自己打包的apk不会。你可以试一下我这个apk。另外你能把你的工程打包发给我吗,我再测试一下看看。
Liu.Wei
(Liu.Wei)
10
Hi,我觉得放在commandline跟放在ini里应该没什么本质区别,你方便把你打包的apk发给我测试一下吗?我就是在工程的DefaultEngine.ini里,开启了r.VRS.Enable=1, r.Vulkan.VRSFormat=3,没做什么其他的改变,请问你有做什么特殊的设置吗?
我设置DebugForceRate,但是好像不太看得出来变化。
Hi,Liuwei
附件中存放了工程文件,我试了一下你发过来的安装包,确实没有崩溃,我在其他的骁龙888上(Mi11)也试了一下,也没有崩溃;
感谢回复!
Liu.Wei
(Liu.Wei)
12
Hi,
我之前是因为用了deferred,所以没出问题,deferred并没有开启vrs。另外如果要vrs起效还需要设置xr.VRS.FoveationLevel, 不过启动后的确就崩溃了。
我暂时看不出问题,正在跟高通的同学沟通,如果后续有进展,我会在这里更新。