0

私は C++ でボクセル エンジンを作成しており、Vulkan レンダラーを実装しています。HLSL でシェーダーを作成し、SPIRV-Cross 経由で変換することにしました。しかし、これは私に問題をもたらします - glslang の HLSL コンパイラーはサンプラーを許可しません。たとえば、このピクセル シェーダーは次のようになります。

uniform sampler2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
    return tex2D(tex, uv);
}

次のコンパイラ出力が得られます。

Expected Sampled Image to be of type OpTypeSampledImage
  %19 = OpImageSampleImplicitLod %v4float %17 %18

GLSL でシェーダーを作成する必要があるのか​​、それとも別のライブラリを使用する必要があるのか​​わかりません。どんな助けでも大歓迎です。

4

1 に答える 1

0

公式のDirectX Shader Compiler (古い DxCompiler ではなく、HLSL 6 以降用のもの) は、HLSL から SPIR-V への変換を実際にサポートしています。その機能を有効にしてコンパイラをビルドする方法とその使用方法については、 wiki ページを参照してください。

つまり、uniform sampler2D tex;実際には HLSL ではなく GLSL コードです。HLSL では、次のように記述します。

SamplerState sampler;
Texture2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
    return tex.Sample(sampler, uv);
}
于 2021-10-14T23:43:33.817 に答える