cancel
Showing results for 
Search instead for 
Did you mean: 

[GearVR] Crash when using Single-Pass Stereo Rendering and OVROverlay on Android 7

choof
Explorer

The OVROverlay component causes a crash on GearVR on my Galaxy S7 running Android 7 (Nougat) when built with Single-Pass Stereo Rendering enabled. 

Repro steps:
1. Create a new project
2. Import Oculus Utilities unitypackage
3. Make a new scene
4. Add OVROverlay component and configure it to render something (tested Overlay Cubemap and Overlay Quad)
5. Build & Run for GearVR
6. Notice the crash

Here's the stack of the error:

Fatal signal 8 (SIGFPE), code -6, fault addr 0x4b97 in tid 19385 (Thread-7)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Verizon/heroqltevzw/heroqltevzw:7.0/NRD90M/G930VVRU4BQC5:user/release-keys'
Revision: '14'
ABI: 'arm'
pid: 19351, tid: 19385, name: Thread-7  >>> com.darkwind.s7crashtest <<<
signal 8 (SIGFPE), code -6 (SI_TKILL), fault addr 0x4b97
    r0 00000000  r1 00004bb9  r2 00000008  r3 00000047
    r4 d05ff978  r5 00000008  r6 d05ff920  r7 0000010c
    r8 cdf684b8  r9 d017b398  sl cdf6826c  fp d017b398
    ip 00000002  sp d05ff070  lr f62a86f7  pc f62aaf78  cpsr 200f0010
backtrace:
    #00 pc 00049f78  /system/lib/libc.so (tgkill+12)
    #01 pc 000476f3  /system/lib/libc.so (pthread_kill+34)
    #02 pc 0001d829  /system/lib/libc.so (raise+10)
    #03 pc 0005506c  /data/app/com.darkwind.s7crashtest-1/lib/arm/libOVRPlugin.so (__aeabi_idiv0+8)
    #04 pc 00014cd8  /data/app/com.darkwind.s7crashtest-1/lib/arm/libOVRPlugin.so (_ZN3OVR4Util15CompositorVRAPI11appendLayerERNS1_7OverlayEiRK12ovrTracking_R13ovrFrameParmsR23ovrFrameParmsRemap2DExtR32ovrFrameParmsOffcenterCubeMapExt+164)
    #05 pc 00016348  /data/app/com.darkwind.s7crashtest-1/lib/arm/libOVRPlugin.so (_ZN3OVR4Util15CompositorVRAPI8EndFrameEi+2548)
    #06 pc 0000fa68  /data/app/com.darkwind.s7crashtest-1/lib/arm/libOVRPlugin.so (ovrp_EndFrame+60)
    #07 pc 00e291c4  /data/app/com.darkwind.s7crashtest-1/lib/arm/libunity.so (_ZN8VRDevice17SendVRDeviceEventEjj+128)
    #08 pc 008d2d98  /data/app/com.darkwind.s7crashtest-1/lib/arm/libunity.so (_ZN15GfxDeviceWorker10RunCommandER20ThreadedStreamBuffer+24672)
    #09 pc 008d3d64  /data/app/com.darkwind.s7crashtest-1/lib/arm/libunity.so (_ZN15GfxDeviceWorker3RunEv+52)
    #10 pc 008ccd18  /data/app/com.darkwind.s7crashtest-1/lib/arm/libunity.so (_ZN15GfxDeviceWorker18RunGfxDeviceWorkerEPv+92)
    #11 pc 006797ec  /data/app/com.darkwind.s7crashtest-1/lib/arm/libunity.so (_ZN6Thread16RunThreadWrapperEPv+84)
    #12 pc 000471c3  /system/lib/libc.so (_ZL15__pthread_startPv+22)
    #13 pc 00019d99  /system/lib/libc.so (__start_thread+6)
7 REPLIES 7

choof
Explorer
I forgot to mention:

This is happening on 5.6.0p2 & 5.6.0p4 with Oculus Utlities 1.12, 1.13, 1.14 (all combinations tested) 

choof
Explorer
This is also happening on the Galaxy S8, also running Nougat

choof
Explorer
@imperativity I don't think I can see the attached image you're referencing. 

Would it be helpful if I made a reproduction case project and uploaded it to Dropbox for you guys? 

choof
Explorer
@imperativity I just tested again with 5.6.1f1 and the Oculus Utilities 1.14. Crashes when using single-pass, does not crash when using multi-pass. 

choof
Explorer
I noticed in your screenshot you only had 1 texture set for your overlay textures array. I've been using 2. When I set it to just 1, I noticed that there was an error in the Awake() function of OVROverlay, causing the whole script to shut down and never attempt to draw the overlay. I fixed the bug in Awake() by adding the following code at the beginning of the for loop:

if (i >= textures.Length)
                continue;


This allowed the script to continue executing and draw the Overlay. It now crashes on the device as expected.

choof
Explorer
@imperativity FYI: I tested with the 5.6.1p1 patch that was released today, still crashes. 

choof
Explorer
@imperativity

This should be an Adreno chip. It's a Verizon S7 with Nougat. SM-G930V.

I'm sorry if I confused you with the 1 vs. 2 textures in the texture array. My point there was, when the texture array is set to length of 1, like in your screenshot, the OVROverlay component is actually throwing an index out of range exception and disabling itself before attempting to draw anything in the Timewarp layer. This causes the Unity quad GameObject you've created to continue rendering instead. This happens in the editor as well as device (thus not being able to reproduce the crash). It's hard to notice what's happening when using the same texture for the quad's material and the OVROverlay texture array. If you change the texture used on the quad's material to be different than the one you set in the texture array, you should notice which one is actually rendering. My "fix" posted above was to avoid the index out of range exception, allowing the OVROverlay component to stay enabled, thereby getting to the point of drawing to the Timewarp layer, which crashes the device. 

The logcat for the device crash is in my original post, did you need more than just the crash?