GraphicsBuffer 可以用作结构化缓冲区。
在 HLSL 着色器中,这映射到 StructuredBuffer<T>
或 RWStructuredBuffer<T>
。
当您构建此类型的 GraphicsBuffer 时,stride
的值必须与 HLSL 代码中相应 StructuredBuffer
结构类型一致。stride
的值也必须是 4 的倍数,且小于 2048。
为了满足某些平台上的要求并避免性能问题,stride
应该为 16 的倍数。使用 float4 和 float4x4 变量创建 16 的倍数,并将较小的变量放在其中。避免使用“填充”变量来创建 16 的倍数,例如使用 float3 变量来填充包含单个 float 的结构体,因为某些数据类型在不同平台上可能具有不同的尺寸。
如果您混合使用不同大小的变量,着色器结构化缓冲区的数据布局可能因图形 API 而异。这意味着 ComputeShader.SetBuffer 或 Material.SetBuffer 可能会覆盖数据或将变量设置为错误的值。有关更多信息,请参阅 为不同的图形 API 编写着色器。
请参阅 Microsoft 的 HLSL 文档,了解有关 StructuredBuffer 和 RWStructuredBuffer 的信息。
DirectX 11 不允许 Index 或 ::Vertex 缓冲区也为 Structured
。对于使用 DirectX 11 兼容性的计算着色器网格数据访问,最好使用 Raw。
其他资源:GraphicsBuffer、ComputeShader、Material.SetBuffer。