问题标签 [vulkan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
opengl - 渲染具有多个索引的网格
我有一些顶点数据。位置、法线、纹理坐标。我可能从 .obj 文件或其他格式加载它。也许我在画一个立方体。但是每条顶点数据都有自己的索引。我可以使用 OpenGL/Direct3D 渲染这个网格数据吗?
opengl - UBO/SSBO 与 Vulkan 的着色器内存绑定有何不同?
在Imagination 网站上的文章中,我阅读了以下段落:
例如,
glUniform*()
Vulkan 中没有等效的入口点;相反,写入 GPU 内存是将数据传递给着色器的唯一方法。当您调用
glUniform*()
时,OpenGL ES 驱动程序通常需要分配一个驱动程序管理的缓冲区并将数据复制到其中,其管理会产生 CPU 开销。在 Vulkan 中,您只需映射内存地址并直接写入该内存位置。
那和使用统一缓冲区有什么区别吗?它们也被明确分配并且可以携带任意数据。由于统一缓冲区的大小非常有限,因此着色器存储缓冲区可能是一个更好的类比。
opengl - 带有 EGL 的 Vulkan 接头
似乎有很多关于 Vulkan 新图形 API 的嗡嗡声 - https://www.khronos.org/vulkan
我的问题与 - 现有的 EGL 接口将如何适应 Vulkan API?,使用 Vulkan 新的无状态方法,是否必须用基于 Vulkan 的替代方案替换 EGL?
到目前为止,可以从 EGL(OpenGL、OpenGL ES 和 OpenVG)访问的三个 API 都与每个线程上下文一起工作,Vulkan 怎么样?
gpu - 多 GPU 编程如何与 Vulkan 一起工作?
在 Vulkan 中使用多 GPU 是否类似于创建许多命令队列然后在它们之间划分命令缓冲区?
有2个问题:
- 在 OpenGL 中,我们使用 GLEW 来获取函数。对于超过 1 个 GPU,每个 GPU 都有自己的驱动程序。我们是如何使用 Vulkan 的?
- 部分帧是否由 GPU 生成,而其他帧是否由其他 GPU 生成,例如使用 Intel GPU 渲染 UI 和 AMD 或 Nvidia GPU 在 labtops 中渲染游戏屏幕?还是会在 GPU 中生成一帧,而在另一个 GPU 中生成下一帧?
directx-12 - DirectX 12/Mantle/Vulkan 和 HSA
随着 DirectX 12、Mantle 和 Vulkan 等低级图形 API 的兴起,我想知道这些 API 如何与异构系统架构 (HSA) 交互(如果有的话)?
据我了解,支持 HSA 需要一些开发人员的参与,但我很好奇现在是否有任何低级图形 API 自己处理这个问题,或者开发人员是否仍有负担充分利用它?
HSA 对于系统内存和视频内存之间的简化数据共享等功能特别有趣,特别是当它们都共享相同的物理 RAM 时。
由于这个问题可能特定于当前的事态,我对这种概述很好(尽管有关未来路线图的信息会很好),我会接受一个只涵盖单个图形 API 的答案(因为我怀疑许多人(如果有的话)都熟悉所有三个加 HSA)。另外,如果我完全误解了它的工作原理,那么也请随时指出这一点;我对这两种技术都不太熟悉,但想知道它们目前是如何交互的。
api - vulkan api会处理窗口创建吗?
我听说 vulkan 会统一不同操作系统上的初始化。这是否意味着 vulkan 创建窗口、处理鼠标/键盘事件以便我可以避免使用特定于操作系统的编程?
vulkan - 是否会针对 Mac OS 平台发布 Vulkan api?
Khronos 组已发布Vulkan API。是否会针对 Mac OS 平台发布 Vulkan API 的实现?
c++ - 将 apiVersion 参数设置为 0 时的 VK_ERROR_INCOMPATIBLE_DRIVER
我正在尝试创建一个 vulkan 实例。这是我的代码:
但是,这会返回 VK_ERROR_INCOMPATIBLE_DRIVER。
如果我不提供自己的ApplicationInfo
,而是使用默认构造的,它可以工作。
在规范中它说
如果
apiVersion
为 0,则实现必须忽略它,否则如果实现不支持请求apiVersion
,则必须返回VK_ERROR_INCOMPATIBLE_DRIVER
如您所见,我设置apiVersion
为 0。据我了解,它不应该给我VK_ERROR_INCOMPATIBLE_DRIVER
错误。
这是一个错误还是我忘记了什么或想错了?
编辑:
在规范的 html 版本中,关于忽略的部分apiVersion
不存在。规范的 pdf 版本是否已经过时?
编辑:
如果我设置apiVersion
为 1.0.3 它也可以:
c++ - 为什么 Vulkan 的 VkBool32 实现为 unsigned int?
查看托管在GitHub 上的 Sascha Willem 的 C++ Vulkan 演示,我注意到一些函数返回了 Datatype VkBool32
。
当我注意到 Line 时,我很好奇为什么 Khronos 没有使用普通的 bool
typedef uint32_t VkBool32;
在 vulkan.h. uint32_t 定义为
typedef unsigned int uint32_t;
在 stdint.h 中。
我的问题是,如果标准 Bool 只需一个字节就可以完成工作,为什么丢弃 3 个字节有意义?我的小 Recherche 表明几乎没有性能差异(请参阅哪个更快:if (bool) 或 if(int)?),并且 Khronos 自己说他们希望最大限度地减少兼容性问题(在这种情况下,旧 C 没有原始布尔类型)以专注于现代代码。
(请参阅从此处获取的 Trevett 的引述)
彻底的重新设计,我们不向后兼容
c++ - Vulkan:vkGetInstanceProcAddress 和 vkGetDeviceProcAddress 之间的区别
vkGetInstanceProcAddr
并且在API 文档vkGetDeviceProcAddr
中完全缺失。然而,他们需要使用交换链执行命令(从而制作任何有意义的 Vulkan 应用程序)。此外,SDK 附带的 cube/tri 演示使用它们非常不一致。
这两种方法是否可以互换,如果不能,有什么区别?