You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

仅使用Set 2的Descriptor Set Layout导致图形Pipeline创建失败

Vulkan Pipeline创建失败问题

背景

  • 具备2年OpenGL业余项目开发经验,完成Vulkan教程后正在对模块进行抽象,当前深入学习Descriptor Set相关概念
  • 原本Descriptor功能正常,可实现图像渲染,原片段着色器代码:
#version 450
layout(location = 0) in vec4 fColor;
layout(location = 1) in vec2 fTexCoord;
layout(location = 2) in float fTexIndex;

layout(location = 0) out vec4 outColor;

layout(binding = 1) uniform sampler2D texSampler[32];

void main()
{
    outColor = fColor;
    outColor *= texture(texSampler[int(fTexIndex)], fTexCoord);

    if (outColor.a == 0)
        discard;
}

操作与问题场景

为优化Descriptor Set的使用效率,参考游戏引擎开发指南拆分Set:

  • Set 0:每帧全局数据,每帧绑定一次
  • Set 1:每帧RenderPass数据,每次RenderPass绑定一次
  • Set 2:每帧材质数据,每个材质绑定一次
  • Set 3:每帧对象数据,每个对象绑定一次

对片段着色器进行修改,将纹理采样器的绑定指定到Set 2:

layout(set = 2, binding = 1) uniform sampler2D texSampler[32];

确认所有相关代码已正确引用Set 2,且当前着色器仅使用Set 2的该绑定,Set 0、1、3无任何绑定。

错误现象

重新编译着色器并运行程序后,图形Pipeline创建失败,报错信息如下:

Validation Error: [ VUID-VkGraphicsPipelineCreateInfo-layout-00756 ] Object 0: handle = 0x1c580c12c70, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x45717876 | Shader uses descriptor slot 2.1 (expected `VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER`) but not declared in pipeline layout
  • 通过着色器编译器的反射数据创建Descriptor Set Layout,将其传入Pipeline Layout创建流程,Pipeline Layout创建成功,但Pipeline创建失败
  • 无法理解修改Set布局后为何出现该错误,此前预期遗漏Set修改环节才会报错

内容的提问来源于stack exchange,提问作者nepp95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:53:14