VkPipelineMultisampleStateCreateInfo.pSampleMask 的正确长度
Correct length of VkPipelineMultisampleStateCreateInfo.pSampleMask
与其他 Vulkan 的结构不同,其中所有 type pArrayName*;
都有一个具有数组长度的同伴 uint32_t arrayNameCount
,结构 VkPipelineMultisampleStateCreateInfo
没有为字段 [=15= 定义任何 sampleMaskCount
].
Vulkan docs 对有效用法的说明如下:
"If pSampleMask is not NULL, pSampleMask must be a pointer to an array of ⌈rasterizationSamples / 32⌉ VkSampleMask values."
但是VkSampleCountFlagBits rasterizationSamples;
是一个位值:
rasterizationSamples is a VkSampleCountFlagBits specifying the number of samples per pixel used in rasterization.
到目前为止一切顺利。
但 VkSampleCountFlagBits 是 2 值的幂的枚举,范围从 0x01 到 0x40(或十进制的 01 到 64)。可能的 ANDed 值范围从 01 到 127。
所以我猜从 1 到 31 的按位值将导致长度为 0 的 pSampleMask
;从 32 到 63 的值将给出长度 2,依此类推。
对吗?
我感觉真的很蠢!
当他们在公式中说 "rasterizationSamples" 时,他们几乎肯定是指 "the number of rasterization samples",而不是 "the value of the rasterizationSamples bitmask"。
另外,⌈...⌉表示四舍五入到最接近的整数。
因此,对于从 1 到 32 的光栅化样本计数(位掩码值 0x01 到 0x20),pSampleMask 指向单个值。对于从 33 到 64 的光栅化样本计数(位掩码值 0x40),它指向一个包含两个值的数组。
我注意到位掩码的值与每个位的描述一致(64 的值为 64,依此类推)但这可能是巧合。
rasterizationSamples
必须只是 SampleCountFlagBits
值之一(不是 按位 | 值)。
简单地说,那么你需要pSampleMask
数组(由32个b值组成)中的位数大于或等于rasterizationSamples
指定的样本量。 (即一个 VkSampleMask := uint32_t
除了 SAMPLE_COUNT_64
需要两个)
有点滑稽的是,他们没有选择单身uint64_t。 (也许他们计划添加 128 个样本 :)
与其他 Vulkan 的结构不同,其中所有 type pArrayName*;
都有一个具有数组长度的同伴 uint32_t arrayNameCount
,结构 VkPipelineMultisampleStateCreateInfo
没有为字段 [=15= 定义任何 sampleMaskCount
].
Vulkan docs 对有效用法的说明如下:
"If pSampleMask is not NULL, pSampleMask must be a pointer to an array of ⌈rasterizationSamples / 32⌉ VkSampleMask values."
但是VkSampleCountFlagBits rasterizationSamples;
是一个位值:
rasterizationSamples is a VkSampleCountFlagBits specifying the number of samples per pixel used in rasterization.
到目前为止一切顺利。
但 VkSampleCountFlagBits 是 2 值的幂的枚举,范围从 0x01 到 0x40(或十进制的 01 到 64)。可能的 ANDed 值范围从 01 到 127。
所以我猜从 1 到 31 的按位值将导致长度为 0 的 pSampleMask
;从 32 到 63 的值将给出长度 2,依此类推。
对吗? 我感觉真的很蠢!
当他们在公式中说 "rasterizationSamples" 时,他们几乎肯定是指 "the number of rasterization samples",而不是 "the value of the rasterizationSamples bitmask"。
另外,⌈...⌉表示四舍五入到最接近的整数。
因此,对于从 1 到 32 的光栅化样本计数(位掩码值 0x01 到 0x20),pSampleMask 指向单个值。对于从 33 到 64 的光栅化样本计数(位掩码值 0x40),它指向一个包含两个值的数组。
我注意到位掩码的值与每个位的描述一致(64 的值为 64,依此类推)但这可能是巧合。
rasterizationSamples
必须只是 SampleCountFlagBits
值之一(不是 按位 | 值)。
简单地说,那么你需要pSampleMask
数组(由32个b值组成)中的位数大于或等于rasterizationSamples
指定的样本量。 (即一个 VkSampleMask := uint32_t
除了 SAMPLE_COUNT_64
需要两个)
有点滑稽的是,他们没有选择单身uint64_t。 (也许他们计划添加 128 个样本 :)