VkAttachmentDescription中的"loadOp"是什么时候执行的?

When the "loadOp" in VkAttachmentDescription is executed?

我正在创建一个使用简单阴影贴图渲染阴影的应用程序。

传球是这样完成的: 离屏通道创建阴影贴图 -> 最后通道渲染到交换链并使用前通道的深度纹理

我的问题是第一次通过。我使用单个顶点着色器渲染模型并仅关联深度纹理。 在管道中,我只有一个附件:

VkAttachmentDescription depthAttachment = {};
depthAttachment.format = m_depthFormat;
depthAttachment.samples = m_msaaSamples;
depthAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
depthAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
depthAttachment.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
depthAttachment.finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL;

这里我把"loadOp"设置为VK_ATTACHMENT_LOAD_OP_CLEAR但是好像是在第二遍执行之前就完成了操作。 将 "loadOp" 设置为 VK_ATTACHMENT_LOAD_OP_DONT_CARE 适用于 IntelHD 显卡,但不适用于 Nvidia 显卡。

我不确定 "loadOp" 何时执行。

感谢您的帮助!

这个问题是由于明确的价值观。

我使用了 2 个明确的值:

std::array<VkClearValue, 2> clearValues = {};
clearValues[0].color = { 0.0f, 0.0f, 1.0f, 1.0f };
clearValues[1].depthStencil = { 1.0f };

正确的清除只有深度清除:

std::array<VkClearValue, 1> clearValues = {};
clearValues[0].depthStencil = { 1.0f };