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

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

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

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

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

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

  • EGL ड्राइवर, जो GL_KHR_surfaceless_context एक्सटेंशन के साथ काम करता हो
  • OpenGL ES ड्राइवर, जो OpenGL ES के साथ काम करता हो
  • Vulkan ड्राइवर, जो Vulkan के साथ काम करता हो

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

GfxStream

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

launch_cvd --gpu_mode=gfxstream

Virgl

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

launch_cvd --gpu_mode=drm_virgl

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