1.命令缓冲区和DMA
1.命令缓冲区和DMA
两者是"协作关系"—— CPU先把"数据上传指令"写入命令缓冲区,GPU执行指令时,底层通过DMA完成实际的数据拷贝 a.命令缓冲区-本质:CPU写给GPU的"指令清单"(内存块)-类比:你填的"快递单"(写清楚:要寄什么、寄到哪、怎么寄)b.DMA(直接内存访问)-本质:硬件级别的"数据搬运工"(独立于CPU)-类比:快递员(专门负责搬东西,不用你自己动手)以CPU把顶点数据上传到GPU显存为例: a.CPU准备数据:把顶点数组(比如:Vector3[]坐标)整理好,存在CPU内存的连续区域 b.CPU写入命令缓冲区:CPU不会直接搬数据,而是往「命令缓冲区」里写入一条"数据上传指令",指令内容包括:-源地址:CPU内存中顶点数据的起始地址-目标地址:GPU 显存中 VBO 的起始地址-数据长度:要搬运的字节数(比如:1000个顶点 ×12字节/顶点=12000字节)-操作类型:从CPU内存拷贝到GPU显存 c.CPU提交命令缓冲区:CPU把写满指令的命令缓冲区提交给GPU的命令处理器 d.GPU解析指令,触发DMA:GPU读取命令缓冲区里的"数据上传指令"后,不会自己搬数据,而是通知DMA控制器执行搬运 e.DMA完成实际拷贝:DMA控制器直接访问CPU内存和GPU显存,把顶点数据从CPU内存拷贝到GPU显存的VBO中——这个过程不需 要CPU参与,CPU可以去做其他事(比如处理逻辑、准备下一批指令)f.DMA通知GPU完成:数据拷贝完成后,DMA向GPU发送"完成信号",GPU就可以用这个VBO进行渲染了