如何同步vkCmdCopyBufferToImage()?

时间:2018-07-17 19:47:15

标签: vulkan

我需要渲染图像并将其复制回主机。我在vkCmdCopyImageToBuffer()之后立即将渲染过程的结果中的vkCmdEndRenderPass()发出到主机可读的缓冲区,它似乎可以工作,但是我担心复制在渲染完成之前开始(否则图像会过渡) )。

我是否需要执行某种同步,还是可以隐式地保证图像将过渡到所需的VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,而该@NgModule({ imports: [ BrowserModule, FormsModule, HttpModule, ReactiveFormsModule, routing, TooltipModule, Ng2BootstrapModule, TypeaheadModule, ModalModule, TinymceModule.withConfig({skin_url:appContextPath+'/assets/tinymce/skins/lightgray', baseURL:appContextPath+'/assets/tinymce', plugins: ['preview','colorpicker','textcolor','link','table','lists','advlist','image','template'], toolbar: 'preview | forecolor backcolor image | styleselect,formatselect,fontselect,fontsizeselect | tablecontrols | undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | template', file_picker_types: 'image', //problem code here templates: 'somepath', ... 发生在渲染过程的末尾,即开始复制之前?在规格中,此顺序在哪里定义?

1 个答案:

答案 0 :(得分:3)

在您构建渲染通道时,将显式指定执行渲染通道之后的图像布局。由VkAttachmentDescription::finalLayout为附加的图片指定。

对于同步,它还是由您在renderpass创建时指定的。子通道可以具有外部依赖性,它们依赖于渲染通道之前发生的事情,或者它们导致渲染通道之后依赖它们的事情。

话虽如此,如果您未指定目标子通道为VK_SUBPASS_EXTERNAL的子通道依赖关系,则会创建一个隐式依赖关系(Vulkan进行隐式同步的几次次数之一)。这种隐式依赖性将任何命令的颜色,深度和输入附件与管道底部同步。但是,由于它没有在其掩码中指定任何目标访问形式,因此它没有用,您应该提供显式的外部依赖关系。

此外,将管道底部用作目标阶段几乎没有用。