记一个glslang的bug

错误日志

这个错误是在Vulkan项目出现的,由Vulkan的Validation Layer报出:

Validation Error: [ UNASSIGNED-CoreValidation-Shader-InconsistentSpirv ] Object 0: handle = 0x1c89eff0fd8, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0x6bbb14 | SPIR-V module not valid: Interfaces passed to OpEntryPoint must be of type OpTypeVariable. Found OpFunctionParameter.
  %texture = OpFunctionParameter %_ptr_UniformConstant_71

错误排查

看起来是shader的问题,根据调用堆栈找到对应的shader,搜索关键字texture,找到这样一段代码:

IBL = EvaluateIBL(texture, ....)

其中,texture是一个采样器sampler:

layout(binding = 4) uniform sampler2D texture;

在这里我把一个sampler作为函数的参数传入了,难道Vulkan不支持将sampler作为函数的参数吗?

一番搜索后,在glslang的git repo找到这样一个commit:Fix #2264: OpEntryPoint incorrectly including function parameters.

看起来是shader编译器的一个问题,应该是在最新版的SDK修复掉了。既然如此,解决方案就比较容易了:更新SDK

解决

首先下载最新版本的Vulkan的SDK,然后安装。

由于这个项目是采用了cmake自动化编译流程,所以得删除掉cmake的cache文件:CMakeCache.txt,然后检查环境变量里面Vulkan SDK路径已经指向了最新版的SDK,最后编译,问题解决!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值