2013-02-04 60 views
7

GetDC/ReleaseDC के लिए D3D11_RESOURCE_MISC_GDI_COMPATIBLE के साथ बनाए गए बनावट के लिए थ्रेड-सुरक्षा नियम क्या हैं?IDXGISurface1 थ्रेड-सुरक्षा/सिंक्रनाइज़ेशन नियम GetDC/ReleaseDC के लिए?

मैं डेटा-दौड़ के बिना ID3D11Device और ID3D11DeviceContextGetDC और ReleaseDC एक और धागा पर बीच के साथ बातचीत, या अस्पष्ट तुल्यकालन के कारण अवरुद्ध कर सकते हैं? या क्या मैं जीपीयू आईडीलिंग को जीडीआई प्रतिपादन करने वाले थ्रेड के लिए एक अलग D3D11Device बनाने के लिए मजबूर होना चाहता हूं और फिर इसे D3D11_RESOURCE_MISC_SHARED_KEYED_MUTEX पर कॉपी करके इसे "मुख्य" D3D11Device पर स्थानांतरित कर रहा हूं?

यानी निम्नलिखित मान्य है?

thread 1: 

D3D11Device::CreateTexture2D // Create texture 1 

IDXGISurface1::GetDC // Get DC for texture 1 

... // Draw to texture1 using GDI 

IDXGISurtface1::ReleaseDC // Release DC for texture1 

thread 2: 

// Is this valid if thread 1 is drawing using GDI? 

D3D11DeviceContext::OMSetRenderTargets 

D3D11DeviceContext::Draw // Draw texture2. 

उत्तर

1

निम्न दो बुलेट बिंदुओं MSDN से पता चलता है कि न केवल इस सूत्र असुरक्षित है लगता है, लेकिन वहाँ उपकरण की क्षमताओं में कमी है, जबकि एक HDC बकाया है।

  • आप डिवाइस को रिहा करना होगा (वे HDC की बात कर रहे हैं) और इससे पहले कि आप किसी भी नए Direct3D आदेश जारी IDXGISurface1 :: ReleaseDC विधि कॉल।

  • यह विधि विफल हो जाती है यदि इस विधि द्वारा एक उत्कृष्ट डीसी पहले ही बनाया जा चुका है।

DXGISurface से एक HDC हो रही स्वाभाविक सतह के माता-पिता D3D11 डीसी शामिल है। डी 3 डी 11 डीसी की बहु-थ्रेडेड एक्सेस भी असमर्थित है। इस MSDN पृष्ठ से: यदि एकाधिक धागे को एक ID3D11DeviceContext तक पहुंचना चाहिए, तो उन्हें उस ID3D11DeviceContext तक पहुंच को सिंक्रनाइज़ करने के लिए महत्वपूर्ण सिंक्रनाइज़ेशन तंत्र जैसे महत्वपूर्ण सिंक्रनाइज़ेशन तंत्र का उपयोग करना होगा।

जैसा कि आपने कहा था, मैं एक अलग थ्रेड पर जीडीआई ड्राइंग तैयार करने का प्रयास करता हूं, लेकिन इसे सिस्टम मेमोरी बफर में प्रस्तुत करता हूं। फिर बस सामग्री को डीएक्सजीआई सतह पर फिसल दें।

यह भी ध्यान दें कि इनमें से अधिकतर विषय तत्काल संदर्भ के व्यवहार को संबोधित करते हैं, D3D11 Deferred Context में अलग-अलग व्यवहार हो सकते हैं।