Je modifie un shader HLSL utilisé dans D3D12 pour compiler vers SPIR-V parce que je veux utiliser le même code de shader dans Vulkan. Voici le shader:Modification d'un shader HLSL pour travailler dans Vulkan, dois-je séparer les textures/samplers?
#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;
};
Puis-je utiliser la même liaison pour les textures et sampler si mon descripteur défini à l'index 1 est de type VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
ou dois-je utiliser deux emplacements de liaison, l'un pour la texture et un pour l'échantillonneur? Je demande parce que ma création de pipeline échoue avec l'erreur
avertissement Vulkan: [ParameterValidation], code: 9: vkCreateGraphicsPipelines: retour VK_ERROR_INITIALIZATION_FAILED, indiquant que l'initialisation d'un objet a échoué
si utiliser ce shader au lieu d'un shader GLSL compilé dans SPIR-V. Mon shader GLSL utilise la texture comme ceci:
layout (binding = 1) uniform sampler2D textureMap;
La création de pipeline échoue-t-elle réellement ou seules les couches de validation se plaignent-elles de l'échec? Peut-être que l'échantillonneur d'images combiné n'est pas un problème? – Ekzuzy
@Ekzuzy Il échoue également sans couches de validation, alors peut-être que le problème est ailleurs. – SurvivalMachine
Pour référence future, j'ai découvert que ma création PSO avec ce shader HLSL échoue sur AMD (pilote 17.8.2) mais fonctionne sur NVIDIA. Peut-être que c'est un bug avec le pilote AMD. – SurvivalMachine