बनावट की गणना करते समय बनावट बहुत धीमी क्यों होती है?


11

जीएलएसएल में बनावट का उपयोग करते समय, अंतिम बनावट निर्देशांक की गणना शीर्ष की छाया में करना और उन्हें varyingएस का उपयोग करके टुकड़े करने वाले को सौंप देना सबसे अच्छा है । उदाहरण के लिए y में एक साधारण फ्लिप के साथ समन्वय करें:

// Vertex shader
attribute vec2 texture;
varying highp vec2 texCoord;
// ...
void main() {
    texCoord = vec2(texture.x, 1.0-texture.y);
    // ...
}

// Fragment shader
varying highp vec2 textureCoordinates;
uniform sampler2D tex;
// ...
void main() {
    highp vec4 texColor = texture2D(tex, texCoord);
    // ...
}

यदि y समन्वय में फ्लिप, या vec2(0.5)बनावट समन्वय में जोड़ने की तरह एक सरल ऑपरेशन भी टुकड़ा shader में प्रदर्शन किया है बनावट का उपयोग बहुत धीमी है। क्यों?


एक नोट के रूप में, उदाहरण के लिए, दो बनावटों का सम्मिश्रण, उनमें से एक भारित राशि का उपयोग करना, समय के संदर्भ में बहुत सस्ता है और प्रत्येक पिक्सेल के लिए भी किया जाना आवश्यक है, इसलिए बनावट की गणना खुद को समन्वित करना उतना महंगा नहीं लगता है।


1
मेरा अनुमान है कि अगर वीएस में यूवी कॉर्ड्स की गणना की जाती है, तो पीएस शुरू होने के दौरान बनावट इकाई उन्हें प्रीफ़ैच करना शुरू कर सकती है। यदि वे पीएस में गणना करते हैं, तो बनावट इकाई को पहले इंतजार करना होगा।
रिचीसेम्स

2
Fwiw इसे "आश्रित बनावट पढ़ा" कहा जाता है, यदि यह आपकी खोज में मदद करता है।
एलन वोल्फ

क्या आपके पास कुछ माप हैं जो पूर्ण अंतर दिखा रहे हैं? मैं वास्तव में वहाँ बहुत अंतर होने की उम्मीद नहीं करता; बनावट लाने की विलंबता को कुछ ALU ऑप्स को स्वाइप करना चाहिए। BTW, आश्रित बनावट पढ़ता है, जहां दो (या अधिक) बनावट पढ़ता है, पहले के उत्पादन पर दूसरे निर्भर के लिए निर्देशांक के साथ। उन दो बनावट रीड के बीच सख्त आदेश की आवश्यकता के कारण धीमी हैं।
नाथन रीड

खैर, टुकड़ा shader में किया गया कोई भी ऑपरेशन अधिक महंगा होगा, फिर शीर्ष shader में। प्रत्येक त्रिभुज एक वर्टिकल शेडर के 3 इनवोकेशन लेता है, लेकिन यह परिमाण के आदेशों को अपने स्क्रीन आकार के आधार पर अधिक परिमाण के ऑर्डर ले सकता है।
glampert

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

जवाबों:


11

आप जिस बारे में बात कर रहे हैं उसे आमतौर पर मोबाइल विकास समुदाय में "निर्भर बनावट रीड्स" कहा जाता है। यह कुछ हार्डवेयर का कार्यान्वयन विवरण है, और इसलिए यह वास्तव में GPU पर निर्भर करता है कि इसमें कोई प्रदर्शन निहितार्थ है या नहीं। आमतौर पर यह कुछ ऐसा है जिसे आप AppleV हार्डवेयर में PowerVR GPU के लिए लाए हैं, क्योंकि यह इमेजिनेशन और Apple दोनों में स्पष्ट रूप से उल्लेखित हैप्रलेखन। अगर मुझे सही ढंग से याद है, तो मूल रूप से समस्या GPU में हार्डवेयर से आई है जो कि टुकड़े टुकड़े करने से पहले ही बनावट को पूर्व-प्राप्त करना शुरू कर देगी, ताकि यह विलंबता को छिपाने का एक बेहतर काम कर सके। डॉक्स मैंने जोड़ा है कि यह अब Series6 हार्डवेयर पर एक मुद्दा नहीं है, इसलिए कम से कम नए Apple हार्डवेयर पर यह ऐसा कुछ नहीं है जिसके बारे में आपको चिंता करनी है। मैं ईमानदारी से अन्य मोबाइल GPU के बारे में निश्चित नहीं हूं, क्योंकि यह मेरी विशेषज्ञता का क्षेत्र नहीं है। आपको कोशिश करनी चाहिए और सुनिश्चित करने के लिए उनके प्रलेखन से परामर्श करना चाहिए।

यदि आप इस मुद्दे पर कुछ Google खोजों को करने का निर्णय लेते हैं, तो ध्यान रखें कि आपको संभवतः कुछ पुरानी सामग्री मिलेगी जो पुराने डेस्कटॉप हार्डवेयर पर निर्भर बनावट के बारे में बात कर रही है। पिक्सेल / टुकड़े टुकड़े के शुरुआती दिनों में बुनियादी, शब्द "निर्भर बनावट लाने" एक यूवी पते का उपयोग करने के लिए संदर्भित किया जाता है जो पिछले बनावट वाले भ्रूण पर निर्भर था। क्लासिक उदाहरण बम्प-मैप्ड पर्यावरण मानचित्र रेंडरिंग था, जहां आप पर्यावरण मानचित्र का नमूना लेने के लिए सामान्य मानचित्र पर आधारित प्रतिबिंब वेक्टर का उपयोग करना चाहते थे। इस पुराने हार्डवेयर पर कुछ प्रमुख प्रदर्शन निहितार्थ थे, और मुझे लगता है कि यह कुछ बहुत पुराने GPU के समर्थन में भी नहीं था। आधुनिक GPU के साथ हार्डवेयर और shader ISA बहुत अधिक सामान्यीकृत है, और इसलिए प्रदर्शन की स्थिति बहुत अधिक जटिल है।


वैसे: मैंने अनुभव किया कि एक iPad 3 पर। तो शायद यह वास्तव में हार्डवेयर विशिष्ट है।
नीरो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.