#vulkan #hlsl #spir-v
Вопрос:
Я пишу воксельный движок на C и внедряю визуализатор Vulkan. Я решил написать шейдеры на HLSL и перевести их с помощью SPIRV-Cross. Однако это приводит меня к проблеме — компилятор HLSL от glslang не допускает сэмплеров. Например, этот пиксельный шейдер:
uniform sampler2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
return tex2D(tex, uv);
}
выдает этот вывод компилятора:
Expected Sampled Image to be of type OpTypeSampledImage
= OpImageSampleImplicitLod %v4float
Я не знаю, следует ли мне писать свои шейдеры в GLSL или использовать другую библиотеку. Любая помощь будет признательна.
Комментарии:
1. Используется ли HLSL
sampler2D
в качестве типа?2. @NicolBolas, насколько я знаю, да.
3. @YodaSoda1219 Никол прав, использует HLSL
SamplerState
.
Ответ №1:
Официальный компилятор шейдеров DirectX (он предназначен для HLSL 6 и выше, а не для старого DxCompiler) фактически поддерживает преобразование HLSL в SPIR-V. Смотрите их вики-страницу об этом для объяснения того, как создать компилятор с включенной этой функцией и как ее использовать.
Тем не менее, uniform sampler2D tex;
на самом деле это не HLSL, а код GLSL. В HLSL вы бы написали
SamplerState sampler;
Texture2D tex;
float4 main(float2 uv : TEXCOORD0) : COLOR0 {
return tex.Sample(sampler, uv);
}