A GPU crash may occur due to divergent barriers in ScreenProbeConvertToIrradianceCS which is a compute shader used by Lumen global illumination. The crash has most widely been reported on Intel hardware, but may not be limited to Intel hardware.
Intel reported GPU crashes on their hardware caused by divergent group barriers in ScreenProbeConvertToIrradianceCS:
[numthreads(THREADGROUP_SIZE, THREADGROUP_SIZE, 1)] void ScreenProbeConvertToIrradianceCS( //... if (ScreenProbeIndex < GetNumScreenProbes() && ScreenProbeAtlasCoord.x < ScreenProbeAtlasViewSize.x) { float SceneDepth = GetScreenProbeDepth(ScreenProbeAtlasCoord); if (SceneDepth > 0) { // ... if (all(ProbeTexelCoord < ScreenProbeGatherOctahedronResolution)) { // ... GroupMemoryBarrierWithGroupSync();
The crash is difficult to reproduce, but the code does violate the spec, which says that barriers cannot be issued inside divergent branches for the same thread group.
ScreenProbeCompositeTracesWithScatterCS has a similar problem, and Intel's validation code also called out LightGridInjectionCS, FixupBordersAndGenerateMipsCS and ComputeProbeWorldOffsets. We should double-check the sync logic in these as well (at a quick glance, LightGridInjectionCS does your usual bounds check, but then issues a group barrier inside, which is technically wrong).
N/A, see description.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-273972 in the post.
0 |
Component | UE - Graphics Features - Lumen |
---|---|
Affects Versions | 5.6 |
Target Fix | 5.6 |
Fix Commit | 42242934 |
---|
Created | Apr 23, 2025 |
---|---|
Resolved | May 5, 2025 |
Updated | May 13, 2025 |