Files
obsidian-notes/GPU/GPU渲染流程.md
2023-04-18 18:53:45 +08:00

52 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

https://www.cnblogs.com/timlly/p/11471507.html
参考网站
# SM 流处理器
包括
运算核心
load/store 加载与储存
特殊数学运算 sin、cos、log
寄存器
L1缓存
全局内存缓存
纹理读取单元
纹理缓存
PolyMorph Engine:多边形引擎(负责属性装配、顶点拉取、曲面细分、栅格化 ~= 专门处理顶点相关)
2个Wrap Schedulers:负责wrap调度 1一个warp由32个线程组成warp调度器的指令通过Dispatch Units送到Core执行。
指令缓存
内部链接网络(?)
# GPU渲染管线
通过图形api调用drawcall->
指令推送到驱动,驱动检查是否合法->
驱动把指令缓存到buffer里->
下次flush会把指令推送到GPU->
----------主机-------
GPU通过主机接口Host Interface接受命令->
通过前端(Front End)处理这些命令(?)-> Front End是哪儿
图元分配开始工作(indexbuffer产生三角形形成批次, 分配给GPCs{ ? })->
SM的多边形引擎(Poly Morph Engine)通过三角形索引获取三角形数据(Vertex Fetch)->
SM的Wrap调度(SIMT)->
![[Pasted image 20230413163234.png]]
等到wrap完成了vertex-shader的所有指令三角形会被裁剪然后准备栅格化,GPU会把L1和L2缓存来进行vertex-shader和pixel-shader之间的数据通信
SM上的Attribute Setup保证了从vertex-shader来的数据经过插值后是pixel-shade是可读的。
光栅化引擎开始接受三角形工作(裁剪、背面剔除、Early-Z剔除)
32个线程分成8个2*2的像素块、如果没有三角形覆盖线程会被遮掩
最后会颜色和深度输出到ROP(渲染输出单元)进行深度测试和framebuffer混合
# 深度测试
### 深度测试失效情况:
开启透明测试
开启像素摒弃指令 - OpenGL的clip
关闭深度测试
开启Multi-Sampling多采样
### 深度测试会导致深度数据冲突
# CPU与GPU异构系统
分离
耦合