2016-02-22 5 views
7

API-Samples में जो वल्कन के साथ आते हैं, ऐसा लगता है कि पर vkQueueSubmit पर कॉल करने के बाद हमेशा या execute_queue_command_buffer (util_init.hpp में) के माध्यम से हमेशा कॉल किया जाता है। जब तक GPU पिछले vkQueueSubmit में सभी काम कर रही समाप्त हो गया है vkWaitForFences करने के लिए कॉल सीपीयू निष्पादन रोकेंगे। यह प्रभाव में कई फ्रेमों को एक साथ बनाने की अनुमति नहीं देता है, जो (सिद्धांत में) प्रदर्शन को सीमित कर रहा है।वल्कन नमूने: vkQueue सबमिट करें हमेशा vkWaitForFences के बाद?

इन कॉल की आवश्यकता है, और यदि हां, तो वहाँ एक और तरीका है GPU की आवश्यकता नहीं करने के लिए एक नया फ्रेम बनाने से पहले निष्क्रिय हो रहा है?

+0

कोड लगता है जल्दी D3D12 नमूने जो भी केवल एक ही फ्रेम और इंतजार पैटर्न किया के समान है। –

+0

हां, विडंबना यह है कि एपीआई शुरू करने के मुख्य लक्ष्यों में से एक उच्च समांतरता प्राप्त करना था, और फिर नमूने दिखाते हैं कि * ऐसा नहीं * कैसे करें;)। क्योंकि आप किसी भी प्रतिरोधक है कि अभी भी उड़ान में फ्रेम द्वारा इस्तेमाल किया जा रहा नहीं बदल सकते – MuertoExcobito

उत्तर

4

जिस तरह से हम उड़ान में एकाधिक फ्रेम हासिल प्रत्येक swapchain फ्रेमबफर आप के लिए एक बाड़ है। फिर भी vkWaitForFences का उपयोग करें, लेकिन ((n+1)%num_fences) बाड़ के लिए प्रतीक्षा करें।

वहाँ उदाहरण यहाँ https://imgtec.com/tools/powervr-early-access-program/

uint32_t current_buffer = num_swaps_ % swapchain_fences.size(); 
vkQueueSubmit(graphics_queue, 1, &submit_info, swapchain_fences[current_buffer]); 
// Wait for a queuesubmit to finish so we can continue rendering if we are n-2 frames behind 
if(num_swaps_ > swapchain_fences.size() - 1) 
{ 
    uint32_t fence_to_wait_for = (num_swaps_ + 1) % swapchain_fences.size(); 
    vkWaitForFences(device, 1, &swapchain_fences[fence_to_wait_for], true, UINT64_MAX); 
    vkResetFences(device, 1, &swapchain_fences[current_buffer]); 
} 
+1

लेकिन इस कोडिंग थोड़ा जटिल काम है। –

+0

हां यह थोड़ा और जटिल है :) आपको बहु-बफर यूबीओ की आवश्यकता होगी ताकि आप उस डेटा पर लिख न सकें जो GPU उपयोग कर रहा है। आपको पाइपलाइन बाधाओं के बारे में चिंता करने की भी आवश्यकता है ताकि कैश आपको पुराना डेटा न दे। उस लिंक में दोनों के उदाहरण हैं। – ashleysmithgpu

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