当前位置: 首页 > news >正文

12. CPU → GPU数据上传 + 渲染指令执行流程

1.CPU → GPU数据上传 + 渲染指令执行流程

2.绑定GPU显存中的VBO/IBO说明


1.CPU → GPU数据上传 + 渲染指令执行流程

以渲染一个3D对象为例,全流程如下1).CPU准备阶段 a.CPU在内存中整理好顶点数据、索引数据、常量缓冲区参数(比如 MVP 矩阵)b.CPU确定本次渲染的渲染状态(深度测试、混合模式等)、Shader 引用、纹理引用
2).CPU写入命令缓冲区 CPU按顺序往"命令缓冲区"(CPU/GPU共享的内存块)写入一系列指令,包括 a.指令1:设置渲染状态(比如开启深度测试、绑定Shader程序)b.指令2:数据上传指令(若数据未上传过)—— 包含"CPU 内存源地址、GPU 显存目标地址、数据长度"c.指令3:绑定GPU显存中的VBO/IBO(顶点/索引缓冲区)d.指令4:更新常量缓冲区(把MVP矩阵、材质参数上传到GPU)e.指令5:DrawCall指令(告诉GPU用当前绑定的VBO/IBO渲染多少个三角形)
3).CPU提交命令缓冲区 CPU把写满指令的命令缓冲区提交给GPU的命令处理器(CommandProcessor),提交后CPU立即返回,去处理游戏逻辑、UI等其 他任务
4).GPU处理命令缓冲区 a.GPU命令处理器按顺序读取命令缓冲区中的指令 b.读到"数据上传指令",GPU命令处理器向DMA控制器(硬件)发送"数据搬运请求",包含源地址、目标地址、长度 c.DMA控制器直接访问CPU内存和GPU显存,完成数据拷贝(全程不占用CPU,也不占用GPU核心)d.DMA拷贝完成后,向GPU命令处理器发送「数据搬运完成信号」(不是给CPU发)e.GPU命令处理器收到信号后,继续执行后续指令(设置渲染状态、绑定资源、执行 DrawCall)f.GPU核心按指令完成渲染,输出画面到帧缓冲区
5).CPU同步 只有当CPU需要读取GPU渲染结果(比如屏幕截图、计算着色器输出),才会主动调用"同步指令"(比如glFinish())—— 此时 CPU会等待GPU完成所有未执行的指令,否则CPU全程不等待GPU

2.绑定GPU显存中的VBO/IBO说明

绑定GPU显存中的VBO/IBO理解成:CPU告诉GPU接下来的渲染指令,要使用显存里的哪一块顶点/索引数据,本质是建立渲染指 令和GPU显存资源的关联关系
a.数据上传阶段(已完成)CPU把顶点/索引数据通过DMA上传到GPU显存,GPU会创建对应的VBO/IBO,并返回一个ID给CPU,CPU把这个ID存在自己的资源 台账里 b.绑定阶段,CPU往命令缓冲区写入一条"绑定指令",指令内容很简单-绑定VBOID=123"顶点数据槽位"-绑定IBOID=456"索引数据槽位"c.指令提交阶段 CPU把包含"绑定指令 + DrawCall 指令"的命令缓冲区提交给GPU d.GPU执行阶段-GPU命令处理器先执行"绑定指令":根据ID找到显存里的VBO/IBO,把它们和对应的槽位关联-接着执行DrawCall指令:GPU从槽位中读取绑定好的顶点/索引数据,再结合Shader、渲染状态完成渲染
http://www.jsqmd.com/news/250226/

相关文章:

  • [原创]基于CCO-LSSVM多输出回归+SHAP可解释性分析 Matlab代码(多输入多输出)
  • 【Java】万字解读Java的动态代理(JDK原生动态代理、CGLIB动态代理)_java 动态代理,零基础入门到精通,收藏这篇就够了
  • django基于python的秦宇宙智慧游乐场游乐园门票售票系统网站的设计与实现
  • java中反射机制的应用场景,零基础入门到精通,收藏这篇就够了
  • Java 开发转前端:利用 AI 竟然如此简单_java 对象生成前端文档,零基础入门到精通,收藏这篇就够了
  • django基于python的美食探店分享网站设计与实现
  • django基于python的社区老年人关爱服务系统的设计与实现
  • [原创]基于ELM多输出回归+SHAP可解释性分析+NSGAII多目标优化算法的工艺参数优化 Matlab代码
  • [原创基于CCO-LSSVM多输出回归+SHAP可解释性分析+NSGAII多目标优化算法的工艺参数优化 Matlab代码
  • django基于python的酒店预定管理系统 客房清洁
  • tinylisp:只有99行c代码的lisp语言
  • Java 常用编辑器 IntelliJ IDEA,零基础入门到精通,收藏这篇就够了
  • PaddleOCR免费调用API额度提高到3000页每天啦
  • 线程池简单源码思路手撕实现和关于参数设置
  • 破解 IPD 落地难题:专业咨询管理公司的核心价值
  • VBScript系统级自动化:使用WScript对象外部操控Office与模拟键盘输入
  • NPP 草原:南非图文巴,1949-1990 年,R1
  • NPP 草原:南非图文巴,1949-1990 年,R1
  • Open Code教程(二)| 命令与技巧大全
  • GEE初学:谷歌地球引擎GEE入门指南(最新注册全流程)
  • GEE初学:谷歌地球引擎GEE入门指南(最新注册全流程)
  • AI应用架构师打造的AI驱动虚拟旅游,树立行业标杆
  • 现代高级语言 JIT 编译优化技术——逃逸分析(Escape Analysis)
  • CRM系统如何通过AI与自动化重塑企业销售效能
  • 什么是SR-MPLS
  • Open Code教程(三)| 实战案例集
  • .Net 中的 ActivatorUtilitiesConstructor 特性
  • 学霸同款2026 TOP8 AI论文软件:本科生毕业论文必备测评
  • django-flask基于python的大学生公益活动志愿服务系统的设计与实现
  • django-flask基于python的大学生兼职网站的设计与实现