GPU के लिए एक फ्रेम सेट करने के लिए CPU पर बहुत सारे काम की आवश्यकता होती है, और ग्राफिक्स चालक के अंदर उस काम का एक अच्छा हिस्सा है। DX12 / Vulkan से पहले, ग्राफिक्स ड्राइवर का काम अनिवार्य रूप से एपीआई के डिजाइन द्वारा एकल-थ्रेडेड होने के लिए मजबूर किया गया था।
उम्मीद है कि DX12 / वल्कन उस प्रतिबंध को उठाते हैं, जिससे ड्राइवर को एक फ्रेम के भीतर कई सीपीयू थ्रेड पर समानांतर में काम करने की अनुमति मिलती है। यह मल्टीकोर सीपीयू के अधिक कुशल उपयोग को सक्षम करेगा, खेल इंजनों को सीपीयू-बाउंड किए बिना अधिक जटिल दृश्यों को धक्का देने की अनुमति देगा। यह आशा है कि - क्या यह व्यवहार में साकार होगा, हमें अगले कुछ वर्षों में देखने के लिए इंतजार करना होगा।
थोड़ा विस्तार करने के लिए: गेम इंजन रेंडरर का उत्पादन डीएक्स / जीएल एपीआई कॉल की एक धारा है जो एक फ्रेम को प्रस्तुत करने के लिए संचालन के अनुक्रम का वर्णन करता है। हालाँकि, API कॉल और वास्तविक बाइनरी कमांड बफ़र्स के बीच एक बड़ी दूरी है जो GPU हार्डवेयर की खपत करता है। ड्राइवर को एपीपी को कॉल करने के लिए GPU की मशीन भाषा में "संकलन" करना पड़ता है, इसलिए बोलना है। यह एक तुच्छ प्रक्रिया नहीं है - इसमें निम्न-स्तरीय हार्डवेयर वास्तविकताओं में एपीआई अवधारणाओं का बहुत अधिक अनुवाद शामिल है, यह सुनिश्चित करने के लिए कि GPU को अमान्य स्थिति में सेट नहीं किया गया है, स्मृति आवंटन और डेटा को दरकिनार करते हुए, जारी करने के लिए राज्य परिवर्तन पर नज़र रखता है। निम्न-स्तरीय आदेशों को ठीक करें, और इसी तरह और आगे भी। इस सारे सामान के लिए ग्राफिक्स ड्राइवर जिम्मेदार है।
DX11 / GL4 और पहले के एपीआई में, यह काम आम तौर पर एकल ड्राइवर थ्रेड द्वारा किया जाता है। यहां तक कि अगर आप कई थ्रेड्स से API को कॉल करते हैं (जो आप उदाहरण के लिए DX11 आस्थगित कमांड सूचियों का उपयोग कर सकते हैं), यह बस बाद में चबाने के लिए ड्राइवर थ्रेड के लिए एक कतार में कुछ काम जोड़ता है। इसका एक बड़ा कारण पहले बताई गई राज्य ट्रैकिंग है। हार्डवेयर-स्तरीय GPU कॉन्फ़िगरेशन विवरणों में से कई को वर्तमान ग्राफिक्स पाइपलाइन स्थिति के ज्ञान की आवश्यकता होती है, इसलिए कमांड लिस्ट को विखंडू में तोड़ने का कोई अच्छा तरीका नहीं है जिसे समानांतर में संसाधित किया जा सकता है - प्रत्येक चंक को यह जानना होगा कि इसे किस राज्य में शुरू करना चाहिए। के साथ, भले ही पिछले हिस्सा अभी तक संसाधित नहीं किया गया है।
यह उन बड़ी चीजों में से एक है जो DX12 / Vulkan में बदल गई हैं। एक बात के लिए, वे लगभग सभी ग्राफिक्स पाइपलाइन राज्य को एक ऑब्जेक्ट में शामिल करते हैं, और दूसरे के लिए (कम से कम DX12 में) जब आप एक कमांड सूची बनाना शुरू करते हैं तो आपको एक प्रारंभिक पाइपलाइन राज्य प्रदान करना होगा ; राज्य को एक कमांड सूची से दूसरे में विरासत में नहीं मिला है। सिद्धांत रूप में, यह ड्राइवर को पिछली कमांड सूचियों के बारे में कुछ भी जानने की अनुमति नहीं देता है, इससे पहले कि वह संकलन शुरू कर सके- और बदले में यह एप्लिकेशन को पूरी तरह से संकलित कमांड सूचियों का उत्पादन करते हुए, समानांतर समानांतर खंडों में इसके प्रतिपादन को तोड़ने की अनुमति देता है, जो तब हो सकता है कम से कम उपद्रव के साथ GPU के लिए एक साथ भेजा और भेजा।
बेशक, नए एपीआई में कई अन्य बदलाव हैं, लेकिन जहां तक मल्टीथ्रेडिंग की बात है, तो यह सबसे महत्वपूर्ण हिस्सा है।