STRUCT DRM_ASAHI_SUBMIT(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct drm_asahi_submit(9) β€” Kernel API Manual πŸ’–

okay bestie, welcome to the manual page for struct drm_asahi_submit(9). It’s literally the argument struct you pass to DRM_IOCTL_ASAHI_SUBMIT, and yes we’re going through every field because the details matter, periodt. ✨

🌸 NAME 🌸

struct drm_asahi_submit β€” Arguments passed to DRM_IOCTL_ASAHI_SUBMIT.

✨ SYNOPSIS ✨

       struct drm_asahi_submit {
           __u64 syncs;
           __u64 cmdbuf;
           __u32 flags;
           __u32 queue_id;
           __u32 in_sync_count;
           __u32 out_sync_count;
           __u32 cmdbuf_size;
           __u32 pad;
        };

πŸŽ€ Members πŸŽ€

  • syncs β€” an optional pointer to an array of drm_asahi_sync. The first in_sync_count elements are in-syncs, then the remaining out_sync_count elements are out-syncs. Using a single array with explicit partitioning simplifies handling. 🫢
  • cmdbuf β€” pointer to the command buffer to submit.

This is a flat command buffer. By design, it contains no CPU pointers, which makes it suitable for a virtgpu wire protocol without requiring any serializing/deserializing step. iconic, honestly.

It consists of a series of commands. Each command begins with a fixed-size drm_asahi_cmd_header header and is followed by a variable-length payload according to the type and size in the header.

The combined count of "real" hardware commands must be nonzero and at most drm_asahi_params_global::max_commands_per_submission. No cap, that’s a real constraint.

  • flags β€” flags for command submission (MBZ).
  • queue_id β€” the queue ID to be submitted to.
  • in_sync_count β€” number of sync objects to wait on before starting this job.
  • out_sync_count β€” number of sync objects to signal upon completion of this job.
  • cmdbuf_size β€” command buffer size in bytes.
  • pad β€” MBZ.

πŸ¦‹ 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_create(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_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)

That’s the whole page, bestie. Cute little footer tea: source/version is ./include/uapi/drm, date is October 2026, and the manual is struct drm_asahi_submit(9) β€” literally the sweetest sign-off in the kernel. πŸ’–πŸŽ€βœ¨

πŸ“¦ where this page comes from