आपने एक बहुत व्यापक और जटिल प्रश्न पूछा है। असल में, आपने से कई व्यापक, जटिल प्रश्न पूछे हैं।
किसी भी हार्डवेयर के संचालन पर अंतिम शासन वाले सॉफ़्टवेयर को हार्डवेयर का "ड्राइवर" कहा जाता है। स्वाभाविक रूप से, ग्राफिक्स हार्डवेयर के लिए, इसे "ग्राफिक्स ड्राइवर" कहा जाता है। सभी ड्राइवरों की तरह, ग्राफिक्स ड्राइवर प्रभावी रूप से ओएस का एक स्थापित करने योग्य हिस्सा है; ओएस ग्राफिक्स ड्राइवर को अपना काम करने और हार्डवेयर से बात करने की अनुमति देता है। हाथ में दो काम हाथ।
प्रभावशाली ढंग से दो प्रकार के डी 3 डी या ओपनजीएल (पहले से "एपीआई" के रूप में जाना जाता है) कॉल होते हैं: जो ड्राइवर से बात करते हैं और जो नहीं करते हैं। प्रत्येक कॉल जो वास्तव में कुछ खींचती है (अंततः) चालक से बात करती है, लेकिन बाद में ड्राइंग कॉल सेट करने वाली कॉल केवल स्थानीय रूप से डेटा स्टोर कर सकती है।
जब आप एक ड्राइंग कॉल करते हैं, तो एपीआई यह सुनिश्चित करने के लिए कुछ जांच करता है कि आपने उपयोगकर्ता को वैध प्रतिपादन कॉल किया है। यदि ऐसा है, तो एपीआई के पास कुछ विकल्प हैं कि क्या करना है। यह पता चला है कि ड्राइवर से सीधे बात करना काफी समय लगता है, भले ही आप बात करना शुरू करते समय कितने कमांड देते हैं। इसलिए, अक्सर ऐसा होता है कि एपीआई आपके प्रतिपादन कॉल को स्टोर करता है और तुरंत लौटाता है। फिर, संभवतः किसी अन्य धागे में, यह देख सकता है कि कितने प्रतिपादन कॉल संग्रहीत किए गए हैं। यदि "पर्याप्त" हैं, तो यह उन्हें ड्राइवर को अग्रेषित करेगा। इसे "मार्शलिंग" कहा जाता है।
चालक का काम इन कॉलों को लेना है जिन्हें अग्रेषित किया गया है और उन्हें जीपीयू द्वारा किए जाने वाले सामानों में परिवर्तित कर दिया गया है।
उसी लाइन पर, ग्राफिक्स पाइपलाइन कहां परिभाषित है? जीपीयू हार्डवेयर, ड्राइवर, या सॉफ्टवेयर लाइब्रेरी में?
यह वास्तव में इन दिनों एक बहुत मुश्किल सवाल है, और हर हार्डवेयर पीढ़ी के लिए मुश्किल बन रहा है।
पुराने दिनों में, ग्राफिक्स पाइपलाइन का निर्माण कठोर रूप से GPU हार्डवेयर द्वारा नियंत्रित किया गया था। इन दिनों, यह कम सच है, हालांकि कुछ हार्डवेयर नियंत्रण है। आधुनिक हार्डवेयर (ओपनजीएल 3.0 या डायरेक्ट 3 डी 10 या बेहतर में सक्षम) पर, यह सैद्धांतिक रूप से संभव होगा, यदि आपके पास ग्राफिक्स ड्राइवर तक सीधे पहुंच है, तो एक एपीआई डिज़ाइन करने के लिए जो ग्राफिक्स पाइपलाइन के कुछ हद तक परिवर्तित संस्करण का उपयोग करता है। तो एपीआई ग्राफिक्स पाइपलाइन की तरह दिखने के बारे में बताते हैं।
प्रतिपादन पाइपलाइन में प्रत्येक चरण मूल्यवान चरण (ओं) से इनपुट के रूप में कुछ मान लेता है और आउटपुट के रूप में कुछ मूल्यों को उत्पन्न करता है। एक चरण "प्रोग्राम करने योग्य" है यदि इनपुट से आउटपुट उत्पन्न करने के लिए तंत्र में उपयोगकर्ता द्वारा प्रदान किए जाने वाले प्रोग्राम को निष्पादित करना शामिल है, जिसे "शेडर" कहा जाता है। तो प्रोग्राम करने योग्य पाइपलाइन (अभी तक) जैसी कोई चीज नहीं है; एक निश्चित पाइपलाइन के सिर्फ प्रोग्राम करने योग्य चरणों।
बहुत बहुत धन्यवाद। मैं अच्छी तरह से जानता हूं कि मेरा प्रश्न कितना व्यापक था ... इसके बारे में क्षमा करें, लेकिन मुझे इतना अच्छा जवाब देने के लिए समय निकालने के लिए धन्यवाद। यह कई चीजों को स्पष्ट करता है। अगर मुझे यह सही लगता है, तो एपीआई कॉल मान्य करता है, उन्हें समूह करता है और अंततः संचित कॉल भेजने वाले सिस्टम कॉल के माध्यम से ड्राइवर को कॉल करता है। क्या यह कॉल करता है कि चालक को असेंबली, उच्च स्तरीय direct3d/opengl कमांड या न तो दिखता है? – cloudraven
एक चालक सिर्फ एक .dll या पुस्तकालय के अन्य रूप ओएस लोड करता है। यह केवल नियमित कोड है, और यह नियमित कोड की तरह फ़ंक्शन कॉल प्राप्त करता है। चालक को पास की जाने वाली डेटा संरचनाएं कार्यान्वयन पर निर्भर करती हैं (यह एक ही ओएस पर ड्राइवरों के लिए भी बदलती है), और आखिरकार किसी भी व्यक्ति के लिए अप्रासंगिक है जो वास्तव में ड्राइवर लिख नहीं रहा है। –
क्षमा करें मुझे बहुत देर हो चुकी है, लेकिन एक अनुवर्ती प्रश्न: एपीआई (ओपनजीएल या डायरेक्टएक्स) कैसे जानता है कि सभी अलग-अलग ड्राइवरों से बात कैसे करें? एनवीडिया ड्राइवर, एएमडी/अति ड्राइवर, और प्रत्येक ड्राइवर के कई संस्करण हैं? उदाहरण के सेट संस्करण के खिलाफ एक एप्लिकेशन लिंक ओपनजीएल, इसलिए यदि मैं अपने ड्राइवर को अपडेट करता हूं तो ओपनजीएल का पुराना संस्करण कैसे जानता है कि मेरे ड्राइवर से बात कैसे करें?ड्राइवर और ओपनजीएल के बीच समन्वय कैसे काम करता है? – pomeroy