STRUCT DRM_ASAHI_QUEUE_CREATE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct drm_asahi_queue_create(9) β€” the Kernel API Manual glow-up πŸ’–

okay so bestie, this is a page straight out of the Kernel API Manual and it's literally about struct drm_asahi_queue_create β€” the args you hand over to DRM_IOCTL_ASAHI_QUEUE_CREATE. it's giving "let me make a queue bestie" and honestly? iconic. πŸŽ€


✨ NAME ✨

struct drm_asahi_queue_create β€” the arguments that get passed to DRM_IOCTL_ASAHI_QUEUE_CREATE. that's it, that's the whole vibe. πŸ¦‹


🌸 SYNOPSIS 🌸

struct drm_asahi_queue_create {
    __u32 flags;
    __u32 vm_id;
    __u32 priority;
    __u32 queue_id;
    __u64 usc_exec_base;
 };

look at her. five fields. no cap, she's neat. πŸ‘‘


🫢 Members 🫢

  • flags β€” MBZ, bestie. Must Be Zero. like, don't touch, don't be quirky, just leave it at zero fr fr. πŸ’€
  • vm_id β€” the ID of the VM this queue is bound to. this queue's whole committed relationship, lowkey. πŸ’œ
  • priority β€” one of drm_asahi_priority. pick your fighter from that enum. πŸ”₯
  • queue_id β€” the queue ID, and it's returned to you. yes, it's an output wearing an input's clothes. main character energy. πŸ‘‘
  • usc_exec_base β€” the GPU base address for all USC binaries (aka shaders) on this queue. USC addresses are 32-bit and live relative to this 64-bit base. so like, the shaders are the little fish and this is the big pond. 🐟

🧚 what it actually sets 🧚

this sets the following registers on all queue commands:

  • USC_EXEC_BASE_TA (vertex)
  • USC_EXEC_BASE_ISP (fragment)
  • USC_EXEC_BASE_CP (compute)

and here's the tea: the hardware does let us configure these independently per command β€” slay, flexible β€” but we literally do not have a use case for that. so instead, we expect userspace to fix a 4GiB VA carveout for USC memory and pass its base address right here in this field. one base to rule them all. πŸ’…βœ¨

ngl bestie, remember: that's a 4GiB carveout, not a vibe you can just eyeball. the addresses are 32-bit-relative to the 64-bit base, so the carveout has to be big enough to hold them all. 🌈

⭐ SEE ALSO ⭐

  • Kernel file ./include/uapi/drm/asahi_drm.h
  • Introduction to the Asahi UAPI(9)
  • enum drm_asahi_ioctl_id(9)
  • struct drm_asahi_params_global(9)
  • enum drm_asahi_feature(9)
  • struct drm_asahi_get_params(9)
  • struct drm_asahi_vm_create(9)
  • struct drm_asahi_vm_destroy(9)
  • enum drm_asahi_gem_flags(9)
  • struct drm_asahi_gem_create(9)
  • struct drm_asahi_gem_mmap_offset(9)
  • enum drm_asahi_bind_flags(9)
  • struct drm_asahi_gem_bind_op(9)
  • struct drm_asahi_vm_bind(9)
  • enum drm_asahi_bind_object_op(9)
  • enum drm_asahi_bind_object_flags(9)
  • struct drm_asahi_gem_bind_object(9)
  • enum drm_asahi_cmd_type(9)
  • enum drm_asahi_priority(9)
  • struct drm_asahi_queue_destroy(9)
  • enum drm_asahi_sync_type(9)
  • struct drm_asahi_sync(9)
  • DRM_ASAHI_BARRIER_NONE(9)
  • struct drm_asahi_cmd_header(9)
  • struct drm_asahi_submit(9)
  • struct drm_asahi_attachment(9)
  • struct drm_asahi_zls_buffer(9)
  • struct drm_asahi_timestamp(9)
  • struct drm_asahi_timestamps(9)
  • struct drm_asahi_helper_program(9)
  • struct drm_asahi_bg_eot(9)
  • struct drm_asahi_cmd_render(9)
  • struct drm_asahi_cmd_compute(9)
  • struct drm_asahi_get_time(9)
  • DRM_IOCTL_ASAHI(9)

like, the whole friend group showed up. obsessed. πŸ«ΆπŸ’–


that's the whole page bestie, go forth and create queues responsibly. this lil drop of lore comes to you from ./include/uapi/drm, dated October 2026, and she's filed under struct drm_...queue_create(9). mwah, bye πŸ’…πŸŽ€βœ¨

πŸ“¦ where this page comes from