Я модифицирую шейдер HLSL, используемый в D3D12, для компиляции в SPIR-V, потому что я хочу использовать тот же код шейдера в Vulkan. Вот шейдер:
#if !VULKAN
#define layout(a)
#else
#define register(a) blank
#endif
struct VSOutput
{
float4 pos : SV_Position;
float2 uv : TEXCOORD;
float4 color : COLOR;
};
layout(binding=1) Texture2D<float4> tex : register(t0);
layout(binding=1) SamplerState sLinear : register(s0);
float4 main( VSOutput vsOut ) : SV_Target
{
return tex.SampleLevel( sLinear, vsOut.uv, 0 ) * vsOut.color;
};
Могу ли я использовать одну и ту же привязку как для текстуры, так и для сэмплера, если мой дескриптор, установленный в индексе 1, имеет тип VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
, или я должен использовать два слота привязки, один для текстуры и один для сэмплера? Я спрашиваю, потому что при создании конвейера возникла ошибка
Предупреждение Vulkan: [ParameterValidation], код: 9: vkCreateGraphicsPipelines: вернул VK_ERROR_INITIALIZATION_FAILED, что указывает на сбой инициализации объекта
при использовании этого шейдера вместо шейдера GLSL, скомпилированного в SPIR-V. Мой шейдер GLSL использует такую текстуру:
layout (binding = 1) uniform sampler2D textureMap;