आमतौर पर मैं एक बार में कितने बनावट में बाँध सकता हूँ?


23

मैं एक गेम इंजन विकसित कर रहा हूं, और यह केवल आधुनिक (Shader मॉडल 4+) हार्डवेयर पर काम करने वाला है। मुझे लगता है कि जब तक मैं इसके साथ करूँगा, तब तक यह ऐसी अनुचित आवश्यकता नहीं होगी।

मेरा सवाल है: मैं एक आधुनिक ग्राफिक्स कार्ड पर एक बार में कितने बनावट बांध सकता हूं? 16 पर्याप्त होगा। क्या मैं अधिकांश आधुनिक ग्राफिक्स कार्डों की अपेक्षा कर सकता हूं कि वे बनावट की संख्या का समर्थन कर सकें?

मेरा GTX 460 32 का समर्थन करता प्रतीत होता है, लेकिन मुझे पता नहीं है कि यह सबसे आधुनिक वीडियो कार्ड का प्रतिनिधि है या नहीं।


आप किस प्रतिपादन एपीआई का उपयोग कर रहे हैं?
एडम

2
ओपन का पाठ्यक्रम :)
AVI

जवाबों:


53

OpenGL के लिए बाध्य होने वाले बनावट की संख्या 32 या 16 नहीं है । यह वह नहीं है जो आपको मिलता है glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);। यह फ़ंक्शन उन पाठों की संख्या को पुनर्प्राप्त करता है जिन्हें खंड shader द्वारा एक्सेस किया जा सकता है

देखें, प्रत्येक शेडर के पास अपने उपयोग की जाने वाली बनावटों की संख्या की अपनी सीमा होती है । हालाँकि, कुल पाठों की संख्या भी है जिनका उपयोग किया जा सकता है, अवधि। इसे (ओपनजीएल में) द्वारा परिभाषित किया गया है GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS

तो दो सीमाएँ हैं: बनावट-प्रति-चरण, और बनावट-कुल-सीमा।

OpenGL 3.x प्रति-चरण सीमा 16 के लिए न्यूनतम संख्या को परिभाषित करता है, इसलिए हार्डवेयर में 16 से अधिक बनावट-प्रति-चरण नहीं हो सकता है। इसकी उच्च सीमा हो सकती है, लेकिन आप जानते हैं कि आपको कम से कम 16 मिलते हैं। 3.x बनावट-कुल-बाउंड के लिए न्यूनतम संख्या को 48 के रूप में परिभाषित करता है। AKA: 16 * 3 चरणों। इसी तरह, जीएल 4.x संख्या को 16 बनावट-प्रति-चरण और 96 बनावट-कुल-बाउंड (यानी: 16 * 6 चरणों, कंप्यूट शेड सहित) को परिभाषित करता है।

फिर, ये न्यूनतम संख्या हैं। हार्डवेयर (और) भिन्न हो सकते हैं।

विशिष्ट हार्डवेयर के लिए, आप इन संख्याओं के मिलान के लिए किसी भी DX10 श्रेणी के हार्डवेयर की अपेक्षा कर सकते हैं। DX11 वर्ग के हार्डवेयर में कुछ भिन्नता है; NVIDIA (GeForce 4xx +) और उच्च-स्तरीय AMD चिप्स (aka: GCN-cores) 16-प्रति-चरण से अधिक हो सकते हैं।


2
काश यह स्वीकृत उत्तर होता। यह मुझे 5 मिनट की व्यर्थ पढ़ने से बचा लेता था।
फाइबल्स

3

मेरा मानना ​​है कि 32 अधिकतम बनावट है जो वर्तमान में बाध्य हो सकती है। जहां तक ​​मैं बता सकता हूं कि 8800 श्रृंखला में भी 32 बनावट इकाइयां थीं।

जहां तक ​​मुझे पता है, ओपनजीएल 4.x समर्थन के लिए आपको एक फ़र्मि या नए एनवीडिया कार्ड (या संबंधित एमड कार्ड) की आवश्यकता होगी, उच्च अंत मॉडल सभी में 32 इकाइयां लगती हैं, जबकि सबसे कम अंत कार्ड (जीटी 430, उदाहरण के लिए) ) में 16 हैं। हालांकि, एएमडी की चादरों को देखते हुए वे 80 या 128 बनावट इकाइयों की संख्या की सूची बनाते हैं, लेकिन 32 रंग की आरओपी इकाइयों की सूची बनाते हैं जो पीढ़ी के माध्यम से स्थिर बनी हुई हैं।

दूसरी ओर GTX 480 को 60 बनावट इकाइयों और 48 ROP इकाइयों के साथ सूचीबद्ध किया गया है, जबकि 430 की तरह निचले अंत कार्डों में केवल 16 बनावट इकाइयाँ और 4 ROP इनिट्स हैं। तो कुल मिलाकर मैं वास्तव में आश्वस्त नहीं हूं, या तो वह संख्या है जिसकी आप वास्तव में तलाश कर रहे हैं।

आप गैर-निश्चित फ़ंक्शन पाइपलाइन रेंडरिंग के लिए उपलब्ध बनावट इकाइयों की संख्या की जांच कर सकते हैं glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);, हालांकि, यदि आपके पास कुछ विविध हार्डवेयर हैं, तो आप स्वयं की जांच कर सकते हैं।

संपादित करें: यह साइट आपको सभी प्रकार के वीडियो कार्डों की रिपोर्ट की गई ओपनग्लो क्षमताओं की तुलना करने की सुविधा देती है, जिससे आपको अपनी जरूरत के नंबर देने चाहिए: http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTx%20580

पुनश्च: एएमडी और एनवीडिया ने हाल ही में "बाइंडलेस टेक्सचर" पेश किया है, (एएमडी का इसके लिए एक अलग नाम है) जो आपको बड़ी संख्या में टैक्स्ट्रे यूनिट्स के लिए बाध्य किए बिना टेक्सट का उपयोग करने की अनुमति देता है, फिलहाल यह केवल ओपनजीएल में उपलब्ध है।


1
इसके बाद, असली उत्तर कुछ ऐसा है, 'आपके पास उतना ही है जितना hw पेशकश कर सकता है।' या, इसे अलग तरह से देखते हुए, सब कुछ जितना हो सके उतना तेजी से चलना चाहिए। (और OpenGL में जो लगभग हर क्षेत्र को कवर करता है)।
डार्कविंग्स

@Darkwings मुझे लगता है, हार्डवेयर की तुलना में अधिक बनावट को बाँधना आमतौर पर एक त्रुटि या ड्राइवर टाइमिंग को जन्म देगा, हालांकि। मैंने यह भी गलत बताया, उन्होंने कहा कि shader मॉडल 4+ नहीं opengl 4+। पहले DX10 कार्ड (X2900 और कार्ड के 8800 परिवार) को देखकर लगता है कि सभी के पास कम से कम 16 बनावट इकाइयां हैं।

मैं सिर्फ इस तथ्य को रेखांकित कर रहा था कि चूंकि इसे मानकीकृत किया जा सकता है, इसलिए यह होना चाहिए। भले ही खेल पुराने कार्डों पर क्रॉल करने के लिए था, यह कुछ कठिन-कोडित नहीं होना चाहिए, लेकिन 'सुझाव की आवश्यकता'।
डार्कविंग्स

4
-1: यह उत्तर गलत है। क्यों (यह समझाने के लिए बहुत लंबा है) के लिए मेरा जवाब देखें।
निकोल बोलस

1
जो तुरंत स्पष्ट नहीं हो सकता है। लगभग कोई भी GL_TEXTURE n GLenums का उपयोग नहीं करता है ; इसके बजाय GL_TEXTURE0 + n का उपयोग करें, जहां n बांधने के लिए स्लॉट है। GLenums केवल 32 स्लॉट तक जाता है लेकिन इसका मतलब यह नहीं है कि OpenGL आपको 32 तक सीमित करता है। कल्पना की गारंटी है कि वे अनुक्रमिक होंगे। इसके अलावा, यदि आप डीएसए का उपयोग नहीं कर रहे हैं, तो आप बाइंड-टू-क्रिएट / संशोधित के लिए एक स्लॉट आरक्षित करना चाह सकते हैं, ताकि बनाने / संशोधित करने के लिए उपयोग किए गए राज्य में ड्राइंग के लिए उपयोग किए गए राज्य के साथ कम बातचीत हो।
मैक्सिमस मिनिमस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.