问题标签 [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.

0 投票
1 回答
2582 浏览

vulkan - Purpose of pNext in Vulkan structures

A lot of the structures used in Vulkan have a sType member, which identifies the type of the structure, and a pNext member, for extension-specific structures. This answer explains quite well what the sType member is for, and why it is needed. It briefly touches on pNext, although I'm not sure I understand the rationale behind it.

If the first member of every structure is sType, couldn't extensions just define their own structure types when they need different/extra parameters?

0 投票
1 回答
1474 浏览

c++ - Vulkan:在多个命令缓冲区中排序图像内存屏障

对于资源转换,您需要知道资源的“之前”和“之后” VkImageLayout(例如,在VkImageMemoryBarrier传递到 中vkCmdPipelineBarrier)。Vulkan 不保证命令缓冲区的任何执行顺序,除非在 API 文档中明确说明(来自答案)。但是,vkCmdPipelineBarrier确实明确表示它在调用之前和之后的命令缓冲区中的命令之间创建了依赖关系。因此,当图像在单个命令缓冲区中转换时,可以随时“了解”图像的布局。

但是,vkQueueSumbit不强制命令缓冲区的执行顺序。如果有两个命令缓冲区,每个都vkCmdPipelineBarrier调用将相同的图像转换到不同的布局,这两个操作之间是否存在依赖关系,或者在这种情况下需要显式同步?

0 投票
1 回答
1445 浏览

c++ - Vulkan:延迟分配内存?

我有一种情况,我可能需要在渲染过程中使用模板缓冲区,但是,直到执行渲染过程的中途,我才会“知道”。不幸的是,一旦渲染通道已经在进行中(如在 D3D12 中),Vulkan 就无法修改帧缓冲区的附件。但是,我在规范中发现,在分配内存和表面时使用“延迟分配内存”的概念。VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BITVK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT

不幸的是,似乎(从 中返回)中的所有VkMemoryType条目实际上都没有设置此功能位。此外,似乎没有一个 API-Samples 使用这些位。这只是驱动程序级别未实现的功能,驱动程序不支持此功能是否很常见?VkPhysicalDeviceMemoryPropertiesvkGetPhysicalDeviceMemoryProperties

我正在使用 Vulkan SDK 1.0.5,Nvidia 驱动程序 356.45。

0 投票
2 回答
1110 浏览

textures - 在 Vulkan 中从数组创建纹理的步骤是什么?

我有一个二维数组 (256x16),我需要将其加载到 Vulkan 样式纹理中以进行采样。在 OpenGL 中,这可以通过 glTexImage2D 或 glTexSubImage2D 简单地完成。但是,我不知道如何在 Vulkan 中做同样的事情。

数组定义如下:

0 投票
2 回答
2088 浏览

c# - C# DllImport:调用 vkCreateInstance 时出现 AccessViolationException

我正在尝试在 C# 中创建 Vulkan 包装器,但是在调用函数时遇到了一些问题。我重写了 vulkan.h 头文件如下:

这个函数在 C 中的原始声明是

现在当我调用我的函数时,我正在这样做:

我不明白我的问题出在哪里,因为它似乎是一个有效的解决方案:StackOverflow : AccessViolationException when call vkEnumeratePhysicalDevices via pInvoke from c#

我尝试通过初始化我的IntPtr hinstance

我还尝试使用Marshal.StructureToPtr(...); 将我的 instance_create_info “转换”为另一个 IntPtr;我试图通过ref 关键字传递instance_create_infoinstance 。显然,没有任何效果。

任何想法 ?


编辑 :

本机函数使用如下:

0 投票
1 回答
1415 浏览

c++ - 如何解决vulkan黑屏?

我刚刚浏览了 LunarG 'drawcube' 示例并将代码合并到我的引擎中。当我跑步时,我得到一个黑屏,因为黑色是清晰的颜色。我可以将清除颜色更改为不同的颜色并查看它。但是,我的几何图形根本没有渲染。不会产生错误或警告。

我的问题是,你能做些什么来解决这样的问题?

0 投票
1 回答
200 浏览

memory - Vulkan 的 VkMemoryHeapFlagBits 是否缺少值?

在 Vulkan 规范 1.0.9(第 180 页)中,我们有以下内容:

和这个描述:

• size 是堆中的总内存大小(以字节为单位)。

• flags 是堆属性标志的位掩码。flags 中指定的位是:

但是当我查询时,VkPhysicalDeviceMemoryProperties 我得到了零值的标志。我的代码与 Vulkan SDK vkjson_info.exe 工具的输出相匹配,该工具输出一个带有我 GPU 属性的 JSON 文件。

这里缺少什么吗?

0 投票
2 回答
5954 浏览

texture-mapping - 多个网格上的 Vulkan 纹理渲染

我正在在模型的多个网格上渲染不同的纹理,但我对这些过程没有太多线索。有人建议为每个网格创建自己的描述符集并调用 vkCmdBindDescriptorSets() 和 vkCmdDrawIndexed() 进行渲染,如下所示:

但是,上述方法与 chopper 示例和 vulkan 的示例完全不同,这让我不知道从哪里开始更改。我非常感谢任何帮助引导我走向正确方向的帮助。

干杯

0 投票
1 回答
8337 浏览

c++ - 在 Vulkan 中启用 VSync

如何在 Vulkan 中使用 vsync?我在 Windows 上,但代码也应该在 Linux 上运行。它是通过插入栅栏来实现的vkAcquireNextImageKHR吗?

0 投票
1 回答
415 浏览

vulkan - 模板传递是否写入颜色缓冲区?

我一直在检查 LunarG 样本中的drawsubpasses 样本(文件:API-Samples/drawsubpasses/drawsubpasses.cpp)。

在这个例子中,当第一个 vkCmdDraw() 被调用时,活动子通道没有颜色附件,只有深度/模板附件。使用的片段着色器确实有一个输出变量。

阅读规范并不能帮助我理解这种用法​​是否“安全”,或者驱动程序将如何处理它。