Ho studiato Directx 11 per un po 'di tempo, ma sono ancora confuso su come Directx 11 gestisce la memoria. Ad esempio, se creo un buffer di vertici usando ID3D11Device :: CreateBuffer, dove è memorizzato il nuovo buffer? So che restituisce un puntatore al buffer, quindi significa che deve essere memorizzato nella CPU RAM giusto? Tuttavia, ho pensato che questo avrebbe reso ID3D11DeviceContext :: IASetVertexBuffers un processo molto lento, perché avrebbe dovuto copiare il buffer dalla CPU RAM alla RAM della GPU. Ma se tutti i buffer creati con ID3D11Device: CreateBuffer sono stati memorizzati su RAM GPU, allora la RAM della GPU non si riempirebbe molto rapidamente? Fondamentalmente vorrei sapere: quando creo un buffer, dove vengono memorizzati i dati? Nella RAM della CPU o nella RAM della GPU? Inoltre, che cosa fa ID3D11DeviceContext :: IASetVertexBuffers con il buffer (copia/impostazione?).Gestione memoria Directx 11
risposta
La risposta generale è che "è ovunque il guidatore vuole che sia". Per le risorse "DYNAMIC", sono in genere messe in memoria accessibile sia alla CPU che alla GPU (sui PC moderni questo è condiviso attraverso il bus PCIe). Per le risorse "STATIC", possono essere sulla RAM video accessibile solo dalla GPU che viene copiata tramite la finestra di memoria "condivisa", oppure se c'è spazio limitato nella finestra di memoria "condivisa". I target di rendering sono di solito inseriti anche nella RAM video.
Per un'immersione più profonda sulla gestione della memoria video Direct3D, dai un'occhiata "Perché il tuo gioco Windows non verrà eseguito in 2.147.352.576?" che non è più su MSDN Download ma può essere trovato sul mio blog.
Se si desiderano i dettagli hardware nitty, leggere lo driver writer's documentation.
È inoltre possibile trovare l'esempio Video Memory nella galleria di codici MSDN didattica.
- 1. DirectX 11 supporta .NET?
- 2. Directx 11, inviare più texture nello Shader
- 3. DirectX 11 SDK - dove posso scaricarlo?
- 4. DirectX 11: uso simultaneo di più adattatori
- 5. WPF e DirectX 11 tramite D3DImage
- 6. gestione della memoria per lambda in C++ 11
- 7. Acquisizione framebuffer DirectX 11 (C++, senza Win32 o D3DX)
- 8. Rendering su più trame con un passaggio in directx 11
- 9. Gestione memoria WebView
- 10. Big Merge/Gestione memoria
- 11. NSTimer gestione della memoria
- 12. Gestione memoria stringa C++
- 13. Gestione memoria senza rami?
- 14. Gestione memoria C++
- 15. CMBlockBufferCrea gestione memoria
- 16. Gestione memoria CFSTR
- 17. Gestione memoria Dll
- 18. Gestione memoria dati core
- 19. Gestione memoria Tomcat
- 20. Learning DirectX nel 2013
- 21. Android - Gestione bitmap e memoria?
- 22. iOS 8 Gestione memoria UIWebView
- 23. C++: sulla gestione della memoria
- 24. Gestione della memoria ed eseguiSelectorInBackground:
- 25. Gestione della memoria in perl
- 26. Corretta gestione della memoria vettoriale
- 27. Gestione memoria con struct epoll_event
- 28. paradigmi di gestione della memoria C++
- 29. DirectX Desktop
- 30. C11/C++ 11 di memoria debole benchmark