Vulkan 描述符绑定

2023-12-10

在我的 vulkan 应用程序中,当所有网格使用相同的纹理时,我曾经这样绘制网格

Updatedescriptorsets(texture)

Command buffer record
{
 For each mesh
        Bind transformubo
        Draw mesh
}

但现在我希望每个网格都有独特的纹理,所以我尝试了这个

Command buffer record
{
 For each mesh
        Bind transformubo
        Updatedescriptorsets (textures[meshindex])
        Draw mesh
}

但它给出了一个错误,说明描述符集已被破坏或更新。我查看了 vulkan 文档,发现我无法在命令缓冲区记录期间更新描述符集。那么如何才能为每个网格提供独特的纹理呢?


vkUpdateDescriptorSets与任何事物都不同步。因此,您无法在使用描述符集时更新它。您必须确保使用相关描述符集的所有渲染操作均已完成,并且未将任何命令放置在使用相关描述符集的命令缓冲区中。

它基本上就像一个全局变量;如果没有某种同步,您就无法让人们从多个线程访问全局变量。而且 Vulkan 不会同步对描述符集的访问。

有几种方法可以解决这个问题。您可以为每个对象提供其自己的描述符集。这通常是通过使频繁改变的描述符集数据具有比不频繁改变的数据更高的索引来完成的。这样,您就不必更改每个对象的每个描述符,而只需更改每个对象的描述符。

您可以使用推送常量数据来索引大型表/数组纹理。因此描述符集将具有一个纹理数组或一个纹理数组(如果您有纹理数组的动态索引)。推送常量将提供一个索引,着色器使用该索引从纹理数组/纹理数组中获取特定对象的纹理。这使得频繁的更改相当便宜,并且相同的索引也可以用于为每个对象提供自己的变换矩阵(通过获取矩阵数组)。

如果您有可用的扩展 VK_KHR_push_descriptor,那么您可以将对描述符的更改直接集成到命令缓冲区中。这比推送常量机制好多少当然取决于实现。

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

Vulkan 描述符绑定 的相关文章

  • 从Gles、Vulkan到Metal(一)-- 数据和提交

    无论以任何形式本篇文章内容 请注明来自leonnwei的csdn blog 引言 一直想整理下关于移动端图形编程API的文档 图形API为何重要 如果说图形编程的内功是计算机图形学的诸原理和算法 那么外功就是实实在在的硬件API 不能精通A
  • Vulkan-程序结构

    程序结构 一般来说 完整的Vulkan程序包含 创建Vulkan实例 获取物理设备列表创建逻辑设备 创建命令缓冲 获取设备中支持图形工作的队列 初始化交换链 创建深度缓冲 创建渲染通道 创建帧缓冲 创建绘制对象 初始化渲染管线 创建栅栏和初
  • Vulkan同步机制和图形-计算-图形转换的风险(二)

    利用乒乓机制的交错队列减少风险 在本篇文章中 我们将提到Vulkan 图形处理过程中夹杂计算任务时遇到的各式问题 为更准确地了解我们的话题 可查看文章第一部分 第一部分概述了在Vulkan中如何使用barrier 具体来说 涉及图形 计算b
  • GLSL-TBN矩阵

    TBN矩阵 一 简述 1 1 TBN矩阵作用 我们研究一个矩阵的时候通常需要了解一个矩阵是从哪一个空间或者说矩阵而来的 如果搜索一下TBN矩阵运算公式可以发现其决定于物体坐标系下的顶点和纹理坐标系下的纹理坐标 想到这里我们需要明确TBN运算
  • Vulkan再探(11):立方体贴图数组

    08 20 2020 文章目录 立方体贴图数组 创建纹理贴图 图像 拷贝区域 图像视图 着色器 片元着色器 立方体贴图数组 创建纹理贴图 提取信息 cubeMapArray width ktxTexture gt baseWidth cub
  • Vulkan再探(7):纹理贴图

    08 20 2020 文章目录 纹理贴图 Texture Mapping 纹理属性 加载图片 临时缓冲区储存图片信息 生成贴图等级 生成图像和存储空间 难点 传输数据 图解 拷贝缓冲区到图像 创建采样器 创建图像视图 创建组合图像采样器描述
  • Vulkan 的 VkAllocationCallbacks 使用 malloc/free() 实现

    我正在阅读Vulkan 内存分配 内存主机似乎 VkAllocationCallbacks 可以使用简单的 malloc realloc free 函数来实现 typedef struct VkAllocationCallbacks voi
  • 为什么我们需要多个渲染通道和子通道?

    我过去有过使用 DirectX12 的经验 但我不记得 Vulkan 中类似渲染通道的东西 所以我无法进行类比 如果我理解正确 则同一子通道内的命令缓冲区不需要同步 那么为什么要复杂化并制作多个呢 为什么我不能只使用一个命令缓冲区并将所有与
  • Wat 执行“vkCreateSwapchainKHR:内部可绘制对象创建失败”。方法

    我总是卡在交换链的创建上 我不知道为什么 我启用了验证层 我得到的最好的答案是 vkCreateSwapchainKHR 内部绘图创建失败 我有一张 Nvidia GTX960 卡 我在它上面运行了一些 vulkan 样本 所以它必须支持
  • 使用 vkEnumerateInstanceVersion 获取准确的 Vulkan API 版本

    我在用vkEnumerateInstanceVersion获取 vulkan api 版本并将其传递给VkApplicationInfo结构 我可以轻松区分VK VERSION 1 0 and VK VERSION 1 1 query th
  • Vulkan 中的每个交换链图像、每个帧或每个命令池是否需要专用的栅栏/信号量?

    我读过几篇关于 CPU GPU 使用栅栏 和 GPU GPU 使用信号量 同步机制的文章 但仍然无法理解应该如何实现简单的渲染循环 请看一下简单的render 下面的函数 如果我没猜错的话 最低要求是确保 GPU GPU 之间的同步vkAc
  • 如果“buffer”是“coherent”,那么读取字段或执行“atomicAdd(field, 0)”之间有什么区别吗?

    这是 Vulkan 语义 如果有什么不同的话 假设如下 layout coherent buffer B uint field b 假设该字段正在被同一着色器 或派生着色器 的其他调用修改atomic 功能 如果着色器调用想要从中执行原子读
  • 了解 Vulkan 统一布局的“集合”索引

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

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

    假设我有一个交换链 其中包括n图像和我允许k 飞行中的帧 我确保之间的正确同步vkAcquireNextImageKHR vkQueueSubmit and vkQueuePresentKHR通过一组信号量imageAvailableSem
  • 升级到1.2.162.1后:vkQueueWaitIdle == VK_ERROR_DEVICE_LOST

    我最近将光线追踪渲染器从 Vulkan SDK 版本 1 2 148 0 升级到 1 2 162 1 这是必要的 因为光线追踪扩展已经结束测试版 因此现在可以与非测试版一起使用 显卡驱动程序 我的 RTX 2070 SUPER 的版本为 4
  • Vulkan:在多个命令缓冲区中排序图像内存屏障

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

    Summary 我希望能够测量 GPU 上运行整个图形管道所花费的时间 以毫秒为单位 目标 能够在优化代码之前 之后保存基准 下一步将是 mipmap 纹理 以查看改进 这在 OpenGL 中非常简单 但我是 Vulkan 新手 需要一些帮
  • vulkan 扩展:哪些由谁支持?

    有EXT KHR or AMD or NV扩展 也许还有其他一些 我知道NV means NvidiaAMD 不太可能支持 it nv 扩展 但是 khr 或 ext 又如何呢 他们是所有人都强制支持的吗 有一个website https
  • 我们可以在Android平台上将Vulkan与Java Activity一起使用吗

    目前 似乎所有 Vulkan 教程和示例都使用 Android 平台上的 NativeActivity 我想知道我们是否可以在 Android 上将 Vulkan 与 Java Activity 一起使用 假设您有一个 C 类 它封装了 V

随机推荐

  • 在可序列化对象上获取 NotSerializedException

    基本上 我编写了一个程序 将形状绘制到屏幕上 并将每个形状保存到 ArrayList 中 我想要做的是弄清楚如何将 ArrayList 保存到文件中 以便我可以稍后调用它并编辑已经存在的形状 因此 当我已经将对象 Shape 可序列化时 我
  • 在 HTML 页面上并排显示两个图像

    我试图并排放置两个相同大小的图像 如果我使用一个table然后我就可以并排显示两个图像 但在我的 CSS 样式表中 我对表格使用了自定义格式 这也显示在包含图像的页面上 我想只显示两个图像 没有任何自定义背景 边框等 我尝试使用div sp
  • 字符串前面的 b 有何作用?

    binary b Binary string 创建一个字符串会产生什么后果binary 我在文档中找不到任何关于此的提示 刚刚在浏览 language scanner 时发现了这个小小的好奇心 这是永远不会发布的 PHP 版本 6 的前向兼
  • 是否有另一种方法在工作人员中加载额外的包(并行计算)?

    R 中并行化的一种方法是通过snowfall包裹 要将自定义函数发送给工作人员 您可以使用sfExport 参见乔里斯的帖子here 我有一个自定义函数 它依赖于非基本包中未自动加载的函数 因此 当我并行运行我的函数时 R 会崩溃 因为某些
  • 使用 iText 提取文本不起作用:编码或加密文本?

    我有一个 pdf 文件 其安全属性如下 打印 允许 文件组装 不允许 内容复制 允许 可访问性内容副本 允许 页面提取 不允许 我尝试获取带有示例代码的文本作为文档示例 如下所示 pdftext Text null StringBuilde
  • Rails 3 public_activity,销毁记录

    我正在使用公共活动如果用户创建帖子 则进行 gem 跟踪 有没有办法在删除帖子时销毁公共活动记录 以便在活动源中不会显示类似以下内容的内容 A post was deleted 而只是删除活动表中的特定活动 Thanks 我认为这就是OP正
  • 通过 CURL POST JSON 数据并抓取它

    我正在尝试传递 json 数据作为 cURL POST 的参数 然而 我坚持抓住它并将其保存在数据库上 卷曲文件 data array name gt Hagrid age gt 36 data string json encode dat
  • 在面板上绘制 Html 表格?

    如何生成常规的 html table 在 Sencha Touch 2 的面板上 每行的数据可能来自商店 它不像列表那样非常 移动 但我想在我的平板电脑应用程序上有一些详细面板 其中包含如下几个部分 header 1 table tr td
  • Codeigniter多个文件上传路径

    我正在构建一个应用程序 需要获取上传的文件并将它们放在单独的缩略图和全尺寸图像目录中 但是 config upload path uploads 只允许我选择一个上传路径 如何定义两个或多个上传路径 实际上您需要做的就是 重新初始化 上传类
  • 为什么 Laravel 或 Beanstalkd 会跳槽?

    我正在管理音频转换Laravel 队列 and 豆茎 监测者监督者 当用户上传音频文件时 它会转到AudioController php这会触发一个Queue push AudioProcess 它本身会触发exec sh some scr
  • JavaScript 从嵌套对象获取值[重复]

    这个问题在这里已经有答案了 如果这是我的目标 var obj bakery1 small name Small cookie price 0 75 large name Large cookie price 3 00 bakery2 sma
  • 使用 if 语句查找特定值

    您好 我在 Excel 中有一个很大的产品订单数据集 并且它将不断增长 数据集看起来像这样 Product Date Lsat24 Next24 Summary Buyer day1 AX1 2 1 2019 Checking invent
  • 在主线程上继续执行任务

    如果这是一个简单的问题 请原谅我 我无法用足够通用的方式来表达它来寻找答案 考虑这段代码 var task Task Factory StartNew gt Whatever task ContinueWith Callback TaskS
  • 递归 CTE - 获取后代(多对多关系)

    我拥有的 给定一棵树 或更类似于有向图 描述系统如何由其通用部分组成 现在让这个系统例如人体及其身体部位的节点 例如3可能是有左叶和右叶的肝脏 6 and 9 两者都有静脉 8 也可以在肝脏的任何未指定的位置找到 因此8 gt 3 而且也在
  • 如何快速从照片库中获取图像或电影路径

    我有这段代码 但在尝试获取图像路径时遇到问题 我在 google 和 stack over flow 中搜索 但我找到的解决方案是 Objective C 或在 swift 中不再工作的代码 这是我的代码 IBAction func cho
  • 如何使用 jQuery 为表格制作下拉列表过滤器?

    我想在特殊列中创建下拉表过滤器 例如我想为 已婚 列创建过滤器并从下拉列表中选择是或否 这是我的表 我需要一个 jquery 代码来帮助我制作过滤器 table class table table bordered table stripe
  • SQL分区在mysql中使用“不存在”

    我有下表 committee table commname profname commA bill commA jack commA piper commB bill commB piper 我正试图找到 吹笛者 所在的每个委员会中的教授
  • Chrome 配置文件未加载硒

    这是我的代码 from selenium import webdriver options webdriver ChromeOptions options add argument r user data dir C Users shahr
  • Keras:如何扩展validation_split以生成第三组,即测试集?

    我正在使用带有 TensorFlow 后端的 Keras 我使用带有 valid split 参数的 ImageDataGenerator 将数据拆分为训练集和验证集 因此 我使用 flow from directory 并将子集设置为 训
  • Vulkan 描述符绑定

    在我的 vulkan 应用程序中 当所有网格使用相同的纹理时 我曾经这样绘制网格 Updatedescriptorsets texture Command buffer record For each mesh Bind transform