หมึกกระดอง: การเร่งกราฟิกด้วย GPU

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

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

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

ข้อกำหนด

โหมดกราฟิกแบบเร่งกำหนดให้โฮสต์มีคุณสมบัติดังนี้

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

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

สตรีม GFX

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

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