SPIR-V 需要 Vulkan 1.0.51.1 中用户 in/out 的位置 +
SPIR-V require locations on user in/out in Vulkan 1.0.51.1 +
我在我的电脑上安装了最新的 Vulkan SDK,但是每当我想通过 glslValidator.exe 为我的着色器生成 SPIR-V 文件时,它都会失败并且 returns 以下错误
ERROR: Shader.vert:17: 'location' : SPIR-V requires location for user input/output
ERROR: 1 compilation errors. No code generated.
ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
SPIR-V is not generated for failed compile or link
我发现自更新 1.0.51.1 以来有一些变化可能会导致我的旧着色器失败
Require locations on user in/out in GL_KHR_vulkan_glsl (internal issue 783).
解决此问题的 proper/new 方法是什么?
顶点着色器
#version 450
#extension GL_ARB_separate_shader_objects : enable
layout(binding = 0)uniform UniformBufferObject {
mat4 model;
mat4 view;
mat4 proj;
} ubo;
layout(location = 0)in vec3 inPosition;
layout(location = 1)in vec3 inNormals;
layout(location = 2)in vec2 inTexCoord;
layout(location = 0)out vec3 fragColor;
layout(location = 1)out vec2 fragTexCoord;
out vec4 Normal;
out gl_PerVertex{
vec4 gl_Position;
};
void main()
{
gl_Position = ubo.proj * ubo.view * ubo.model * vec4 (inPosition, 1.0);
//fragColor = inColor;
fragTexCoord = inTexCoord;
Normal = ubo.proj * ubo.view * ubo.model * vec4 (inNormals, 1.0);
}
我假设您需要通过布局限定符为所有变量显式设置位置:
layout( location=<number> ) ...
Vulkan 要求所有输入、输出和统一变量都具有明确提供的位置值。着色器阶段之间的接口匹配仅通过位置值执行(与 OpenGL 相反,它可以通过名称或位置执行)。我不确定,因为我一直提供位置值,但也许在早期版本中 glslangValidator 隐式设置它们(如果位置丢失)。
我在我的电脑上安装了最新的 Vulkan SDK,但是每当我想通过 glslValidator.exe 为我的着色器生成 SPIR-V 文件时,它都会失败并且 returns 以下错误
ERROR: Shader.vert:17: 'location' : SPIR-V requires location for user input/output
ERROR: 1 compilation errors. No code generated.
ERROR: Linking vertex stage: Missing entry point: Each stage requires one entry point
SPIR-V is not generated for failed compile or link
我发现自更新 1.0.51.1 以来有一些变化可能会导致我的旧着色器失败
Require locations on user in/out in GL_KHR_vulkan_glsl (internal issue 783).
解决此问题的 proper/new 方法是什么?
顶点着色器
#version 450
#extension GL_ARB_separate_shader_objects : enable
layout(binding = 0)uniform UniformBufferObject {
mat4 model;
mat4 view;
mat4 proj;
} ubo;
layout(location = 0)in vec3 inPosition;
layout(location = 1)in vec3 inNormals;
layout(location = 2)in vec2 inTexCoord;
layout(location = 0)out vec3 fragColor;
layout(location = 1)out vec2 fragTexCoord;
out vec4 Normal;
out gl_PerVertex{
vec4 gl_Position;
};
void main()
{
gl_Position = ubo.proj * ubo.view * ubo.model * vec4 (inPosition, 1.0);
//fragColor = inColor;
fragTexCoord = inTexCoord;
Normal = ubo.proj * ubo.view * ubo.model * vec4 (inNormals, 1.0);
}
我假设您需要通过布局限定符为所有变量显式设置位置:
layout( location=<number> ) ...
Vulkan 要求所有输入、输出和统一变量都具有明确提供的位置值。着色器阶段之间的接口匹配仅通过位置值执行(与 OpenGL 相反,它可以通过名称或位置执行)。我不确定,因为我一直提供位置值,但也许在早期版本中 glslangValidator 隐式设置它们(如果位置丢失)。