2014-10-17 17 views
5

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

7

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.