很粗略的,我们可以从三个主要角度来看待memory:
1. CPU可以读写的,称为system memory,我们一般写的程序都是使用system memory。
2. CPU可写GPU可读的,属于video memory,这种memory在驱动程序中具有重要意义,是驱动程序软件和GPU硬件的桥梁。驱动程序往此memory写入硬件指令,GPU读取指令然后执行。
3. CPU可读GPU可写的,也属于video memory,在驱动开发中也很重要。GPU将某些执行状态或者反馈数据写入此memory,驱动程序读取就可以了解GPU的状态。
frame buffer也属于video memory,它是GPU可写的,一般来说,也是GPU可读但CPU不可读的。
【说明】应用程序和驱动程序都是由CPU执行的,所以,所谓的CPU的读写,就是应用程序/驱动程序的读写属性。
考察一个OpenGL应用程序,如下图所示,应用程序在system memory中准备好数据,将指针传递给driver。driver有两种处理方法:
1. driver在自己内部分配memory,即时的将应用程序system memory中的数据拷贝过来。这样,接下去假如在应用程序中修改了其system memory中的数据,并不影响已经被拷贝到driver中的数据。
2. driver只是简单的记录下指针值,然后,只在这块数据真正被需要用到的时候,driver才去指针对应位置去获取数据。在这中间,假如在应用程序中修改了其system memory中的数据,显然driver所取得的数据是修改后的值。