2016-04-01 5 views
16

नई वल्कन एपीआई में सभी निर्माण जानकारी structs (vk*CreateInfo) में, हमेशा .sType सदस्य होता है। यह क्यों है यदि मूल्य केवल एक चीज हो सकता है? इसके अलावा वल्कन विनिर्देश बहुत स्पष्ट है कि आप केवल vk*CreateInfo structs का उपयोग अपने संबंधित vkCreate* फ़ंक्शन के पैरामीटर के रूप में कर सकते हैं। यह थोड़ा अनावश्यक लगता है। मैं देख सकता हूं कि यदि चालक सीधे इस जीपीयू को इस संरचना को पार कर रहा था, तो आपको इसे प्राप्त करने की आवश्यकता हो सकती है (मैंने देखा कि यह हमेशा पहला सदस्य है)। लेकिन ऐसा लगता है कि ऐप को ऐसा करने के लिए वास्तव में एक बुरा विचार है क्योंकि यदि ड्राइवर ने ऐसा किया है, तो ऐप्स बहुत कम त्रुटि प्रवण होंगे, और एक स्ट्रक्चर के लिए एक int तैयार करना बेहद संगणकीय अक्षम ऑपरेशन की तरह नहीं लगता है। मैं नहीं देखता कि यह क्यों मौजूद है।वल्कन: वीके * CreateInfo structs में syype का बिंदु क्या है?

टी एल; डॉ
        क्यों vk*CreateInfo structs .sType सदस्य है?

उत्तर

23

ताकि एपीआई को पीछे की संगतता को तोड़ने के बिना बदला जा सके।

यदि वल्कन का संस्करण 1.1 निर्माण के लिए विस्तार करना चाहता है, उदाहरण के लिए, कमांड बफर पूल, यह कैसा होगा? खैर, वे एक नया नया प्रवेश बिंदु जोड़ सकते हैं: vkCreateCommandPool2। लेकिन इस समारोह में vkCreateCommandPool के रूप में लगभग सटीक समान हस्ताक्षर होगा; केवल अंतर यह है कि वे विभिन्न pCreateInfo संरचनाएं लेते हैं।

तो इसके बजाय, आपको केवल VkCommandPoolCreateInfo2 संरचना घोषित करना है। और फिर घोषणा करें कि vkCreateCommandPool या तो एक ले सकता है। कार्यान्वयन कैसे बताएगा कि आपने किसको पास किया था?

क्योंकि ऐसी किसी भी संरचना के पहले 4 बाइट sType हैं। वे उस मूल्य का परीक्षण कर सकते हैं। यदि मान VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO है, तो यह पुरानी संरचना है। यदि यह VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO_2 है, तो यह नया है।

यह एक्सटेंशन के लिए CreateInfo संरचना को पूरी तरह ओवरराइड करने में भी आसान बनाता है। pNext फ़ील्ड अतिरिक्त पैरामीटर के साथ एक एपीआई बढ़ाने के लिए है। sType के साथ, एक एक्सटेंशन मौजूदा मानकों को बदल सकता है।

+0

क्यों एक अनुमानित 1.1 एसडीके रिलीज में अद्यतन हस्ताक्षर के साथ अद्यतन 'vkCreateCommandBufferPool()' परिभाषा शामिल नहीं है? अधिकांश पुस्तकालयों में उनके संरचना इतिहास के सभी अलग-अलग संशोधन शामिल नहीं होते हैं। वल्कन जैसी लाइब्रेरी क्यों करेगी? या पुस्तकालयों की तरह अद्वितीय हैं क्योंकि हार्डवेयर की क्षमताओं के आधार पर किसी एप्लिकेशन को पुरानी संरचना का सहारा लेना पड़ सकता है? – spaaarky21

+0

@ spaaarky21: क्योंकि उन्होंने वादा नहीं किया था। वल्कन का विनिर्देश बताता है कि वर्जनिंग कैसे काम करती है। यह बताता है कि वे किस प्रकार के संस्करण में बदलाव के लिए बदलाव करेंगे। छोटे संस्करण परिवर्तन एक ही प्रमुख संस्करण से सभी निचले मामूली संस्करणों के साथ पीछे संगत होने के लिए निर्दिष्ट हैं। तो अगर मैं 1.0 के खिलाफ कोड लिखता हूं, तो यह 1.1 या 1.2 कार्यान्वयन पर काम करेगा। लेकिन इस बात की कोई गारंटी नहीं है कि यह 2.0 या 3.0 पर काम करेगा। –

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