कटलफ़िश: जीपीयू ग्राफ़िक एक्सेलरेटर

Cuttlefish के बेहतर ग्राफ़िक मोड में, रेंडरिंग के लिए आपकी होस्ट मशीन की फ़िज़िकल ग्राफ़िक प्रोसेसिंग यूनिट (जीपीयू) का इस्तेमाल किया जाता है. इसके लिए, मेहमान को रेंडरिंग के निर्देश देने वाली कमांड को आपकी होस्ट मशीन पर भेजा जाता है. साथ ही, रेंडरिंग के निर्देशों को आपकी होस्ट मशीन पर चलाया जाता है और रेंडर किए गए नतीजों को मेहमान को वापस भेजा जाता है.

Android 11 या इसके बाद के वर्शन पर चलने वाला Cuttlefish डिवाइस, बेहतर ग्राफ़िक की सुविधा का पता लगाता है और उसका इस्तेमाल करता है. अगर होस्ट मशीन पर बेहतर ग्राफ़िक की सुविधा काम नहीं करती या Android का वर्शन 10 या उससे पहले का है, तो Cuttlefish डिवाइस में मेहमान-साइड रेंडरिंग (उदाहरण के लिए, यूज़र इंटरफ़ेस और वीडियो चलाना) को SwiftShader मैनेज करता है. SwiftShader, OpenGL और Vulkan एपीआई का सॉफ़्टवेयर वर्शन है. SwiftShader एक सॉफ़्टवेयर है. इसलिए, यह Cuttlefish के लिए ऐसा रेंडरिंग सलूशन उपलब्ध कराता है जिसे सभी होस्ट मशीन पर चलाया जा सकता है.

हालांकि, SwiftShader का इस्तेमाल करने पर, सामान्य डिवाइस की तरह परफ़ॉर्मेंस नहीं मिलती. रेंडरिंग एक ऐसी समस्या है जिसे पैरलल प्रोसेसिंग की मदद से बड़े पैमाने पर हल किया जा सकता है. ऐसा इसलिए, क्योंकि पिक्सल वैल्यू का हिसाब अलग-अलग लगाया जा सकता है. ग्राफ़िक्स प्रोसेसिंग यूनिट (जीपीयू), हार्डवेयर यूनिट होती हैं. ये रेंडरिंग की प्रोसेस को तेज़ करके, इस समस्या को हल करती हैं.

ज़रूरी शर्तें

बेहतर ग्राफ़िक मोड के लिए, होस्ट के पास ये चीज़ें होनी चाहिए:

  • GL_KHR_surfaceless_context एक्सटेंशन के साथ काम करने वाला EGL ड्राइवर
  • OpenGL ES के साथ काम करने वाला ड्राइवर
  • Vulkan की सुविधा वाला ड्राइवर

एक्सेलरेटेड ग्राफ़िक मोड का इस्तेमाल करना

GfxStream

GfxStream के ज़रिए तेज़ी से काम करने वाले ग्राफ़िक मोड का इस्तेमाल करने के लिए, --gpu_mode=gfxstream फ़्लैग के साथ अपना स्थानीय Cuttlefish डिवाइस लॉन्च करें. इस मोड का इस्तेमाल करके, OpenGL और Vulkan एपीआई कॉल, सीधे होस्ट को फ़ॉरवर्ड किए जाते हैं.

launch_cvd --gpu_mode=gfxstream

Virgl

Virgl के ज़रिए तेज़ी से काम करने वाले ग्राफ़िक मोड का इस्तेमाल करने के लिए, --gpu_mode=drm_virgl फ़्लैग के साथ अपना स्थानीय Cuttlefish डिवाइस लॉन्च करें.

launch_cvd --gpu_mode=drm_virgl

Virgl के एक्सेलरेटेड ग्राफ़िक मोड का इस्तेमाल करते समय, OpenGL API कॉल को इंटरमीडिएट रिप्रज़ेंटेशन में बदल दिया जाता है (Gallium3D देखें). इंटरमीडिएट रेप्रज़ेंटेशन को होस्ट को भेजा जाता है. होस्ट पर मौजूद virglrenderer लाइब्रेरी, इंटरमीडिएट रेप्रज़ेंटेशन को फिर से OpenGL एपीआई कॉल में बदल देती है.