난 지금까지 D3D12_GPU_VIRTUAL_ADDRESS에 연산을 하면 안되는 줄 알았음... virtual address라길래 물리적 메모리가 아닌가? 라는 생각때문에 불연속적인줄 알고 연산해봤자 의미 없는 줄 알았음... 그런데 더 찾아보니까 D3D12_CONSTANT_BUFFER_VIEW 만들 때, BufferLocation 파라미터에 값을 더해서 보냄.
내가 아는 virtual address는 OS에서 virtual address를 물리주소로 변환할 때, 테이블의 base address를 더한 다음 페이지 찾아서 offset 더하는 거였는데, Dx12에서 말하는 virtual address는 다른 개념인가??
일반 프로세스가 시스템 메모리의 가상 메모리 위에서 복사하거나 읽거나 쓰는 것처럼 그래픽 장치의 메모리가 가상 메모리로 감싸인 거임. 그러니까 가상 메모리가 맞더라도 사용자는 신경 안 써도됨. D3D11.2에서 타일드 리소스 지원하면서 가상 메모리 기능이 D3D에 들어온 것같음(타일드 리소스가 가상 메모리가 없으면 구현이 안 됨)
유저는 그냥 메모리처럼 생각하고 연산해서 사용해도 된다는 건가.. 몰랐다...