Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Applications Running Natively On Meta Quest Devices Are Deadlocked #17890

Closed
galibzon opened this issue May 8, 2024 · 0 comments · Fixed by #17969
Closed

Applications Running Natively On Meta Quest Devices Are Deadlocked #17890

galibzon opened this issue May 8, 2024 · 0 comments · Fixed by #17969
Assignees
Labels
kind/bug Categorizes issue or PR as related to a bug. sig/graphics-audio Categorizes an issue or PR as relevant to SIG graphics-audio.

Comments

@galibzon
Copy link
Contributor

galibzon commented May 8, 2024

Describe the bug
When my app runs natively on Meta Quest Pro it is deadlocked since initialization.

Assets required
Can be tested with OpenXRTest project found in the o3de-extras/

Steps to reproduce
Compile and deploy OpenXRTest (or any other OpenXR enabled project) to run as APK on a Meta Quest Pro.

Expected behavior
Whatever default level it should open and render fine.

Actual behavior
The application deadlocks. The headset views are black.

Logcat message:

<12:32:08> 
Trace::Assert
 C:/GIT/o3de/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Vulkan.h(102): (544755841392) 'void AZ::Vulkan::AssertSuccess(VkResult)'
Trace::Assert
 C:/GIT/o3de/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Vulkan.h(102): (544755841392) 'void AZ::Vulkan::AssertSuccess(VkResult)'
<12:32:08> 
ASSERT: Vulkan API method failed: Timeout
ASSERT: Vulkan API method failed: Timeout
<12:32:08> 

Vulkan Validation Error:

[Error] (vkDebugMessage) - [ERROR][Validation] Validation Error: [ UNASSIGNED-Threading-MultipleThreads ] Object 0: handle = 0x908683000000001d, type = VK_OBJECT_TYPE_FENCE; | MessageID = 0x141cb623 | THREADING ERROR : vkResetFences(): object of type VkFence is simultaneously used in thread 544755841392 and thread 541604301168

Callstack during deadlock assert:

tgkill 0x0000007f858e0e98
AZ::Debug::Platform::DebugBreak() Trace_UnixLike.cpp:97
AZ::Debug::Trace::Break() Trace.cpp:282
AZ::Debug::Trace::Assert(char const*, int, char const*, char const*, ...) Trace.cpp:399
AZ::Vulkan::AssertSuccess(VkResult) Vulkan.h:102
AZ::Vulkan::BinaryFence::WaitOnCpuInternal() const BinaryFence.cpp:93
AZ::Vulkan::Fence::WaitOnCpuInternal() const Fence.cpp:81
AZ::RHI::Fence::WaitOnCpu() const Fence.cpp:89
AZ::Vulkan::AsyncUploadQueue::QueueUpload(const AZ::RHI::StreamingImageExpandRequestTemplate<…> &, unsigned int) AsyncUploadQueue.cpp:418
AZ::Vulkan::StreamingImagePool::InitImageInternal(const AZ::RHI::StreamingImageInitRequestTemplate<…> &) StreamingImagePool.cpp:165
$_7::operator()() const StreamingImagePool.cpp:100
AZStd::Internal::INVOKE<…>($_7 &) invoke_traits.h:208
AZStd::invoke<…>($_7 &) invoke.h:54
AZStd::Internal::function_util::invoke_void_return_wrapper::call<…>($_7 &) function_template.h:32
AZStd::Internal::function_util::get_invoker::call<…>(AZStd::Internal::function_util::function_buffer &) function_template.h:172
AZStd::function_intermediate::operator()() const function_template.h:604
AZStd::function::operator()() const function_template.h:684
AZ::RHI::ResourcePool::InitResource(AZ::RHI::Resource *, const AZStd::function<…> &) ResourcePool.cpp:186
AZ::RHI::ImagePoolBase::InitImage(AZ::RHI::Image *, const AZ::RHI::ImageDescriptor &, AZStd::function<…>) ImagePoolBase.cpp:20
AZ::RHI::StreamingImagePool::InitImage(const AZ::RHI::StreamingImageInitRequestTemplate<…> &) StreamingImagePool.cpp:95
AZ::RPI::StreamingImage::Init(AZ::RPI::StreamingImageAsset &) StreamingImage.cpp:147
AZ::RPI::StreamingImage::CreateInternal(AZ::RPI::StreamingImageAsset &) StreamingImage.cpp:102
$_4::operator()(AZ::Data::AssetData *) const ImageSystem.cpp:164
AZStd::Internal::INVOKE<…>($_4 &, AZ::Data::AssetData *&&) invoke_traits.h:208
AZStd::invoke<…>($_4 &, AZ::Data::AssetData *&&) invoke.h:54
AZStd::Internal::function_util::invoke_void_return_wrapper::call<…>($_4 &, AZ::Data::AssetData *&&) function_template.h:32
AZStd::Internal::function_util::get_invoker::call<…>(AZStd::Internal::function_util::function_buffer &, AZ::Data::AssetData *&&) function_template.h:172
AZStd::function_intermediate::operator()(AZ::Data::AssetData *&&) const function_template.h:604
AZStd::function::operator()(AZ::Data::AssetData *) const function_template.h:684
AZ::Data::InstanceDatabase::EmplaceInstance(const AZ::Data::InstanceId &, const AZ::Data::Asset<…> &, const AZStd::any *) InstanceDatabase.h:408
AZ::Data::InstanceDatabase::FindOrCreate(const AZ::Data::InstanceId &, const AZ::Data::Asset<…> &, const AZStd::any *) InstanceDatabase.h:332
AZ::RPI::StreamingImage::CreateFromCpuData(const AZ::RPI::StreamingImagePool &, AZ::RHI::ImageDimension, AZ::RHI::Size, AZ::RHI::Format, const void *, unsigned long, AZ::Uuid) StreamingImage.cpp:96
AZ::RPI::ImageSystem::CreateDefaultResources(const AZ::RPI::ImageSystemDescriptor &) ImageSystem.cpp:462
AZ::RPI::ImageSystem::Init(const AZ::RPI::ImageSystemDescriptor &) ImageSystem.cpp:195
AZ::RPI::RPISystem::InitializeSystemAssets() RPISystem.cpp:446
$_0::operator()() const RPISystemComponent.cpp:144
AZStd::Internal::INVOKE<…>($_0 &&) invoke_traits.h:208
AZStd::invoke<…>($_0 &&) invoke.h:54
<lambda>::operator()() BusImpl.h:875
decltype(InvokeTraits::forward<AZ::RPI::RPISystemComponent::Activate()::$_0>(fp)()) AZStd::Internal::INVOKE<void AZ::BusInternal::EBusBroadcastQueue<AZ::EBus<AZ::TickEvents, AZ::TickEvents>, AZ::BusInternal::EBusImplTraits<AZ::TickEvents, AZ::TickEvents>>::QueueFunction<AZ::RPI::RPISystemComponent::Activate()::$_0>(AZ::RPI::RPISystemComponent::Activate()::$_0&&)::'lambda'()&>(AZ::RPI::RPISystemComponent::Activate()::$_0&&) invoke_traits.h:208
AZStd::invoke_result<AZ::RPI::RPISystemComponent::Activate()::$_0>::type AZStd::invoke<void AZ::BusInternal::EBusBroadcastQueue<AZ::EBus<AZ::TickEvents, AZ::TickEvents>, AZ::BusInternal::EBusImplTraits<AZ::TickEvents, AZ::TickEvents>>::QueueFunction<AZ::RPI::RPISystemComponent::Activate()::$_0>(AZ::RPI::RPISystemComponent::Activate()::$_0&&)::'lambda'()&>(AZ::RPI::RPISystemComponent::Activate()::$_0&&) invoke.h:54
void AZStd::Internal::function_util::invoke_void_return_wrapper<void>::call<void AZ::BusInternal::EBusBroadcastQueue<AZ::EBus<AZ::TickEvents, AZ::TickEvents>, AZ::BusInternal::EBusImplTraits<AZ::TickEvents, AZ::TickEvents>>::QueueFunction<AZ::RPI::RPISystemComponent::Activate()::$_0>(AZ::RPI::RPISystemComponent::Activate()::$_0&&)::'lambda'()&>(void AZ::BusInternal::EBusBroadcastQueue<AZ::EBus<AZ::TickEvents, AZ::TickEvents>, AZ::BusInternal::EBusImplTraits<AZ::TickEvents, AZ::TickEvents>>::QueueFunction<AZ::RPI::RPISystemComponent::Activate()::$_0>(AZ::RPI::RPISystemComponent::Activate()::$_0&&)::'lambda'()&) function_template.h:41
void AZStd::Internal::function_util::get_invoker<void (), AZStd::Internal::function_util::function_obj_tag, AZStd::stateless_allocator>::call<void AZ::BusInternal::EBusBroadcastQueue<AZ::EBus<AZ::TickEvents, AZ::TickEvents>, AZ::BusInternal::EBusImplTraits<AZ::TickEvents, AZ::TickEvents>>::QueueFunction<AZ::RPI::RPISystemComponent::Activate()::$_0>(AZ::RPI::RPISystemComponent::Activate()::$_0&&)::'lambda'()>(AZStd::Internal::function_util::function_buffer&) function_template.h:147
AZStd::function_intermediate::operator()() const function_template.h:604
AZStd::function::operator()() const function_template.h:684
AZ::EBusQueuePolicy::Execute() Policies.h:266
AZ::BusInternal::EBusBroadcastQueue::ExecuteQueuedEvents() BusImpl.h:366
O3DELauncher::Run(const O3DELauncher::PlatformMainInfo &) Launcher.cpp:587
android_main(android_app *) Launcher_Android.cpp:421
android_app_entry android_native_app_glue.c:226
__pthread_start(void *) 0x0000007f858f22ac
__start_thread 0x0000007f8589e370

Screenshots/Video
N/A

Found in Branch
commit e7da962 (HEAD -> development, origin/development)
Author: Gene Walters [email protected]
Date: Tue May 7 13:58:15 2024 -0700

Print Warning When Using Legacy Asset IDs (#17863)

Desktop/Device (please complete the following information):

  • Meta Quest Pro

Additional context
Something similar happened recently when Huawei introduced Timeline Semaphores in this PR:
#17569
Which broke Quest devices runtime.
And got fixed with two PRs:

  1. Request the timeline semaphore extension for Vulkan <1.2 #17766
  2. Fixes crash on Quest devices #17877
@galibzon galibzon added kind/bug Categorizes issue or PR as related to a bug. needs-sig Indicates an issue or PR lacks a `sig/foo` label and requires one. needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. labels May 8, 2024
@michalpelka michalpelka added sig/graphics-audio Categorizes an issue or PR as relevant to SIG graphics-audio. and removed needs-sig Indicates an issue or PR lacks a `sig/foo` label and requires one. labels May 9, 2024
@moudgils moudgils removed the needs-triage Indicates an issue or PR lacks a `triage/foo` label and requires one. label May 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/bug Categorizes issue or PR as related to a bug. sig/graphics-audio Categorizes an issue or PR as relevant to SIG graphics-audio.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants