2014-10-17 32 views
5

Od pewnego czasu uczę się DirectX 11, ale wciąż nie mam pojęcia, jak DirectX 11 zarządza pamięcią. Na przykład, jeśli utworzyć bufor wierzchołków za pomocą ID3D11Device :: CreateBuffer, gdzie jest przechowywany nowy bufor? Wiem, że zwraca wskaźnik do bufora, więc oznacza to, że musi on być przechowywany w pamięci RAM procesora, prawda? Jednak myślałem, że to sprawi, że ID3D11DeviceContext :: IASetVertexBuffers będzie bardzo powolnym procesem, ponieważ będzie musiał skopiować bufor z CPU RAM do GPU RAM. Ale gdyby wszystkie bufory utworzone przy pomocy ID3D11Device: CreateBuffer były przechowywane w pamięci RAM GPU, to czy GPU RAM nie wypełniłoby się naprawdę szybko? Zasadniczo chciałbym wiedzieć: kiedy utworzę bufor, gdzie przechowywane są te dane? W pamięci RAM procesora lub pamięci GPU? Co to jest ID3D11DeviceContext :: IASetVertexBuffers robiące z buforem (kopiowanie/ustawianie?).DirectX 11 Zarządzanie pamięcią

Odpowiedz

7

Ogólna odpowiedź brzmi, że "jest tam, gdzie kierowca chce, aby to było". W przypadku zasobów "DYNAMICZNYCH" są one zwykle umieszczane w pamięci dostępnej zarówno dla procesora, jak i procesora graficznego (na nowoczesnych komputerach jest to współużytkowane przez magistralę PCIe). W przypadku zasobów "STATIC" mogą one znajdować się w pamięci RAM wideo, która jest dostępna tylko przez procesor graficzny, który jest kopiowany za pośrednictwem "współużytkowanego" okna pamięci, lub jeśli jest ograniczona przestrzeń, są one umieszczane w "udostępnionym" oknie pamięci. Cele renderowania są również umieszczane w pamięci RAM wideo.

Aby uzyskać głębsze informacje na temat zarządzania pamięcią wideo Direct3D, zapoznaj się z wykładem "Dlaczego twoja gra Windows nie będzie działać w 2 147 352 576?" który nie jest już dostępny w witrynie MSDN Downloads, ale można go znaleźć na moim blog.

Jeśli chcesz uzyskać szczegółowe informacje o sprzęcie, przeczytaj driver writer's documentation.

Możesz również znaleźć próbkę Video Memory w galerii edukacyjnej MSDN.