繁体   English   中英

DX11最小缓冲区大小

[英]DX11 minimum buffer sizes

创建一些常量缓冲区后,其中一些缓冲区开始无法正确初始化。

使用名为MiscStream的结构创建常量缓冲区,该结构定义为:

struct MiscStream {
    int rw,rh;
    float shine_factor;
    float dist_factor;
    int random_number;
};

并初始化为:

D3D11_BUFFER_DESC dx_misc_buffer_desc;
ID3D11Buffer* dx_misc_buffer;

ZeroMemory(&dx_misc_buffer_desc,sizeof dx_misc_buffer_desc);

    dx_misc_buffer_desc.BindFlags=D3D11_BIND_CONSTANT_BUFFER;
    dx_misc_buffer_desc.Usage=D3D11_USAGE_DYNAMIC;
    dx_misc_buffer_desc.ByteWidth=sizeof(MiscStream);
    dx_misc_buffer_desc.StructureByteStride=0;
    dx_misc_buffer_desc.CPUAccessFlags=D3D11_CPU_ACCESS_WRITE;
    dx_misc_buffer_desc.MiscFlags=0;

hr=dx_device->CreateBuffer(&dx_misc_buffer_desc,NULL,&dx_misc_buffer);

hr将作为E_INVALIDARG返回,程序将失败。

许多其他常量缓冲区都是通过这种方式设置的,但是它们的结构中都具有向量和矩阵。

我将MiscStruct更改为

struct MiscStream {
    D3DXVECTOR3 __r;
    int rw,rh;
    float shine_factor;
    float dist_factor;
    int random_number;
};

它的工作没有错误。

是否有最小结构尺寸? 怎么了?

MSDN

对于恒定缓冲区(将D3D11_BUFFER_DESC的BindFlags设置为D3D11_BIND_CONSTANT_BUFFER),必须将D3D11_BUFFER_DESC的ByteWidth值设置为16的倍数,并且小于或等于D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT。

因此,您可能未能达到“ 16的倍数”限制。 根据您的打包设置,这可能与将各个元素的大小相加不同,因此请使用sizeof()检查实际结构的大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM