C++ 手动填充顶点结构以实现对齐
将顶点数据传递给着色器时,是否明智地对顶点结构应用填充以实现对齐(16字节),或者硬件是否仍在执行该操作?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 // <
例如,这两个顶点结构是否同样有效
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
说明符