float4 与 directX 中的 4 个浮点数

float4 vs 4 floats in directX

将数据发送到顶点着色器时,在 directX 中哪个更快。

struct VertexInputType
{
    float4 data : DATA; // x,y - POSITION, z - distance, w - size
}

对比

struct VertexInputType
{
    float2 pos : POSITION;
    float distance : DISTANCE;
    float size : SIZE;
}

一个疯狂的猜测是说第一个更快,因为它包含在一个 128 位寄存器中。但我认为有更好的答案。

如果您正在考虑 CPU 和 GPU 之间的内存传输: 如果这些都来自同一个缓冲区对象,那么它应该无关紧要。第二个只是对着色器已知数据的解释,与传输的实际数据无关。在情况 2 中使用多个顶点流的情况下,它可能具有不同的性能,但这种差异与着色器中使用的格式无关。

如果您担心顶点缓存效率: 在这两种情况下,每个顶点将存储和检索 16 个字节,因此这里也没有区别。