我正在修改D3D12中用于编译为SPIR-V的HLSL着色器,因为我想在Vulkan中使用相同的着色器代码。这里的着色器:修改HLSL着色器以在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
或者我必须使用两个绑定插槽,一个用于质地和一个用于采样?我问,因为我的创作管道失败,错误
福尔康警告:ParameterValidation]代码:9: vkCreateGraphicsPipelines:返回VK_ERROR_INITIALIZATION_FAILED, 指示对象的初始化失败
如果使用该着色器代替编译为SPIR-V的GLSL着色器。我的GLSL着色器使用如下纹理:
layout (binding = 1) uniform sampler2D textureMap;
流水线创建是否真的失败或只有验证层抱怨失败?也许组合的图像采样器不是问题? – Ekzuzy
@Ekzuzy它也没有验证层失败,所以也许问题在别的地方。 – SurvivalMachine
为了将来的参考,我发现使用该HLSL着色器创建的PSO在AMD(驱动程序17.8.2)上失败,但适用于NVIDIA。也许这是AMD驱动程序的错误。 – SurvivalMachine