我正在实现一个基本的纹理立方体示例,并且遇到了一个有趣的问题 - 在将我的DescriptorWriteSet
结构传递给UpdateDescriptorSets
API 调用后,所有字段都已清零。此后尝试读取字段的任何代码都会出现空指针异常(因为 DescriptorBufferInfo 指针现在为空)。这仅在启用 VK_LAYER_LUNARG_core_validation 时发生,如果我禁用它,API 调用似乎工作正常。
我的示例不完整,所以我不能说它是否适用于禁用图层,或者我的代码是否有错误。然而,我一直盯着传递给这个调用的值,做一个健全性检查,因为我确定我没有传入一个空指针。这是一个错误,还是这是预期的行为?
- 视窗 10
- LunarG SDK 1.0.8(我想使用 1.0.13,但这需要更新的 AMD 驱动程序,它会蓝屏我的电脑)
编辑:
这不仅仅是将我给它的结构清零——我目前只传入DescriptorWriteSet
常量数组中的第一个,它也将第二个清零。事实上,当我检查阵列周围的内存时,这一层会触及阵列两侧的内存。这对我来说似乎更像是一个错误......
编辑2:
原来问题源于我的代码:
DescriptorSetLayoutBinding layout_bindings[]{
DescriptorSetLayoutBinding()
.Binding(0)
.Descriptors(DescriptorType::UNIFORM_BUFFER, 1)
.StageFlags(ShaderStageFlagBits::VERTEX),
DescriptorSetLayoutBinding()
.Binding(0)
.Descriptors(DescriptorType::COMBINED_IMAGE_SAMPLER, 1)
.StageFlags(ShaderStageFlagBits::FRAGMENT)
};
我的两个布局绑定具有相同的绑定索引 0。当然,我希望这会导致问题,但我不希望这会导致在未来的 API 调用中传递的结构归零......我总是犹豫不决像这样的事情作为 Github 上的问题,因为超过一半的时间是我的错,我得到了这个问题。