cbuffer和tbuffer,Shader Model 4支持的新特性,通过打包数据可以获得更好的性能。
关于Shader与应用程序间的数据传递。要传递的数据主要有 constant buffer,SamplerState,Texture2D(resource)。
这里要先提一下DirectX10中新引入的constant buffer。在DX10中,constant存放于常量缓冲区中,每个常量缓冲区由 4096个常量寄存器组成,共有16个常量缓冲区。
constant buffer会为 两种:cbuffer和tbuffer。注意tbuffer是并不是用来存储纹理的,而是指可以像纹理那样来访问其中的数据,对于索引类数据有更好的性能。
为什么使用cbuffer?
cbuffer通过允许将着色常量组合在一起并同时提交,而不是单独调用以提交每个常量,从而减少更新着色常量所需的带宽。
有效使用常量缓冲区的最佳方法是把更新比较频繁的着色器变量组织为cbuffer。这允许应用程序最小化更新着色器常量所需的带宽。
HLSL打包规则
HLSL打包规则类似于使用Visual Studio执行pragma pack 4,它将数据打包成4字节的边界。此外,HLSL打包数据,使其不跨越16字节的边界。变量被压缩到一个给定的四分量向量中,直到变量跨越一个四分量边界;下一个变量将被放到下一个四分量向量。更详细的讨论:https://blog.csdn.net/X_Jun96/article/details/81283268<