Crash in Android with Startup movie after adding Vulkan build.

Hello.

The app and movie have no problem in ES2/ES3.1 packaging. But If I add Vulkan, the App crashes with following log when the Startup Movie is about to play.

11-28 11:01:20.554  3157  3157 F DEBUG   : Build fingerprint: 'samsung/heroltelgt/heroltelgt:6.0.1/MMB29K/G930LKLU1APH4:user/release-keys'
 11-28 11:01:20.554  3157  3157 F DEBUG   : Revision: '8'
 11-28 11:01:20.554  3157  3157 F DEBUG   : ABI: 'arm'
 11-28 11:01:20.554  3157  3157 F DEBUG   : pid: 22770, tid: 22840, name: Thread-2349  >>> com.studiognine.genesis <<<
 11-28 11:01:20.554  3157  3157 F DEBUG   : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
 11-28 11:01:20.564  3157  3157 F DEBUG   :     r0 00000000  r1 dcfff15c  r2 c548c9a0  r3 edd14e00
 11-28 11:01:20.564  3157  3157 F DEBUG   :     r4 ced1c400  r5 00000000  r6 cce48a50  r7 fffd5be4
 11-28 11:01:20.564  3157  3157 F DEBUG   :     r8 0013aebc  r9 3bd0ba00  sl cda902c0  fp c548c768
 11-28 11:01:20.564  3157  3157 F DEBUG   :     ip f487c93c  sp c548c748  lr dd147e1c  pc dd147e1c  cpsr 200f0010
 11-28 11:01:20.584  3157  3157 F DEBUG   : 
 11-28 11:01:20.584  3157  3157 F DEBUG   : backtrace:
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #00 pc 03db1e1c  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN27FAndroidMediaPlayerStreamer4TickEf+516)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #01 pc 03c1eff0  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN23FDefaultGameMoviePlayer12TickStreamerEf+64)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #02 pc 03c1ee88  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN23FDefaultGameMoviePlayer4TickEf+192)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #03 pc 032a5bac  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_Z26TickHighFrequencyTickablesd+276)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #04 pc 032a5cdc  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_Z22TickRenderingTickablesv+204)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #05 pc 032b0278  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN10TGraphTaskIZN29FRenderingThreadTickHeartbeat3RunEvE32EURCMacro_HeartbeatTickTickablesE11ExecuteTaskER6TArrayIP14FBaseGraphTask17FDefaultAllocatorEN13ENamedThreads4TypeE+80)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #06 pc 01ae93b0  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN16FNamedTaskThread23ProcessTasksNamedThreadEib+180)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #07 pc 01ae9070  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN16FNamedTaskThread21ProcessTasksUntilQuitEi+100)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #08 pc 032a5f48  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_Z19RenderingThreadMainP6FEvent+372)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #09 pc 032ada14  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN16FRenderingThread3RunEv+20)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #10 pc 01b25730  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN22FRunnableThreadPThread3RunEv+100)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #11 pc 01ae6530  /data/app/com.studiognine.genesis-1/lib/arm/libUE4.so (_ZN22FRunnableThreadPThread11_ThreadProcEPv+104)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #12 pc 0003fca3  /system/lib/libc.so (_ZL15__pthread_startPv+30)
 11-28 11:01:20.584  3157  3157 F DEBUG   :     #13 pc 0001a39b  /system/lib/libc.so (__start_thread+6)

The app does not crash when the movie is removed, but the whole performance goes down. I should investigate this with profiler but where should I look up for this issue?

Vulkan does not support movie playback. The startup and media framework movie support on Android depends on OpenGL since it shares the texture with our RHI context to use.

Does that mean they can’t use Vulkan if they need to play a movie in game? Is there any solution or any plan to solve this?

Thanks

Right now that is what it means. One way to work around this would be to use glReadPixels to read the video image back to CPU memory from the GL surface (requires creating an OpenGL context in addition to Vulkan) and updating a Vulkan texture with the contents since there is no way to share the texture between GL and Vulkan. This will be slower so will limit the video size you can use. I’ve been looking into this option for a future release.

The right way is going to require extensions to the Vulkan API which currently don’t exist.