为什么我的渲染过程无法过渡到最终布局

如何解决为什么我的渲染过程无法过渡到最终布局

我目前正在尝试将imgui合并到我的vulkan应用程序中。 所以我有两个渲染通道,一个用于3d场景,一个用于imgui。 在我的3D渲染通道中,我将initialLayout设置为undefined,将finalLayout设置为attachmentOptimal。 在imgui-renderpass中,我将initialLayout设置为attachmentOptimal,将finalLayout设置为presentSrcKHR。 我还创建了以下子传递依赖项: 对于我的3d渲染通道:

  auto dependency = vk::SubpassDependency{};
  dependency.srcStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput;
  dependency.srcAccessMask = (vk::AccessFlags)0;
  dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
  dependency.dstStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput;
  dependency.dstAccessMask = vk::AccessFlagBits::eColorAttachmentWrite;
  dependency.dstSubpass = 0;

  auto ui_dependency = vk::SubpassDependency{};
  ui_dependency.srcStageMask =
    vk::PipelineStageFlagBits::eColorAttachmentOutput;
  ui_dependency.srcAccessMask = vk::AccessFlagBits::eColorAttachmentWrite;
  ui_dependency.srcSubpass = 0;
  ui_dependency.dstStageMask =
    vk::PipelineStageFlagBits::eColorAttachmentOutput;
  ui_dependency.dstAccessMask = vk::AccessFlagBits::eColorAttachmentWrite |
                                vk::AccessFlagBits::eColorAttachmentRead;
  ui_dependency.dstSubpass = VK_SUBPASS_EXTERNAL;

以及imgui-renderPass:

  auto dependency = vk::SubpassDependency();

  dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
  dependency.srcStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput;
  dependency.srcAccessMask = vk::AccessFlagBits::eColorAttachmentRead |
                               vk::AccessFlagBits::eColorAttachmentWrite;

  dependency.dstSubpass = 0;
  dependency.dstStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput;
  dependency.dstAccessMask = vk::AccessFlagBits::eColorAttachmentWrite;

  auto extern_dependeny = vk::SubpassDependency{};

  extern_dependeny.srcSubpass = 0;
  extern_dependeny.srcStageMask =
  vk::PipelineStageFlagBits::eColorAttachmentOutput;
  extern_dependeny.srcAccessMask = vk::AccessFlagBits::eColorAttachmentRead |
                                     vk::AccessFlagBits::eColorAttachmentWrite;

  extern_dependeny.dstSubpass = VK_SUBPASS_EXTERNAL;
  extern_dependeny.dstStageMask =
  vk::PipelineStageFlagBits::eColorAttachmentOutput;

  extern_dependeny.dstAccessMask = vk::AccessFlagBits::eMemoryRead;

所以我认为我正确定义了渲染通道的依赖关系。 但是,当我提交两个命令缓冲区时,一个用于3d场景,一个用于imgui,验证层告诉我:

VUID-VkPresentInfoKHR-pImageIndices-01296(错误/ SPEC):msgNum:-945112042-验证错误:[VUID-VkPresentInfoKHR-pImageIndices-01296]对象0:句柄= 0x55eeaedf2f90,名称= present_queue,类型= VK_OBJECT; | MessageID = 0xc7aabc16 | vkQueuePresentKHR():传递给当前的图像必须位于布局VK_IMAGE_LAYOUT_PRESENT_SRC_KHR或VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR中,但位于VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL中。 Vulkan规范指出:pImageIndices的每个元素必须是从由pSwapchains数组的相应元素指定的交换链获取的可显示图像的索引,并且在执行操作时,所显示的图像子资源必须位于VK_IMAGE_LAYOUT_PRESENT_SRC_KHR布局中VkDevice(https://github.com/KhronosGroup/Vulkan-Docs/search?q=)VUID-VkPresentInfoKHR-pImageIndices-01296)

请注意,我确实提交了带有两个信号量的命令缓冲区,分别带有colorAttachmentOutputBottomOfPipe的流水线阶段标志。

在我的出席演讲中,我将这两个信号作为等待信号传递。 有人在我的子通道依赖项中看到明显的错误,该错误会导致这种错误的行为吗?如果其他问题可能导致此错误(我在这里没有提到),请告诉我,我将很乐意提供相应的代码节。

解决方法

原来,我在代码的一部分中做的非常愚蠢,没有立即连接到任何渲染通道。

在检索新框架的索引之前,我基本上要求提供当前框架的与ui相关的VkCommandBuffer。这意味着我重新记录并重新提交了VkCommandBuffer,它尚未完成对上一帧的ui渲染。

这还引发了以下验证错误,起初我并没有立即发现该错误(事后看来很愚蠢)

VUID-vkResetCommandPool-commandPool-00040(ERROR / SPEC):msgNum:-1254218959-验证错误:[VUID-vkResetCommandPool-commandPool-00040]对象0:句柄= 0x55f944a47040,名称= ui_cmd_buffer_0,类型= VK_OBJECT_TYPE | MessageID = 0xb53e2331 |尝试使用正在使用的VkCommandBuffer 0x55f944a47040 [ui_cmd_buffer_0]重置命令池。 Vulkan规范指出:从commandPool分配的所有VkCommandBuffer对象都不得处于挂起状态(https://vulkan.lunarg.com/doc/view/1.2.148.0/linux/1.2-extensions/vkspec.html#VUID-vkResetCommandPool-commandPool-00040) 对象:1 [0] 0x55f944a47040,类型:6,名称:ui_cmd_buffer_0

所以我想外卖是: 如果您确定子传递相关性以及渲染传递的initialLayoutfinalLayout的规范很好,请查看与vkQueueSubmit和{{ 1}},这可能会造成麻烦。

在我的情况下,它是重新提交的vkQueuePresentKHR,但是您的栅栏或信号灯中的问题(试图渲染为仍由前一帧呈现/呈现的交换链图像)也可能导致这样的问题。

如果您遇到多个验证错误,那么假设它们之间存在联系,并尝试确定哪个错误可能导致另一个错误,可能不是一个坏主意。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res