你可以将ComputeBuffer用作结构化缓冲区。
这在其它方面与ComputeBufferType.Default完全相同,除了使用了其他任何ComputeBufferType标志,则所生成的 ComputeBuffer 将不能绑定为结构化缓冲区,除非显式添加ComputeBufferType.Structured。
在构造此类型的 ComputeBuffer 时,stride
的值必须匹配 HLSL 中相应StructuredBuffer
结构类型的偏移。stride
的值也必须为 4 的倍数,且小于 2048。
为了满足某些平台上的需求并避免性能问题,stride
应为 16 的倍数。使用 float4 和 float4x4 变量来创建 16 的倍数,并将较小的变量放入其中。避免使用“填充”变量来创建 16 的倍数,例如使用 float3 变量填充仅包含一个 float 的结构,因为某些数据类型在不同平台上的大小可能不同。
如果你使用多种不同大小的变量,着色器的结构化缓冲区的数据布局可能因图形 API 而异。这意味着ComputeShader.SetBuffer或Material.SetBuffer可能覆盖数据或将变量设置为错误的值。请参阅为不同的图形 API 编写着色器以了解更多信息。