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 描述符绑定 的相关文章

  • ray tracing of Embree

    GitHub embree embree Embree ray tracing kernels repository Intel Embree is a collection of high performance ray tracing
  • Vulkan教程翻译之九 Descriptor Set Layouts 和 Pipeline Layouts

    原文链接 https vulkan lunarg com doc sdk 1 2 131 2 windows tutorial html 08 init pipeline layout html Descriptor Set Layouts
  • Vulkan Windows VS2022 开发环境配置

    1 确保编译器支持C 17 所以需要Visual Studio 2017及其以上版本 我这里用的是2022 确保环境安装了CMake CMake gui 可选装 2 下载Vulkan SDK 到 https vulkan lunarg co
  • 从Gles、Vulkan到Metal(一)-- 数据和提交

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

    原文链接 https vulkan lunarg com doc sdk 1 2 131 2 windows tutorial html 09 init descriptor set html 创建 Descriptor Set 这一章节的
  • Vulkan-程序结构

    程序结构 一般来说 完整的Vulkan程序包含 创建Vulkan实例 获取物理设备列表创建逻辑设备 创建命令缓冲 获取设备中支持图形工作的队列 初始化交换链 创建深度缓冲 创建渲染通道 创建帧缓冲 创建绘制对象 初始化渲染管线 创建栅栏和初
  • 闭关之 Vulkan 应用开发指南笔记(四):绘制、几何体&片段处理、同步和回读数据

    目录 第8章 绘制 8 1 准备绘制 8 2 顶点数据 8 3 索引绘制 8 3 1 只用索引的绘制 8 3 2 重置索引 8 4 实例化 8 5 间接绘制 第9章 几何体处理 9 1 表面细分 9 1 1 表面细分配置 表面细分模式 控制
  • Vulkan再探(7):纹理贴图

    08 20 2020 文章目录 纹理贴图 Texture Mapping 纹理属性 加载图片 临时缓冲区储存图片信息 生成贴图等级 生成图像和存储空间 难点 传输数据 图解 拷贝缓冲区到图像 创建采样器 创建图像视图 创建组合图像采样器描述
  • Vulkan 绘制显示设计

    背景 众所周知 Vulkan是个跨平台的图形渲染API 为了友好地支持跨平台 Vulkan自然也抽象出了很多接口层去对接各个操作系统 抹平系统间的差异 Swap Chains即为WSI 其本质上是一种图像队列 此队列会按顺序依次将队列中的若
  • 着色器中包围体层次结构的遍历

    我正在使用 vulkan 计算着色器开发路径跟踪器 我实现了一棵树代表包围体层次结构 BVH 的想法是最大限度地减少需要执行光线相交测试的对象数量 1 简单的实施 我的第一个实现非常快 它遍历树到singleBVH 树的叶子 然而 射线可能
  • 我可以将 R8G8B8A8 放入 UBO 中,并将其用作 vec4 吗?

    我尝试优化工作计算着色器 它的目的是创建一个图像 找到合适的颜色 使用一个小调色板 然后调用imageStore image ivec2 vec4 颜色在 UniformBuffer 的 uint 数组中进行索引 该 UBO 中的一种颜色封
  • 使用 CMake 和 conan 包管理器正确设置 Vulkan、glfw 和 spdlog

    我正在开发 Vulkan API 的渲染器 我在使用 CMake 和 conan 包管理器正确设置项目时遇到了很大的麻烦 让我们看一下我的 conanfile py 的依赖设置 from conans import ConanFile CM
  • “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 与 SFML 结合使用?

    我目前使用 GLFW 进行窗口创建和用户输入 GLFW 只是让我们可以说 glfwWindowHint GLFW CLIENT API GLFW NO API 告诉 GLFW 不支持 OpenGL 它甚至提供了类似的功能 glfwCreat
  • GPU 上的相干内存是什么?

    我在记忆中不止一次遇到 非连贯 和 连贯 记忆这个术语 科技论文 https renderdoc org vulkan in 30 minutes html与图形编程相关 我一直在寻找简单明了的解释 但发现大部分是 硬核 论文this ht
  • xvfb(带有 Mesa 19.2)与 Vulkan 兼容吗?

    我正在尝试在无头 Ubuntu 19 10 虚拟机上运行基于 Vulkan 的图形应用程序 通过xvfb https en wikipedia org wiki Xvfb 从裸露的 Ubuntu 19 10 映像开始 使用创建lxc htt
  • Vulkan:在多个命令缓冲区中排序图像内存屏障

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

    Summary 我希望能够测量 GPU 上运行整个图形管道所花费的时间 以毫秒为单位 目标 能够在优化代码之前 之后保存基准 下一步将是 mipmap 纹理 以查看改进 这在 OpenGL 中非常简单 但我是 Vulkan 新手 需要一些帮
  • 在 Vulkan 中,图形队列系列与当前队列系列分离是否有益?

    据我所知 队列系列可能支持呈现到屏幕但不支持图形 假设我有一个同时支持图形和呈现的队列系列 以及另一个仅支持呈现的队列系列 我应该为两个进程使用第一个队列系列 还是应该将第一个队列系列委托给图形 将后者委托给呈现 或者这两种方法之间没有明显

随机推荐

  • 在可序列化对象上获取 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