freedreno: rendering corruption in dead cells
It doesn't show up as well in the screenshot, but live you get flickering tile pattern in the opening menu screen (does not appear to effect game play)
Unfortunately, I haven't managed to get a gapid/renderdoc/apitrace of the game, something the game is doing causes the various gl interceptors to fail.
But, disabling binning (setprop mesa.fd.mesa.debug nobin
) or forcing sysmem (setprop mesa.fd.mesa.debug nogmem
) "fixes" the problem. And a hack to ignore GL_MAP_UNSYNCHRONIZED_BIT
in glMapBufferRange()
"fixes" the problem. As far as I can tell, the app is not properly synchronizing VBO updates, and is racing with the GPU. For immediate mode renderers this goes unnoticed since the VBO contents only differ slightly between updates, which is why nobin/nogmem "fix" the problem. I believe this would not be visible on mali due to running full VS pass once and writing results back to memory. But adreno instead writes out a visibility stream with a binning pass shader, and then runs the full VS per tile.. small changes in VBO inputs to the VS between the binning pass and tile pass causes inconsistency in the visibility stream, causing the tile flicker. (AFAUI vc4/v3d work in a similar way to adreno, and probably should show similar symptoms.)
I think we need a mechanism to have game specific workarounds on android.