Yod*_*219 2 hlsl vulkan spir-v
我正在用 C++ 编写一个体素引擎,并且正在实现一个 Vulkan 渲染器。我决定在 HLSL 中编写着色器,并通过 SPIRV-Cross 转换它们。然而,这给我带来了一个问题 - glslang 的 HLSL 编译器不允许采样器。例如,这个像素着色器:
uniform sampler2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
return tex2D(tex, uv);
}
Run Code Online (Sandbox Code Playgroud)
给出这个编译器输出:
Expected Sampled Image to be of type OpTypeSampledImage
%19 = OpImageSampleImplicitLod %v4float %17 %18
Run Code Online (Sandbox Code Playgroud)
我不知道是否应该用 GLSL 编写着色器,或者使用不同的库。任何帮助,将不胜感激。
官方的 DirectX Shader 编译器(适用于 HLSL 6 及更高版本的编译器,而不是旧的 DxCompiler)实际上支持将 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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4539 次 |
最近记录: |