c++ - 手动填充顶点结构实现对齐

标签 c++ optimization directx-11 vertex-attributes

将顶点数据传递给着色器时,对顶点结构应用填充以实现对齐(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;
};

谢谢!

最佳答案

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

关于c++ - 手动填充顶点结构实现对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31491541/

相关文章:

c++ - 内联是否等于#define 函数?

c++ - 使用 C++-AMP 访问缓冲区

c++ - 为什么 std::sort 在比较函数使用大于 (>) 而不是大于或等于 (>=) 时起作用?

C++ std::vector 迭代器错误

c++ - 调整结构的 vector 元素大小 - segv

c++ - 如何在使用 bufferevents 写入 libevent 后关闭套接字?

c++ - 如何优化矩阵乘法 (matmul) 代码以在单个处理器内核上快速运行

python - 具有固定集合约束的 Python 投资组合选择

c++ - D3D11CreateDevice() 返回垃圾值并失败

c++ - 在 DirectX 中跨线程传递纹理的数据竞争