我实现了一个基本的纹理多维数据集示例,并遇到了一个有趣的问题 - 在将DescriptorWriteSet
结构传递给UpdateDescriptorSets
API调用后,所有字段都已清零。尝试在之后读取字段的任何代码都会获得空指针异常(因为DescriptorBufferInfo指针现在为null)。启用VK_LAYER_LUNARG_core_validation时会发生 only ,如果我禁用它,则API调用似乎正常。
我的示例不完整,因此我无法说明是否可以禁用图层,或者我的我的代码中是否有错误。但是,我一直在盯着传入此调用的值,进行完整性检查,因为我确定我没有传入空指针。这是一个错误,还是这种预期的行为?
修改
它不只是将我给出的结构归零 - 我目前只传入一个常量数组中的第一个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的问题提出来,因为超过一半的时间我的错是我得到了这个问题。
答案 0 :(得分:3)
VK_LAYER_LUNARG_core_validation层不应该修改vkUpdateDescriptorSets中pDescriptorWrites指向的结构。如果您认为正在对传入的结构进行此修改,请将问题与回购案一起发布到https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues。