我正在实现一个基本的纹理立方体示例,并遇到了一个有趣的问题 - 将我的DescriptorWriteSet
结构传递给UpdateDescriptorSets
API调用后,所有字段都已归零。在此之后尝试读取字段的任何代码都会获得零指针异常(因为描述性指针现在为null)。此仅在启用vk_layer_lunarg_core_validation时发生发生,如果我禁用它,API调用似乎正常。
我的示例不完整,所以我不能说它是否适用于禁用图层,或者我在我的代码中是否有错误。但是,我一直在盯着传递给这个电话的值,进行理智检查,因为我可以确定 i 并没有传递到空指针中。这是一个错误,还是这种预期的行为?
- Windows 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。犹豫不决地将类似的事情作为GitHub上的问题,因为我遇到问题是我的错。
vk_layer_lunarg_core_validation层不应修改vkupdedescriptorsets中的pdescriptorwrites指向的结构。如果您认为正在对传递的结构进行这种修改,请发布发行案例案例,https://github.com/khronosgroup/vulkan-loaderandvalidationlayers/issues。