Vulkan 管道顶部/底部和 ALL_COMMANDS

2024-03-28

作为很多“初学者”,我认为使用 TOP_OF_PIPELINE 作为 dst 和 BOTTOM_OF_PIPELINE 作为 src 意味着两者的 ALL_COMMANDS 。

Here https://github.com/KhronosGroup/Vulkan-Docs/issues/128#issuecomment-197475409Nicol Bolas 写道,“由于管道的顶部/底部对内存屏障没有任何意义,也许使用它们应该完全无效。因此仅对执行屏障有用。”

据我了解,由于 TOP 和 BOTTOM 不执行任何对内存的访问,因此将屏障放在顶部或底部不能使内存可见^^。

据我了解 Nicol Bolas 的含义以及我刚才所说的内存访问/可见性,当您使用底部或顶部时,必须将 accessMask 设置为 0。

如果我想呈现图像,我可以这样做:

srcStage = COLOR_ATTACHMENT_OUTPUT_BIT
srcAccess = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
oldLayout = ATTACHMENT_OPTIMAL
dstStage = BOTTOM
dstAccess = 0; // Since memory read access will be "issued" by semaphore
newLayout = PRESENT_KHR;

我们在这里使用底部是因为我们不希望内存屏障使当前队列等待,如规范中所述:

当下一个访问将在不同的队列中或由表示引擎完成时,VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT 对于完成内存屏障和布局转换很有用;在这些情况下,同一队列中的后续命令不需要等待,但屏障或转换必须在与批处理信号关联的信号量之前完成。

所以现在,我可以说(我希望...)我了解何时使用每个阶段,但 TOP_OF_PIPE nop...

所以,我有以下问题: 执行屏障到底是什么(因此没有内存屏障)?它们为什么有用? (因为说一个操作一个接一个地发生很好,但最好说我们可以在第二个操作中使用第一个操作中产生的数据)。 什么时候应该在管道底部或顶部放置屏障?

谢谢 !


执行屏障到底是什么(因此没有内存屏障)?

这正是规范所说的:它会阻止操作的执行,直到先前发出的操作完成为止。

它们为什么有用? (因为说一个操作一个接一个地发生很好,但最好说我们可以在第二个操作中使用第一个操作中产生的数据)。

你假设消耗数据是您可能等待的唯一东西。

例如,假设您正在传输一些纹理数据。嗯,在该纹理的所有使用完成之前,您无法开始执行到该纹理内存的复制。但你不是消耗这些过程正在生成什么;您只需要等待这些过程完成即可。

这就是纯粹的执行障碍的用途。


由于1.0.35已经明确了管道的含义,因此TOP和BOTTOM的含义更加明确。

具体说明是,无论您为源和目标指定哪个管道阶段,都指定该阶段及其之前/之后的所有阶段。因此,如果您指定片段着色器作为源,那么在它之前执行的所有阶段也是该屏障的一部分。如果您指定顶点着色器作为目标,那么它之后的所有阶段也将在同步后执行。

因此,BOTTOM 作为源意味着在先前命令的所有阶段之后。 TOP 作为目标意味着在后续命令的所有阶段之前。 BOTTOM 作为目的地没有任何实际意义,TOP 作为源也没有实际意义。


注意:最近的规格更改已澄清顶部/底部...根本不是实际阶段。叹。

相反,这些“阶段”被指定为“所有阶段”或“无阶段”,具体取决于它们是指定源范围还是目标范围。 TOP 表示作为目标作用域时的所有阶段,而 BOTTOM 表示作为源作用域时的所有阶段。

基本上,它的含义与之前相同,但在 Vulkan 执行模型中没有任何特定的想法,即有一个阶段是所有阶段的开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vulkan 管道顶部/底部和 ALL_COMMANDS 的相关文章

  • 初识Vulkan渲染管线

    目前参考 Vulkan规范 和 Vulkan开发实战详解 对渲染管线有了一个初步的认识 现结合中英文的渲染管线图进行笔记整理 中英文的渲染管线图分别如下所示 xff1a 绘制命令送入设备队列执行后 xff0c Vulkan将原始的物体顶点坐
  • 支持Vulkan的移动GPU

    去年差不多这个时候 Vulkan标准发布 NVIDIA和AMD随之发布了显卡的Vulkan驱动 虽然都是实验版本 但是毕竟能够工作的 Intel的速度就慢了不少 时隔一年 Intel终于推出了Vulkan认证的驱动 虽然之前就有了实验性质的
  • Vulkan® A Specification Core And Extension::Vulkan文档核心部分和扩展部分对照与翻译说明

    2020 7 1 更 修改和完善某些描述 Vulkan版本 1 2 137 1 2 145 Vulkan文档分成两种 核心部分 核心部分 扩展部分 核心部分是必定要翻译的 对于扩展部分 本人并不是所有扩展都见过 所以对于扩展部分尽可能的翻译
  • ray tracing of Embree

    GitHub embree embree Embree ray tracing kernels repository Intel Embree is a collection of high performance ray tracing
  • 【PBR系列三】BRDF方程及渲染方程

    本文核心知识主要参照 现代计算机图形学入门 闫令琪课程课件PPT 后续光线追踪系列知识也源于此处 一 BRDF方程 通过上一部分所有辐射度量学各种概念的定义之后 我们可以从这样一个角度理解光线的反射 如下图所示 一个点 微分面积元 在接受到
  • 备忘一下,vulkan android sample 编译错误:ninja: error: libshaderc.a', needed by

    又要编译vulkan API Sample 每次找这行命令要用很久 备个忘 不编译shaderc的对应的编译错误为 Build command failed Error while executing process C Users hon
  • [Vulkan教程] 一: 创建VkDevice

    这个系列的文章是写给对已有的D3D11和GL比较熟悉并理解多线程 资源暂存 同步等概念但想进一步了解它们是如何以Vulkan实现的读者 文章并不追求通俗易懂 里面有很多术语 为了解里面的晦涩内容 建议去阅读Vulkan规范或者更深度的教程
  • Vulkan【15】图形管线(Graphics Pipline)

    创建图形管线 本节的代码是 14 init pipeline cpp 你越来越接近把这些拉到一起来渲染一个立方体 下一步是通过设置图形管道来配置GPU来进行渲染 一个图形管线由着色阶段 管线布局 渲染过程和固定功能管线阶段组成 您在前面的部
  • 关于 Vulkan 简介 —— Android N 引入新的 3D 渲染引擎

    关于 Vulkan Vulkan 被视作是 OpenGL 的后续产品 它是一种多平台 API 可支持开发人员准备游戏 CAD 工具 性能基准测试等高性能图形应用 它可在不同的操作系统 比如 Windows Linux 或 Android 上
  • Vulkan再探(11):立方体贴图数组

    08 20 2020 文章目录 立方体贴图数组 创建纹理贴图 图像 拷贝区域 图像视图 着色器 片元着色器 立方体贴图数组 创建纹理贴图 提取信息 cubeMapArray width ktxTexture gt baseWidth cub
  • 使用 vkEnumerateInstanceVersion 获取准确的 Vulkan API 版本

    我在用vkEnumerateInstanceVersion获取 vulkan api 版本并将其传递给VkApplicationInfo结构 我可以轻松区分VK VERSION 1 0 and VK VERSION 1 1 query th
  • 使用 CMake 和 conan 包管理器正确设置 Vulkan、glfw 和 spdlog

    我正在开发 Vulkan API 的渲染器 我在使用 CMake 和 conan 包管理器正确设置项目时遇到了很大的麻烦 让我们看一下我的 conanfile py 的依赖设置 from conans import ConanFile CM
  • 使用管道屏障代替信号量

    我想确保我正确理解管道障碍 因此 只要第二个屏障的源阶段晚于第一个屏障的目标阶段 屏障就能够同步两个命令缓冲区 它是否正确 当然 如果命令缓冲区在管道的不同迭代期间执行 我将需要使用信号量 在我看来 同步是 Vulkan 中最难掌握的部分
  • “VkVertexInputBindingDescription”中“绑定”的目的是什么?

    https www khronos org registry vulkan specs 1 0 man html VkVertexInputBindingDescription html https www khronos org regi
  • 了解 Vulkan 统一布局的“集合”索引

    我一直在关注 非常棒的 nvpro 光线追踪教程 并且对使用 CameraProperties 统一缓冲区的绑定方式有疑问layout binding 0 set 1 我理解绑定 0 但为什么设置 1 教程中说 set 1来自以下事实 它是
  • 在 Vulkan 中重新绑定图形管道是否保证无操作?

    在简化的场景中 每个要渲染的对象都被转换为辅助命令缓冲区 并且每个命令缓冲区最初都绑定一个图形管道 是否可以保证无操作来绑定之前立即绑定的管道 或者辅助命令缓冲区的执行顺序根本无法保证 是否可以保证无操作来绑定之前立即绑定的管道 不 事实上
  • Vulkan 内存对齐要求

    我正在为 Vulkan 设备内存实现一个简单的内存管理器 并希望确保我了解内存的对齐要求以及如何满足这些要求 因此 假设我使用 vkAllocateMemory 分配了一个内存 池 并希望将该池中的内存块子分配给各个资源 基于 VkMemo
  • 升级到1.2.162.1后:vkQueueWaitIdle == VK_ERROR_DEVICE_LOST

    我最近将光线追踪渲染器从 Vulkan SDK 版本 1 2 148 0 升级到 1 2 162 1 这是必要的 因为光线追踪扩展已经结束测试版 因此现在可以与非测试版一起使用 显卡驱动程序 我的 RTX 2070 SUPER 的版本为 4
  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup
  • Vulkan:在多个命令缓冲区中排序图像内存屏障

    对于资源转换 您需要了解 之前 和 之后 VkImageLayout资源的 例如 在VkImageMemoryBarrier传递给vkCmdPipelineBarrier Vulkan 不保证命令缓冲区执行的任何顺序 除非 API 文档中明

随机推荐

  • x86 中不同数学函数的性能?

    我正在编写 3D 碰撞 想知道基本数学函数 如 sqrt pwr 三角函数 如 sin cos tan arcsin 的性能差异 我听说这取决于许多其他因素 所以我只是想粗略地了解哪一个速度较慢并且需要避免 同时寻找不同的方法来解决问题 我
  • 如何在实体框架中使用数据库优先方法来使用存储库模式

    如何在实体框架中使用数据库优先方法来使用存储库模式 我在浏览互联网上可用的资源时得到了一些想法 但对于实时应用程序 我不确定如何在从数据库优先方法自动生成的类上实现存储库模式 我已经浏览过 SO 中的一些链接 但我没有得到任何明确的想法 我
  • Node.js fs.unlink 函数导致 EPERM 错误

    我在用着fs unlink 删除文件 我收到以下错误 uncaught undefined Error EPERM Operation not permitted Path To File 有人知道为什么会发生这种情况吗 您无法删除不为空的
  • DynamoDB:如何使用查询过滤器检查 MAP 中的条件

    我有一张表 结构如下 当我进行查询时 我希望能够对数据图进行查询过滤 但我不太确定如何设置查询 这是我到目前为止所拥有的 HashMap
  • 如何通过 ASP.NET Core/Razor 单击按钮来运行在 Razor 页面上编写的 C#?

    我想在单击页面上的按钮时执行我直接在 razor 页面上编写的 C 方法 我发现 如果我引用了页面上的按钮 它会在第一次加载时执行该方法 但当我实际单击该按钮时 它不会再次执行 这是代码 Razor 页面 C 参考 functions in
  • Go 1.13 RSS持续增加,疑似清理问题

    我们的一项 Go 服务中的 RSS 不断增加 我们怀疑这是由于 scavenger 没有正确地将内存返回给操作系统 或者操作系统由于使用 MADV FREE 而没有收回内存 通过 pprof 检查 未检测到内存泄漏 我们尝试使用以下简单的
  • Facebook API - 无法获取页面个人资料图像

    我有一个页面无法从中获取公共个人资料图像 为什么会这样 为什么会发生 有问题的页面是 警告 脱衣舞娘的 NSFW 风格图像 真的很抱歉 我只能找到示例 无论如何都不需要查看该页面 https www facebook com pages T
  • Java Applet 不缓存

    我部署的 Java 小程序有问题 该小程序拒绝缓存在 jvm 的 粘性 缓存 或浏览器 中 由于某种原因 每次用户加载该小程序所在的页面时 jvm 都会从服务器重新下载 jar 文件 这会导致长时间延迟 包含该小程序的网页是通过互联网访问的
  • 如何在 Windows 机器上构建或安装 freeglut

    我下载了freeglut http freeglut sourceforge net 我正在阅读安装指示 http freeglut sourceforge net docs install php 我提取了所有文件 我看到一个名为conf
  • 无服务器框架Python lambda直接返回JSON

    我试图找出如何使用无服务器框架直接以 JSON 形式返回响应 这是 AWS 上具有 Lambda 代理集成的功能 全部默认设置 目标是从 python lambda 函数中 HTTP 响应客户端直接获取的是 JSON 对象 而不是 JSON
  • 在javascript中访问数组中的数组

    我收到一个 JSON 回复 如下所示 order id 12 customer user user status Pending date added 02 09 2012 total 500 00 action text View hre
  • 如何使用回调来保证顺序执行?

    我正在尝试围绕回调进行思考 但我不明白回调是如何进行的保证将执行一条语句之后 就时间而言 另一个声明需要一个unknown多少时间 我不在乎承诺 等待 异步等但只是我想学习的简单回调 例如下面的例子 我的方法将在未知时间事件发生之前执行回调
  • 从网页中的 servlet 读取 Quicktime 电影?

    我有一个 Servlet 它通过从服务器读取文件来构造对媒体文件请求的响应 File uploadFile new File C TEMP movie mov FileInputStream in new FileInputStream u
  • 如何创建使用 ng-model 的角度日期选择器指令

    我为 jQuery UI 日期选择器创建了一个角度指令 问题是 当选择日期时 指令不会更新输入的 ng model 知道为什么吗 http jsbin com ufoqan 1 edit http jsbin com ufoqan 1 ed
  • 最小化/小型化可可 NSWindow 没有标题栏

    我被困住了 显然 因为我在这里发布了一个问题 我为我的 OS X cocoa 应用程序构建了自己的自定义窗口控件 关闭按钮效果很好 没问题 当我禁用标题栏时 最小化按钮根本不起作用 因此 当标题栏像上图一样打开并且我点击此方法时 最小化效果
  • 查询谷歌电子表格的特定工作表

    我正在尝试使用谷歌电子表格作为临时数据库 我已按照以下教程中的说明进行操作 一切正常 http www alatechsource org blog 2012 05 using the google spreadsheets data ap
  • PHP:如何自动加载接口和摘要

    我有这个自动装载机要自动加载的类classes最初 但现在我想自动加载interfaces and abstracts以及 所以我做了以下改变answer https stackoverflow com questions 7924782
  • 在 PHP echo 中嵌入 javascript

    echo td manuf td 上面的这个行得通吗 我正在从 mysql 数据库中提取结果来编辑内容 但需要 jQuery 功能来编辑它 因此嵌入了 javascript 变量 EDIT 抱歉 缺乏上下文 它与我在这里提出的另一个问题有关
  • 无法使用 ggsurvplot 从列表中使用 survfit 对象绘制 kaplan-meier 曲线

    我正在尝试使用 survminer 包中的 ggsurvplot 绘制 Kaplan Meyer 曲线 当我传递保存在列表中的 survfit 对象时 我无法绘制它 让我以肺部数据集为例 一切正常如下 library survival li
  • Vulkan 管道顶部/底部和 ALL_COMMANDS

    作为很多 初学者 我认为使用 TOP OF PIPELINE 作为 dst 和 BOTTOM OF PIPELINE 作为 src 意味着两者的 ALL COMMANDS Here https github com KhronosGroup