Bug with latest Galaxy S8 update : no VR mode anymore

We have some Galaxy S8 here at work for test builds.

One of them was updated last week with the latest update available. If I remember well that’s the update gibing Daydream compatibility to all S8/S8+.

Since that update, I can’t run any application made for Cardboard on a S8.

The symptoms :

  • when I install & run an apk on the updated phone, the app starts and goes immediately on background.
    When I click on the button to switch between the opened apps, I see it’s in the background.
  • when I click on the app to bring it back in the foreground, it switch instantly back to the background.
  • I have a light green “floating button” on the app that invite me to have the app take the whole scren (I suppose it’s related to the fact that the system buttons on the S8 can disappears completely from the screen).

I have built the apk with an Unity 2017.1.b, for Android 5.0+. I tried two version of the Google SDK, 1.30 and 1.70, with the same results.

Does anybody got the same problems ?

Edit : fixed “can’t” typo…

Is your google vr services up to date on the phone?

Bumping to stay in the loop:
I am at the moment shopping around for a Galaxy S8 to dev GearVR on.
Would be nice if it works properly with DayDream/Cardboard also.

The google VR service is up to date on the phone.

Here’s the specs of a S8 phone, pre-update, that works, and the one psot-update that doesn’t works :

I post what is different between the two

Pre-update:
Android 7.0
Samsung Experience 8.1
Kernel 4.4.13-11544126 (Thu Jun 8 22:08:42)
Operator software SAOMC_SM-G950F_OXM_XEF_0058
Level of Android Security : 1 june 2017
Post-update :
Android 7.0
Samsung Experience 8.1
Kernel 4.4.13-11814589 (Fri Jul 7 17:48:34)
Operator software SAOMC_SM-G950F_OXM_XEF_0061
Level of Android Security : 1 july 2017

So you are saying the post-update phone will run any cardboard app installed via GooglePlay store OK?

You only have a problem running cardboard apps that you are building on it?

Sorry, I need modify my original post, it was a typo. I can’t run any application on the S8 that I’m building.

But the post-update phone will run cardboard apps that you install via the playstore?

It depends : lots of VR apps from the Playstore run properly. One or two are crashing the same way. No app that I build with the Cardboard SDK run on the S8.

Some further informations :
NDK used : android-ndk-r10e
JDK : jdk1.8.0_111

Graphic API :OpenGL ES3
Multipass stereo
Build for Android 5.0 Lollipop (API level 21).
The apk isn’t a FAT one, but ARMv7 only.

Hmm, That indicates that the problem may not be just with your unity setup.

I made a build of the GoogleVR test scene with particles:
http://www.silicondroid.com/unity/apk/cardboard_test.apk

It works on ZTE-Axon7.
What about your updated s8?

Unity Setup:
Unity 2017.1.0p4
GoogleVR 1.7
jdk1.8.0_91
ndk-r10e_64 (not relevant only used for IL2CPP)

Build setup:
API level 21
VR: cardboard only
Multipass stereo.
ARM7 only
GFX API preference list: OGles3, OGLes2, vulkan

I tried to build an APK from a Mac, installing the APK on the updated S8, same problem.

Here’s the setup of the Mac :
Unity 2017.1.0f3
Auto Graphics API
Minimum API Level Android 5.0 (API Level 21).

Virtual Reality SDK : Cardboard
GVR SDK : 1.30

And what about this APK:
http://www.silicondroid.com/unity/apk/cardboard_test.apk (16Mb)

does that run on updated s8?

@SiliconDroid : your apk crashes the same way as mine on the updated S8.
I ran one of my app with the S8 connected to a Mac to see the adb output log.

Here’s what I found (I cleaned the output to make it readable).

TrimDiskCacheJob: Current cache size 10204mb
[...]
PlayerInitEngineNoGraphics OK
AndroidGraphics::Startup window =  0xde0dc808
[EGL] Attaching window :0xde0dc808
[EGL] Request: ES 3.1+AEP RGB0 000 0/0
[EGL] Checking ES 3.1 support...
[EGL] ES 3.1 support detected
[EGL] Found: ID[5] ES 3.1+AEP RGB16 565 0/0
[EGL] Request: ES 3.1+AEP RGB0 000 0/0
[EGL] Found: ID[5] ES 3.1+AEP RGB16 565 0/0
[EGL] Request: ES 3.0 RGBA32 8888 0/0
[EGL] Found: ID[1] ES 3.0 RGBA32 8888 0/0 AFBT
ANativeWindow: (2008/1080) RequestedResolution: (0/0) RenderingResolution: (0/0) EGLSurface: (2008/1080)
Renderer: Mali-G71
Vendor:   ARM
Version:  OpenGL ES 3.2 v1.r3p0-00rel0.52a2c5ce14e045eb8b9074c171442f91
GLES:     3
OPENGL LOG: Creating OpenGL ES 3.2 graphics device ; Context level  <OpenGL ES 3.1 AEP> ; Context handle -863930112
[EGL] Attaching window :0xde0dc808
Requested framebuffer: resolution[2008x1080], rgba[8/8/8/8], depth+stencil[on], samples[1]
Created framebuffer: resolution[2008x1080], rgba[8/8/8/8], depth+stencil[24/8], samples[0]
[EGL] Attaching window :0xde0dc808
Initialize engine version: 2017.1.0f3 (472613c02cf7)
AudioManager: Selecting AudioTrack output...
Begin MonoManager ReloadAssembly
[...]
- Completed reload, in  0.114 seconds
PlayerInitEngineGraphics OK
Found 23 native sensors
Sensor :        Accelerometer ( 1) ; 0.002394 / 0.00s ; LSM6DSL Acceleration Sensor / STM
Sensor :        Accelerometer ( 1) ; 0.002394 / 0.00s ; LSM6DSL Acceleration Sensor / STM
Sensor :        Accelerometer ( 1) ; 0.002394 / 0.00s ; LSM6DSL Acceleration Sensor / STM
SetWindow 0 0x0
[EGL] Attaching window :0x0
SetWindow 0 0xe6ac8008
SetWindow 0 0xe6ac8008
Sensor :        Accelerometer ( 1) ; 0.002394 / 0.00s ; LSM6DSL Acceleration Sensor / STM
Choreographer available: Enabling VSYNC timing
Could not recreate VR window because GfxDevice is in an invalid state (device lost)
[EGL] Attaching window :0xe6ac8008
SetWindow 0 0xc9458008
ANativeWindow: (2678/1440) RequestedResolution: (0/0) RenderingResolution: (0/0) EGLSurface: (2008/1080)
Sensor :        Accelerometer ( 1) ; 0.002394 / 0.00s ; LSM6DSL Acceleration Sensor / STM
[EGL] Attaching window :0xc9458008
ANativeWindow: (2678/1440) RequestedResolution: (0/0) RenderingResolution: (0/0) EGLSurface: (2678/1440)
SetWindow 0 0x0

What I have highlighted sounds fishy too me (source of the bug ?) :
ANativeWindow: (2678/1440) RequestedResolution: (0/0) RenderingResolution: (0/0)
EGLSurface: (2678/1440)
SetWindow 0 0x0

I’m not the only one. Someone just posted something in the ‘Issues’ of the googlevr github repo :
Unity Cardboard Applications crashing on Samsung S8 since update to Google VR Services” (#695) : Unity Cardboard Applications crashing on Samsung S8 since update to Google VR Services · Issue #695 · googlevr/gvr-unity-sdk · GitHub

They reference this post on the forums : https://forum.unity3d.com/threads/galaxy-s8-crash.486911/

So, after reading the mentionned links, I can confirm that the (temporary) workaround works !

You need to go to the Configuration | Installed apps panel on your phone, select the ‘Google VR’ service, and ‘Deactivate’ it, to force it back to factory settings and version. My apps doesn’t crash after that.

1 Like

Here’s some tests I have done, and note back on the github ticket : Cardboard (and hybrid 2D+Daydream) apps crash on S8 when screen resolution is not WQHD+ (Switching Between VR.enabled cause crash) · Issue #671 · googlevr/gvr-unity-sdk · GitHub (the previous one was marked as a duplicate of this one by the google devs).


I have the same problem with a S8.

@fredsa : I made the test you asked for. Here’s the results, with the latest Google VR Services update :

  • S8 with the Google VR Services activated, @FHD+(2220x1080) resolution = crash on startup for the app
  • S8 with the Google VR Services deactivated @FHD+(2220x1080) resolution = app runs fine, I can push screen luminosity as high as I want
  • S8 with the Google VR Services deactivated @FHD+(2220x1080) resolution = app runs fine, I can push screen luminosity as high as I want, it doesn’t crash if I switch back to the panel, activate Google VR Services while the app is running and go back to the app
  • S8 with the Google VR Services activated @WQHD+(2960x1440) resolution = app runs fine, I can’t push screen luminosity as high as I want, and it seems that the phones goes in low persistence mode.
  • S8 with the Google VR Services deactivated @WQHD+(2960x1440) resolution = app runs fine, I can push screen luminosity as high as I want, and the phone doesn’t goes into low persistence mode (I suppose it’s because the Service isn’t activated).

Glad to see now labelled as bug, the wheels are in motion.

So with latest updates and GVR service:
With phone set at native res everything works fine.

Workaround popup dialog:

“Dear user: Stop enjoying yourself and get to work configuring your phone to native resolution, and stop moaning, it’s far easier than writing software you slacker… etc”.

@SiliconDroid : yes with latest update, GVR service, and the phone at native resolution, your app will work.
However it still starts in low persistence mode, with reduced luminosity. Even by activating “Performance Mode”, I ca’t prevent that.

I think reduced luminosity and low persistence may be forced on purpose by the service.
reduced luminosity of screen cells allows them to switch faster.
“low persistence” I think then doubles screen refresh rate which reduces persistence even more.
I seem to remember reading human eye adapts so much, and because VR encompasses all vision there is no need for higher brightness, but I suppose with daydream light leaks this design foundation breaks a little.

@SiliconDroid : in fact the low persistence mode kicks back automatically if you plug the phone into a S8. I wonder if the code made by Google inside the Google VR Service doesn’t trigger it as a byproduct of the VR surface generation.

Edit : Even if some people can tolerate it, I have a client which is very sensitive to that and doesn’t want that mode activated.
I also have noticed that while this persistence mode is activated and that you look at a bright white surface, you can notice the stuttering from the gyroscope (something that’s not as visible when looking at darker colors).