2017-06-02 4 views
2

内部の非バウンドサンプラーを持つことは、私は時々1 samplerから読み取る必要があると時々均一な枝

layout (set = 0, binding = 0) uniform UBO { 
    .... 
    bool useSecondTexture; 
} ubo; 
... 
void main() { 
    vec3 value0 = texture(sampler1, pos).rgb; 
    vec3 value2 = vec3(0,0,0); 
    if(ubo.useSecondTexture) { 
     value2 = texture(sampler2, pos).rgb; 
    } 
    value0 += value2; 
} 

がい均一な変数に応じて、2つの異なるサンプラーから読み取る必要があるピクセルシェーダを考えてみましょう第2サンプラー; useSecondTexturefalseの場合、テクスチャは読み取られませんが、sampler2は有効なテクスチャにバインドする必要があります。

答えて

1

vkCmdDrawvkCmdDispatchのコマンドはすべて、この有効な使用法ステートメントを持っている:彼らは静的に現在バインドVkPipelineオブジェクトによって使用されている場合vkCmdBindDescriptorSetsを経由して指定した各バインド記述子セットで

記述子は、有効である必要があり、指定されましたvia vkCmdBindPipeline

sampler2は静的に使用されるため、有効な記述子が必要です。未定義の動作が発生します。

私の推測によると、いくつかの実装では期待通りに動作します。しかし、ドライバー/ハードウェアは、パイプラインで使用される可能性があるすべての記述子が有効であることを要求することができ、何かが使用される可能性があるかどうかを判断するためにメモリーバッファの内容を検査することを必要とする。