Cuttlefish: การเร่งกราฟิกด้วย GPU

โหมดกราฟิกที่เร่งความเร็วของ Cuttlefish จะใช้หน่วยประมวลผลกราฟิก (GPU) จริงของเครื่องโฮสต์ในการแสดงผลโดยการส่งคำสั่งการแสดงผลของแขกไปยังเครื่องโฮสต์ เรียกใช้คำสั่งการแสดงผลในเครื่องโฮสต์ และส่งผลการแสดงผลกลับไปยังแขก

อุปกรณ์ Cuttlefish ที่ทำงานใน Android 11 ขึ้นไป จะตรวจหาและใช้กราฟิกที่เร่งความเร็ว หากเครื่องโฮสต์ไม่รองรับ กราฟิกที่เร่งความเร็ว หรือ Android เวอร์ชันเป็น Android 10 หรือต่ำกว่า SwiftShader จะจัดการการแสดงผลฝั่งแขก (เช่น การเล่น UI และวิดีโอ) ในอุปกรณ์ Cuttlefish SwiftShader คือการใช้งานซอฟต์แวร์ของ API ของ OpenGL และ Vulkan เนื่องจาก SwiftShader เป็นการติดตั้งใช้งานซอฟต์แวร์ จึงเป็นโซลูชันการแสดงผลที่ทุกคนเข้าถึงได้สำหรับ Cuttlefish ซึ่งสามารถทำงานบนเครื่องโฮสต์ใดก็ได้

อย่างไรก็ตาม การใช้ SwiftShader จะมีประสิทธิภาพไม่ดีเท่าอุปกรณ์ปกติ การแสดงผลเป็น ปัญหาแบบขนานที่สามารถขนานกันได้เป็นจำนวนมาก เนื่องจากสามารถคำนวณค่าพิกเซล แยกกันได้ หน่วยประมวลผลกราฟิก (GPU) เป็น หน่วยฮาร์ดแวร์ที่แก้ปัญหานี้ด้วยการเร่งการแสดงผล

ข้อกำหนด

โหมดกราฟิกเร่งความเร็วต้องมีโฮสต์ที่มีคุณสมบัติดังนี้

  • ไดรเวอร์ที่รองรับ EGL ซึ่งรองรับส่วนขยาย GL_KHR_surfaceless_context
  • ไดรเวอร์ที่รองรับ OpenGL ES
  • ไดรเวอร์ที่ใช้ Vulkan ได้

ใช้โหมดกราฟิกที่เร่งความเร็ว

GfxStream

หากต้องการใช้โหมดกราฟิกเร่งความเร็ว GfxStream ให้เปิดอุปกรณ์ Cuttlefish ในเครื่องด้วยแฟล็ก --gpu_mode=gfxstream เมื่อใช้โหมดนี้ ระบบจะส่งต่อการเรียกใช้ API ของ OpenGL และ Vulkan ไปยังโฮสต์โดยตรง

launch_cvd --gpu_mode=gfxstream

Virgl

หากต้องการใช้โหมดกราฟิกที่เร่งด้วย Virgl ให้เปิดอุปกรณ์ Cuttlefish ในเครื่อง ด้วย Flag --gpu_mode=drm_virgl

launch_cvd --gpu_mode=drm_virgl

เมื่อใช้โหมดกราฟิกที่เร่งความเร็วด้วย Virgl ระบบจะแปลการเรียก OpenGL API เป็นการแสดงผลระดับกลาง (ดู Gallium3D) ระบบจะสื่อสารการแสดงระดับกลางกับโฮสต์ และไลบรารี virglrenderer ในโฮสต์จะแปลการแสดงระดับกลางกลับเป็นการเรียกใช้ OpenGL API