正确长度的VkPipelineMultisampleStateCreateInfo.pSampleMask

Ale*_*rth 2 c graphics vulkan

与其他Vulkan的结构不同,其中所有结构都type pArrayName*;具有uint32_t arrayNameCount数组长度的伴随,struct VkPipelineMultisampleStateCreateInfo不定义任何sampleMaskCountfor字段const VkSampleMask* pSampleMask;.

福尔康文档说,关于有效使用下列内容:

"如果pSampleMask不是NULL,则pSampleMask必须是指向⌈rasterizationSamples/32⌉VkSampleMask值数组的指针."

但是 VkSampleCountFlagBits rasterizationSamples;有点价值:

rasterizationSamples是一个VkSampleCountFlagBits,指定光栅化中使用的每个像素的样本数.

到现在为止还挺好.

但是VkSampleCountFlagBits是2个幂的枚举,范围从0x01到0x40(或01到64十进制).可能的ANDed值的范围可以是01到127.所以我想从1到31的按位值将导致a pSampleMask 长度为0; 从32到63的值将给出长度2,依此类推.

那是对的吗 ?我真的很笨!

use*_*751 5

当他们在公式中说"rasterizationSamples"时,他们几乎肯定意味着"光栅化样本的数量",而不是"rasterizationSamples位掩码的值".

另外,⌈...⌉表示向上舍入到最接近的整数.

因此,对于从1到32的光栅化样本计数(位掩码值0x01到0x20),pSampleMask指向单个值.对于从33到64(位掩码值0x40)的栅格化样本计数,它指向两个值的数组.

我注意到位掩码的值与每个位的描述对齐(64的值为64,依此类推)但它可能是巧合.