簡體   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