Vulkan에서 동일한 셰이더 코드를 사용하고 싶기 때문에 D3D12에서 사용되는 HLSL 셰이더를 수정하여 SPIR-V로 컴파일합니다. 다음은 셰이더입니다.
#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;
SPIR-V 및 Vulkan에 관한 한 SPIR-V와 동등한 기능이 작동해야합니다. 즉, 이미지 변수와 샘플러 변수를 모두 동일한 바인딩에 바인딩하여 사용할 COMBINED_IMAGE_SAMPLER
수 있습니다.
VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
디스크립터 세트 항목은 별도의 샘플러 및 샘플 이미지 셰이더 변수를 통해 액세스 할 수도 있습니다.
과:
컴파일되는 진입 점에서 정적으로 사용되는 모든 값이 설명자 집합 레이아웃 바인딩의 설명자 유형과 호환되는 한 여러 셰이더 변수에 동일한 설명자 집합 및 바인딩 값을 할당하는 것은 유효합니다.
결합 된 이미지 / 샘플러 설명자 유형은 이미지 및 샘플러와 모두 호환됩니다.
물론 그렇다고해서 사용중인 유효성 검사 계층이이를 알고 있다는 의미는 아닙니다.) 마지막 인용문은 사양에 대한 최근 설명에서 가져온 것이므로 계층이 올바르게 구현하지 않았을 수 있습니다.
코드가 정확하다면 버그 보고서를 제출하는 것이 좋습니다.
layout (binding = 1) uniform sampler2D textureMap;
항상 지정하는 것이 좋습니다 set
. KHR_vulkan_glsl은 기본적으로 0으로 설정되지만 명시적인 명령문이있는 것이 좋습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다