2017-09-03 131 views
-1

上需要用戶輸入/輸出的位置我在我的電腦上安裝了最新的Vulkan SDK,每當我想通過glslValidator.exe爲我的着色器生成SPIR-V文件時,返回以下錯誤SPIR-V在Vulkan 1.0.51.1 +

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)。

什麼是解決此問題的正確/新方法?

頂點着色器

#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); 
} 

回答

0

我假設你需要通過所有的變量佈局預選賽明確設置的位置:

layout(location=<number>) ... 

福爾康要求所有的輸入,輸出和統一的變量有一個明確提供位置值。着色器階段之間的接口匹配僅通過位置值執行(與OpenGL相反,可通過名稱或位置執行)。我不確定,因爲我一直提供位置值,但也許在早期版本中,glslangValidator會隱式設置它們(如果位置丟失)。

+0

我沒有改變任何我的着色器,他們曾經從LunarG的SDK版本1.0.48.0工作,我更新了我的帖子,你可以看到我的頂點着色器,它非常簡單直接 – BulBul

+1

帶「out vec4 Normal;「缺少位置限定符。 – Ekzuzy

+0

它解決了這個問題,以及我用於良好的舊的OpenGL着色器,最初它允許在vulkan,無論如何感謝您的幫助 – BulBul