HLSL:未对齐/压缩浮点数的索引
我有一个顶点着色器(2.0)做一些实例化 - 每个顶点指定一个数组的索引。
如果我有一个像这样的数组:
float instanceData[100];
编译器为其分配 100 个常量寄存器。每个常量寄存器都是一个 float4
,因此它分配的空间是所需空间的 4 倍。
我需要一种方法让它只分配 25 个常量寄存器并在每个寄存器中存储四个值。
理想情况下,我想要一种在 CPU 和 GPU 上看起来仍然像 float[]
的方法(现在我正在调用 EffectParamter.SetValue(Single[])
,我正在使用 XNA)。但手动打包和解包 float4[]
也是一种选择。
另外:这样做对性能有何影响?它真的值得吗? (对我来说,这将节省大约每四到五个批次)。
I have a vertex shader (2.0) doing some instancing - each vertex specifies an index into an array.
If I have an array like this:
float instanceData[100];
The compiler allocates it 100 constant registers. Each constant register is a float4
, so it's allocating 4 times as much space as is needed.
I need a way to make it allocate just 25 constant registers and store four values in each of them.
Ideally I'd like a method where it still looks like a float[]
on both the CPU and GPU (Right now I am calling EffectParamter.SetValue(Single[])
, I'm using XNA). But manually packing and unpacking a float4[]
is an option, too.
Also: what are the performance implications for doing this? Is it actually worth it? (For me, this will save about one batch in every four or five).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这有帮助吗?:
Does that helps?: