我正在修改 D3D12 中使用的 HLSL 着色器以编译为 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,表示对象初始化失败
如果使用此着色器而不是编译成 SPIR-V 的 GLSL 着色器。我的 GLSL 着色器使用这样的纹理:
layout (binding = 1) uniform sampler2D textureMap;