2014-10-17 11 views
5

मैं थोड़ी देर के लिए डायरेक्टएक्स 11 का अध्ययन कर रहा हूं, लेकिन मैं अभी भी उलझन में हूं कि डायरेक्टएक्स 11 मेमोरी का प्रबंधन कैसे करता है। उदाहरण के लिए, यदि मैं ID3D11Device :: CreateBuffer का उपयोग कर वर्टेक्स बफर बनाता हूं, तो नया बफर कहाँ संग्रहीत किया जाता है? मुझे पता है कि यह बफर को पॉइंटर देता है, इसका मतलब है कि इसे सीपीयू रैम पर ही संग्रहीत किया जाना चाहिए? हालांकि, मैंने सोचा कि यह ID3D11DeviceContext :: IASetVertexBuffers को बहुत धीमी प्रक्रिया बना देगा, क्योंकि इसे बफर को CPU RAM से GPU RAM में कॉपी करना होगा। लेकिन यदि ID3D11Device के साथ बनाए गए सभी बफर: CreateBuffer GPU RAM पर संग्रहीत किए गए थे, तो GPU RAM वास्तव में जल्दी से भर नहीं पाएगा? असल में मैं जानना चाहता हूं: जब मैं एक बफर बनाता हूं, तो वह डेटा कहां संग्रहीत होता है? सीपीयू रैम या जीपीयू रैम में? साथ ही, ID3D11DeviceContext :: IASetVertexBuffers बफर (प्रतिलिपि/सेटिंग?) के साथ क्या कर रहा है।डायरेक्टएक्स 11 मेमोरी मैनेजमेंट

उत्तर

7

सामान्य उत्तर यह है कि "जहां भी चालक यह होना चाहता है"। "डायनामिक" संसाधनों के लिए, उन्हें आम तौर पर स्मृति में रखा जाता है जो सीपीयू और जीपीयू दोनों के लिए सुलभ है (आधुनिक पीसी पर यह पीसीआई बस में साझा किया जाता है)। "स्टेटिक" संसाधनों के लिए, वे वीडियो रैम पर हो सकते हैं जो केवल GPU द्वारा सुलभ है जिसे 'साझा' मेमोरी विंडो के माध्यम से कॉपी किया गया है, या यदि सीमित स्थान है तो उन्हें 'साझा' मेमोरी विंडो में रखा जाता है। रेंडर लक्ष्य आमतौर पर वीडियो रैम में भी लगाए जाते हैं।

डायरेक्ट 3 डी वीडियो मेमोरी प्रबंधन पर गहरे गोता लगाने के लिए, "आपका विंडोज गेम 2,147,352,576 में क्यों नहीं चलेंगे" की जांच करें? जो अब एमएसडीएन डाउनलोड पर नहीं है लेकिन मेरे blog पर पाया जा सकता है।

यदि आप नट-किरकिरा हार्डवेयर विवरण चाहते हैं, तो driver writer's documentation पढ़ें।

आप एमएसडीएन कोड गैलरी शैक्षिक पर Video Memory नमूना भी पा सकते हैं।

संबंधित मुद्दे