首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SPIR-V要求在Vulkan 1.0.51.1 +中的用户输入/输出位置。

SPIR-V要求在Vulkan 1.0.51.1 +中的用户输入/输出位置。
EN

Stack Overflow用户
提问于 2017-09-03 18:37:24
回答 1查看 3.2K关注 0票数 0

我在我的计算机上安装了最新的Vulkan,无论何时,每当我想通过glslValidator.exe为我的着色器生成SPIR-V文件时,它都会失败,并返回以下错误

代码语言:javascript
复制
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更新后,有一些更改可能导致我的旧着色器失效

需要在GL_KHR_vulkan_glsl中的用户输入/输出位置(内部问题783)。

解决这个问题的正确/新方法是什么?

顶点着色机

代码语言:javascript
复制
#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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-03 18:58:18

我假设您需要通过所有变量的布局限定符显式地设置位置:

代码语言:javascript
复制
layout( location=<number> ) ...

Vulkan要求所有输入、输出和统一变量具有显式提供的位置值。着色器各阶段之间的接口匹配仅通过位置值执行(与OpenGL不同,后者可以通过名称或位置执行)。我不确定,因为我总是提供位置值,但是在早期版本中,glslangValidator可能会隐式地设置它们(如果位置丢失)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46026688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档