RTR4读书笔记第三章

这里提到了SIMD的工作方式。单指令多数据。GPU在执行指令的时候,如果碰到了一个需要去内存取数据这种明显会延迟的指令,会在发出指令后切换到下一个片段,先执行下一个片段的指令,然后下一个片段会在同样的地方去获取内存数据,它会继续切换下一个。依次类推,直到又回到第一个片段,这个时候内存数据取到了,那么继续开始下一个轮回。

 

几千个片段,每一个都是单独的一个线程。这些线程会被分成几个组,分配到gpu核心上。gpu核心就会根据上述方式进行工作。如果指令需要获得其他像素的数据,那么有可能需要等待所有核心都执行完毕后,才能继续进行。假设有2000个线程,gpu有32个核心,那么就需要2000/32=62.5 , 那么会有63个组,其中一个组一半是空的。第一组进去gpu执行,如果有延迟指令,就换一下组,以此类推,直到所有指令执行完毕。

 

shader使用更多的寄存器,那么线程就会越少,warps也会越少。高占用意味着warps很多,低占用意味着性能不好。

 

 

 可变化的输入寄存器只有16/16/32个,代表顶点着色器/几何着色器/片段着色器。

 

曲面细分着色器首先通过一组片元,经过hull shader,来对他们进行处理变换,得到变换后的片元后,进入曲面细分,按照给定参数进行细分,细分完成后,将输出丢给domain shader处理,最终得到新的网格。

 

 

这里提到了像素范围邻居像素的做法。现代gpu会把像素分成2x2一组,成为一个quad。然后shader里的ddx和ddy是可以得到相邻像素的变化值。这是通过用一个不同的线程在同一个wrap里面获取数据做到的。

但是这种做法有一个限制,就是如果你是动态分支,例如if或者for这种语句,这样的结果可能会让你的ddx或者ddy拿到的值没有意义。不过感觉不影响使用。。

 

 

 

这一段的意思应该是第一遍渲染的结果可以马上传给cs,然cs去算平均。而不需要等全部算完了,再blit一次去算平均。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yxriyin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值