2 차 하위 패스의 InputAttachment로 DepthBuffer를 구현하는 데 문제가 있습니다. 첫 번째 서브 패스의 깊이 정보를 사용하고 싶습니다. 이걸 어떻게 성취 할 수 있니? 다음과 같이Vulkan에서 DepthBuffer를 InputAttachment로 사용하는 방법은 무엇입니까?
내 깊이 버퍼는 설정입니다 .. 내 현재 코드 나에게 단지 빈 버퍼를 제공 보인다 :
create_info.imageType = VK_IMAGE_TYPE_2D;
create_info.format = VK_FORMAT_D32_SFLOAT;
create_info.mipLevels = 1;
create_info.arrayLayers = 1;
create_info.samples = VK_SAMPLE_COUNT_1_BIT;
create_info.tiling = VK_IMAGE_TILING_OPTIMAL;
create_info.usage = VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
나는 다음 레이아웃 전환 사용
VkImageMemoryBarrier layout_transition_barrier{};
{
barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
barrier.srcAccessMask = 0;
barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
| VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
barrier.newLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
barrier.image = image;
barrier.subresourceRange = { VK_IMAGE_ASPECT_DEPTH_BIT, 0, 1, 0, 1 };
}
이 작품을 렌더링을위한 완전히 괜찮습니다. 내가 사용하는 VkAttachmentReference는 레이아웃이 VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
이고 VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
으로 사용합니다.
내 프래그먼트 쉐이더에서 나는 아무런 성공도없이 layout (set = 0, binding = 1) uniform sampler2D inputDepth;
을 사용하여 접근했다. 정보는 모든 컬러 채널에 대해서만 제로이다. 당신이 subpasses을하고 (그리고 패스를 여러 렌더링되지 않음)하는 경우
VkSubpassDependency dependency{};
{
dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
dependency.dstStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
dependency.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
| VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
dependency.dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
dependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
}
이 descritpion
static VkAttachmentDescription depth_input_attachment{};
{
depth_input_attachment.format = VK_FORMAT_D32_SFLOAT;
depth_input_attachment.samples = VK_SAMPLE_COUNT_1_BIT;
depth_input_attachment.loadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
depth_input_attachment.storeOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
depth_input_attachment.stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD;
depth_input_attachment.stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE;
depth_input_attachment.initialLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
depth_input_attachment.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
}
음 ... 현재 코드는 무엇입니까? –
방금 내 코드의 excerts를 추가했습니다 :) – ToxiCore
여기에 일부 누락 된 코드가있는 것 같습니다. 예를 들어, 레이아웃 장벽은 이미지가 ATTACHMENT_OPTIMAL 레이아웃에 있음을 나타냅니다. 그러나 당신은'VkAttachmentReference'가 READ_ONLY_OPTIMAL 레이아웃을 지정한다고 말합니다. 그래서 우리에게 말하지 않는 레이아웃 전환이 있거나 Vulkan에 거짓말을하고 Vulkan 유효성 검사 레이어를 사용하면 이러한 오류가 발생했을 것입니다. –