Skip to content

Adreno 840 (SD 8 Elite Gen 5 / Galaxy S26+): stock-driver fallback needed; then SIGBUS in DxvkMemoryAllocator on first UI draw #23

Description

@KLCLAU

Adreno 840 (Snapdragon 8 Elite Gen 5 / Galaxy S26+): SIGBUS in DxvkMemoryAllocator after forcing stock-driver fallback

Device

  • Galaxy S26+ SM-S942W, Android 16, kernel 6.12.30-android16
  • SoC Snapdragon 8 Elite Gen 5 (SM8850), Adreno 840, stock driver 0842.19.8 (Vulkan 1.3, textureCompressionBC present)
  • APK: GeneralsZH-Android-android-v0.1.0-debug.apk (Beta release android-v0.1.0)

Summary

The bundled Turnip vulkan.ad07xx.so enumerates 0 physical devices on Adreno 840
(DxvkInstance::enumAdapters: Failed to enumerate adapters), so the app dies at
TheDisplay->init().

Forcing the stock-driver path (documented in the renderer-research doc as the rung-1
fallback for Adreno 8xx) by making gxSetupTurnipDriver()'s staged copy fail
(GENERALSX_TURNIP_* env left unset) gets much further: Vulkan + swapchain come up
on the stock driver, all shaders compile, the engine enters the render loop and renders
frames — then crashes with SIGBUS (BUS_ADRALN) in DXVK on the first UI draw.

Crash (stock-driver path)

Fatal signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0x…47f  (4-byte-unaligned), tid SDLThread
#00 __aarch64_ldadd4_acq                                   libdxvk_d3d9.so
#01 dxvk::DxvkMemoryAllocator::allocateMemory(VkMemoryRequirements const&, dxvk::DxvkAllocationInfo const&)+908
#02 dxvk::DxvkMemoryAllocator::createBufferResource(...)+176
#03 dxvk::D3D9ConstantBuffer::AllocSlice()+148
#04 dxvk::D3D9DeviceEx::UpdateFixedFunctionVS()+1396
#05 dxvk::D3D9DeviceEx::PrepareDraw(...)+2512
#06 dxvk::D3D9DeviceEx::DrawIndexedPrimitive(...)+168
#07 dxvk::D3D8Device::DrawIndexedPrimitive(...)+132
#08 DX8Wrapper::Draw(...)                                   libmain.so
#09 Render2DClass::Render()+1444
#10 W3DDisplay::onFlush()+40
#11 W3DDisplayString::draw(...)+636
#12 InGameUI::drawRenderFps(int&, int&)+372
#13 InGameUI::postWindowDraw()+124
#14 W3DInGameUI::draw() … GameClient::update() … SDL3GameEngine::execute() … SDL_main

__aarch64_ldadd4_acq is a 4-byte atomic add; the fault address is not 4-byte aligned,
so an atomic counter inside DxvkMemoryAllocator (DXVK 2.6.0, aarch64 clang 18) is being
placed/accessed unaligned on ARM64.

Also seen (stock-driver path)

Endless Presenter: Got VK_SUBOPTIMAL_KHR, recreating swapchain (portrait 1080x2340
panel, app renders 2340x1080) — surfaceTransform / pre-rotation not handled; the
swapchain is recreated every frame.

Asks

  1. Wire up the rung-1 stock-driver path for Adreno 8xx so vulkan.ad07xx.so isn't
    force-loaded when it enumerates no adapters (fall back instead of throwing), or ship
    an a8xx-capable Turnip.
  2. The DxvkMemoryAllocator unaligned-atomic SIGBUS on ARM64.
  3. Handle VK_SUBOPTIMAL_KHR / surfaceTransform without a per-frame recreate loop.

Happy to run more captures — full logcat + tombstone available.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions