मैं एक GPU संसाधन को अपडेट करने के लिए ID3D12Resource::Map विधि का उपयोग कर रहा हूं। क्या यह सबसे कारगर तरीका है? क्या विकल्प मौजूद हैं?

0
Cpper.Lee 22 जिंदा 2017, 16:40

1 उत्तर

सबसे बढ़िया उत्तर

अपलोड हीप संसाधनों में पढ़ने के लिए एक संबद्ध लागत होती है, जो एक डिफ़ॉल्ट संसाधन से अधिक होती है।

लगातार बफ़र्स के मामले में, यह आम तौर पर ठीक होता है (जैसा कि आप एक बार लिखते हैं/एक बार परिदृश्य पढ़ते हैं), लेकिन अन्य मामलों में (बड़े वर्टेक्स/इंडेक्स बफ़र्स), यह आमतौर पर वांछनीय नहीं है।

एक सामान्य तरीका यह है कि दो संसाधन बनाएं (एक अपलोड हीप के भीतर, एक डिफ़ॉल्ट हीप के भीतर), अपने डेटा को अपलोड संसाधन में कॉपी करें (जैसा कि आपने बताया है कि मानचित्र का उपयोग करके), फिर CopyResource या CopyBufferRegion

कृपया सुनिश्चित करें कि आपके पास ResourceBarrier और एक संक्रमण स्थिति।

प्रतिलिपि कॉल करने से पहले, संसाधन प्रतिलिपि से पहले D3D12_RESOURCE_STATE_COPY_DEST में होना चाहिए, और आपके संसाधन पर निर्भर कोई भी पढ़ा हुआ ध्वज होना चाहिए।

कृपया यह भी ध्यान दें कि आप GPU कॉपी के लिए कॉपी कमांड कतार का उपयोग कर सकते हैं (ताकि आप डायरेक्ट कमांड सूची में प्रदर्शन करने से बच सकें), लेकिन आपको यह सुनिश्चित करना होगा कि संसाधन का उपयोग करने से पहले कॉपी पूरी हो गई है (बाड़ का उपयोग करके) )

मल्टी इंजन का वर्णन msdn यहां< में किया गया है। /ए>

7
mrvux 23 फरवरी 2017, 18:07
ध्यान दें कि यदि आप किसी संसाधन के लिए केवल लिख रहे हैं, तो आप सीधे लिखकर और अपलोड का उपयोग नहीं करके तेज़ प्रदर्शन प्राप्त कर सकते हैं - क्योंकि आप संयुक्त स्मृति लिखने का उपयोग कर सकते हैं (विशेषकर यदि आप इसे अक्सर कर रहे हैं)। यह उन चीजों में से एक है जिसे आपको अपने परिदृश्य के लिए अनुकूलित/जांच करना है।
 – 
cmaughan
9 जून 2017, 12:47
यह कहने योग्य है कि यह केवल बफ़र्स के लिए सही है, इस तरह से बनावट को मैप करने का कोई तरीका नहीं है।
 – 
galop1n
4 अगस्त 2017, 23:45
नहीं; आप इसे बनावट के साथ भी कर सकते हैं। लेकिन फिर, आपको प्रोफाइल करना होगा जो तेज है।
 – 
cmaughan
21 अगस्त 2017, 14:28