Вот мой код:
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 репо.
Я создаю этот код со ссылками на библиотеки, связанные с glslang, которые взяты из Vulkan 1.0.54.0. И я не знаю, почему я получил следующие сообщения об ошибках:
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
Источник пост-постов на суть.
Я попробовал оба теста. Все может быть успешно проанализировано и скомпилировано в SPIRV с помощью официальных инструментов (glslangValidator). Но в случае 2 мой инструмент вышел из строя на этапе синтаксического анализа.
#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);
}
#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;
}
Кто-нибудь знает, что я сделал не так?
Однажды у меня была эта проблема, затем я решил ее путем сброса проекта (удаление, клонирование, сборка заново), но не знал почему. Теперь у меня снова возникла эта проблема. однако, на этот раз сброс проекта не помогает.
Я нашел ответ в официальном проекте Vulkan.
Я должен определить следующий символ
AMD_EXTENSIONS
NV_EXTENSIONS
чтобы эти встроенные модули работали.
Других решений пока нет …