Forum Discussion
choof
8 years agoExplorer
[GearVR] Crash when using Single-Pass Stereo Rendering and OVROverlay on Android 7
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
Replies have been turned off for this discussion
- choofExplorerI 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) - choofExplorerThis is also happening on the Galaxy S8, also running Nougat
- choofExplorer@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? - choofExplorer@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.
- choofExplorerI 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. - choofExplorer@imperativity FYI: I tested with the 5.6.1p1 patch that was released today, still crashes.
- choofExplorer@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?
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device
Other Meta Support
Related Content
- 1 year ago
- 2 years ago