C++ 手动填充顶点结构以实现对齐

C++ 手动填充顶点结构以实现对齐,c++,optimization,directx-11,vertex-attributes,C++,Optimization,Directx 11,Vertex Attributes,将顶点数据传递给着色器时,是否明智地对顶点结构应用填充以实现对齐(16字节),或者硬件是否仍在执行该操作? 例如,这两个顶点结构是否同样有效 struct Vertex44 // <<----- NO PADDING { XMFLOAT3 position; XMFLOAT3 normal; XMFLOAT2 texCoord; XMFLOAT3 tangent; }; struct Vertex48 // <

将顶点数据传递给着色器时,是否明智地对顶点结构应用填充以实现对齐(16字节),或者硬件是否仍在执行该操作?

例如,这两个顶点结构是否同样有效

struct Vertex44    // <<----- NO PADDING
{
    XMFLOAT3    position;
    XMFLOAT3    normal;
    XMFLOAT2    texCoord;
    XMFLOAT3    tangent;
};

struct Vertex48   // <<----- WITH PADDING
{
    XMFLOAT3    position;
    XMFLOAT3    normal;
    XMFLOAT2    texCoord;
    XMFLOAT3    tangent;
    float       padding;
};

struct Vertex44/对于顶点格式,如果将跨步的总大小保持在正好32字节或正好64字节,大多数硬件的性能都会得到提高。这只影响输入汇编程序布局引擎。一旦数据进入GPU管道,驱动程序和运行时会根据硬件的需要将几乎所有内容对齐。

您对其进行了基准测试吗?您可以将
\u declspec(align(16))
放在结构的前面,以强制将其置于16字节边界上(虽然这是MSVC关键字,但我假设您使用windows,因为您使用的是directX)如果使用C++11,我更喜欢
alignas
说明符