2017-09-03 2 views
-1

のユーザーイン/アウトの場所がSPIR-Vに必要です。glslValidator.exeを使用してシェイダー用のSPIR-Vファイルを生成したいときはいつでも最新のVulkan SDKをインストールしました。次のエラーにVIRKAN 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ノーマル;ロケーション修飾子がありません。 – Ekzuzy

+0

それは問題を解決しました、よく私は古い古いOpenGLシェーダに使用されていましたが、当初はvulkanで許可されていました – BulBul