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

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

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

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

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

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

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

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

GfxStream

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

launch_cvd --gpu_mode=gfxstream

Virgl

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

launch_cvd --gpu_mode=drm_virgl

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