Skip to content

draw_indexed_indirect silently fails on Quest 3/2 (Adreno 740/650) #8801

@zonkypop

Description

@zonkypop

Description
draw_indexed_indirect and multi_draw_indexed_indirect produce no output on Meta Quest 3 (Adreno 740 GPU) when using wgpu's Vulkan backend through OpenXR. No errors are reported - the draw calls simply render nothing. Direct draw_indexed calls with identical parameters work correctly.

Platform
Device: Meta Quest 3 and 2
GPU: Qualcomm Adreno 740 / Adreno 650
OS: Android (Quest OS)
wgpu version: 27.0.0 and 28.0.0 (both tested)
Backend: Vulkan

Repro steps
This works (renders correctly):

rustpass.set_index_buffer(index_buf.slice(..), wgpu::IndexFormat::Uint32);
pass.draw_indexed(0..50000, 0, 0..1);

This doesn't

let indirect_data: [u32; 5] = [
    50000, // index_count
    1,     // instance_count
    0,     // first_index
    0,     // base_vertex
    0,     // first_instance
];

let indirect_buffer = device.create_buffer_init(&wgpu::util::BufferInitDescriptor {
    label: Some("Indirect"),
    contents: bytemuck::cast_slice(&indirect_data),
    usage: wgpu::BufferUsages::INDIRECT,
});

pass.set_index_buffer(index_buf.slice(..), wgpu::IndexFormat::Uint32);
pass.draw_indexed_indirect(&indirect_buffer, 0);

It does work when testing on Linux/Windows on desktop with OpenXR

Possible causes?

  • Driver bug?

Validation
Unable to enable Vulkan validation layers on Quest - they conflict with OpenXR device creation and prevent the app from starting.

This is related to a project I am working on to let people run browser js/webgpu code natively: https://github.com/zonkypop/lattice - hoping to get webxr+webgpu working for the Steam Frame 🥸

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: correctnessWe're behaving incorrectlybackend: vulkanIssues with Vulkanexternal: driver-bugA driver is causing the bug, though we may still want to work around ittype: bugSomething isn't working

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions