LunarG 核心验证层将结构重置为零

LunarG core validation layer resetting structure to zero

我正在实现一个基本的纹理立方体示例,并且 运行 遇到了一个有趣的问题 - 在将我的 DescriptorWriteSet 结构传递给 UpdateDescriptorSets API 调用之后,所有字段都已清零。之后尝试读取字段的任何代码都会出现空指针异常(因为 DescriptorBufferInfo 指针现在为空)。 在启用VK_LAYER_LUNARG_core_validation时发生,如果我禁用它,API调用似乎工作正常。

我的样本不完整,所以我不能说它是否适用于禁用的层,或者我的 my 代码是否有错误。然而,我一直盯着传递给这个调用的值,做完整性检查,因为我确定 I 没有传递空指针。这是错误,还是预期的行为?

编辑:

它不仅仅是将我给它的结构归零——我目前只传入常量数组中的第一个 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 上提出这样的问题,因为一半以上的时间都是我的错导致了这个问题。

VK_LAYER_LUNARG_core_validation 层不应修改 vkUpdateDescriptorSets 中 pDescriptorWrites 指向的结构。如果您认为它正在对传入的结构进行这种修改,请 post 连同 repo 案例一起发布到 https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/issues.