与其他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,依此类推.
那是对的吗 ?我真的很笨!
当他们在公式中说"rasterizationSamples"时,他们几乎肯定意味着"光栅化样本的数量",而不是"rasterizationSamples位掩码的值".
另外,⌈...⌉表示向上舍入到最接近的整数.
因此,对于从1到32的光栅化样本计数(位掩码值0x01到0x20),pSampleMask指向单个值.对于从33到64(位掩码值0x40)的栅格化样本计数,它指向两个值的数组.
我注意到位掩码的值与每个位的描述对齐(64的值为64,依此类推)但它可能是巧合.