1

我正在实现一个基本的纹理立方体示例,并且遇到了一个有趣的问题 - 在将我的DescriptorWriteSet结构传递给UpdateDescriptorSetsAPI 调用后,所有字段都已清零。此后尝试读取字段的任何代码都会出现空指针异常(因为 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 上的问题,因为超过一半的时间是我的错,我得到了这个问题。

4

1 回答 1

3

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

于 2016-06-16T15:01:33.517 回答