部分手机上,使用VulkanRHI时,GPUSort的结果不正确

经排查,三星Galaxy S24的问题出现在GPU Sort阶段中,从UpSweep阶段开始输出的OutOffset结果就已经不对。

如果把GPUSort中的GPUMemoryBarrier更换为GPUMemoryBarrierwithGroupSync,则可以获得正确的结果。

另外,各种型号的手机,即使Particle的排序结果正确,在调用FX.TestGPUSort 1后,得到的结果也仍为Fail。此问题可能与上述问题无关。

[Image Removed]

[Image Removed]

重现步骤
引擎版本:UE5.5.4 Launcher

一个NiagaraEmitter的Particle需要排序,在PC包体以及编辑器下结果正常,但在部分机型的手机上,使用VulkanRHI的包体中,粒子会发生严重的闪烁以及丢失问题。

出现问题的机型:三星Galaxy S24

未出现问题机型:三星Galaxy S23、三星Galaxy S20、三星Galaxy S10、Pixel 9 Pro

您好,

感谢您的咨询。

您可以确认一下您的三星 Galaxy S24 是哪一个版本吗?这个型号根据发售地区可能会使用不同的 SoC (Snapdragon 或 Exynos)。

除此之外,您方便提供一个能复现这个粒子排序问题的简单测试工程并附带上问题截图吗?

[Content removed]

关于 FX.TestGPUSort,可以确认目前最新的 CL 中能按您的描述复现这个问题。我会为这个问题提交一份问题报告,稍后会附上问题追踪链接。

您好,

FX.TestGPUSort 的问题追踪链接是:

Soc: Snapdragon 8gen3,GPU:Adreno 750

你好,这个问题应该已经fix了,可以试试下面的改动

https://github.com/EpicGames/UnrealEngine/commit/0c3112f26cfda89690e758934e1a69bbe2577fc9

这里咨询了2个问题,这里fix的应该是 FX.TestGPUSort吧

请问另外这个问题,也修复了吗?

`经排查,三星Galaxy S24的问题出现在GPU Sort阶段中,从UpSweep阶段开始输出的OutOffset结果就已经不对。

如果把GPUSort中的GPUMemoryBarrier更换为GPUMemoryBarrierwithGroupSync,则可以获得正确的结果。`

Hi,

抱歉,看漏了一个问题,感谢反馈信息。

我想问一下,如果改成下面这样,就是在下面这个循环前面,加上一个GroupMemoryBarrierWithGroupSync,是否可以解决问题?(我感觉可能功能差不多?)

`// Acquire LocalRakingTotals.
GroupMemoryBarrierWithGroupSync();

for ( uint RakingOffset = 1; RakingOffset < RAKING_THREADS_PER_DIGIT; RakingOffset <<= 1 )
{
// Acquire LocalRakingTotals.
PPS_BARRIER();
Total += LocalRakingTotals[RakingIndex - RakingOffset];
LocalRakingTotals[RakingIndex] = Total;
}`

你好,

按照修改测试了一下,仍旧存在问题。

好的,感谢,应该是我的理解有误。你先按自己的改法修复,我会把情况反馈给总部同学和高通,看看是否有更合适的改法。