我執行我的DepthBuffer作爲輔助子通道的InputAttachment時遇到了一些麻煩。我想使用我的第一個子通道的深度信息。我怎樣才能實現這一點?看來,我當前的代碼給了我只是一個空的緩衝區..如何在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;
來訪問它,但沒有任何成功..我得到的信息只是任何顏色通道的零。
而且我用這種依賴性:
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;
}
那麼......你目前的代碼是什麼? –
剛剛添加了我的代碼優秀:) – ToxiCore
這裏似乎有一些缺少的代碼。例如,您的佈局障礙表示圖像處於ATTACHMENT_OPTIMAL佈局。但是你說'VkAttachmentReference'指定了READ_ONLY_OPTIMAL佈局。因此,無論是您沒有告訴我們的佈局轉換,還是您對Vulkan的說謊以及您應該使用的Vulkan驗證層都應該捕捉到這些錯誤。 –