glslang无法解析内置插件

时间:2017-07-26 17:22:17

标签: c++ opengl glsl vulkan spir-v

这是我的代码:

bool ParseShader(glslang::TShader* p_shader) {
    EShMessages messages = (EShMessages)(EShMsgSpvRules | EShMsgVulkanRules);
    TBuiltInResource resources;
    InitializeResources(resources);

    if (!p_shader->parse(&resources, 100, false, messages)) {
        std::cout << p_shader->getInfoLog() << std::endl;
        std::cout << p_shader->getInfoDebugLog() << std::endl;
        return false;
    }
    return true;
}

您可以在Github repos上获得完整的源代码和项目 我使用来自Vulkan 1.0.54.0的glslang相关库来构建此代码。而且我不知道为什么会收到以下错误消息:

Unable to parse built-ins
ERROR: 0:100: 'int64_t' : overloaded functions must have the same return type
INTERNAL ERROR: Unable to parse built-ins

内置资源来源于gist

我尝试了两个测试用例。所有都可以通过官方工具(glslangValidator)成功解析并编译成SPIRV。但在案例2中,我的工具在解析阶段失败了。

案例1

#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable
layout(location=0) in vec3 inPos;
layout(location=1) in vec3 inNormal;
layout(location=2) in vec2 inUV;

layout(std140, push_constant) uniform MVP {
    mat4 m;
} mvp;

layout (location = 0) out vec2 outUV;

out gl_PerVertex 
{
    vec4 gl_Position;   
};

void main() 
{
    outUV = inUV;
    gl_Position = mvp.m * vec4(inPos.xyz, 1.0);
}

案例2

#version 450

#extension GL_ARB_separate_shader_objects : enable
#extension GL_ARB_shading_language_420pack : enable

layout(set=0, binding=1) uniform sampler2D samplerColor;

layout(location=0) in vec2 inUV;
layout(location=0) out vec4 outFragColor;

void main() 
{
    vec4 texs = texture(samplerColor, inUV, 0.0f);
    outFragColor = texs;
}

任何人都知道我做错了什么?

我曾经遇到过这个问题,然后通过重新设置项目(删除,克隆,再次构建)解决了这个问题但是我不知道为什么。现在,我又遇到了这个问题。但是,这次重置项目并没有帮助。

1 个答案:

答案 0 :(得分:2)

我发现答案在Vulkan官方项目中 我应该定义以下符号

AMD_EXTENSIONS
NV_EXTENSIONS

使这些内置插件能够工作。