问题标签 [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 投票
4 回答
9193 浏览

c++ - 如何将 Vulkan 与 MinGW 一起使用?(R_X86_64_32 错误)

我正在尝试设置一个简单的程序来使用 Vulkan。我安装了 LunarG SDK。我有一个小程序,基本上只调用vkCreateInstance. 我用这一行编译:

我使用 64 位 mingw (MSYS2) 得到这个编译器错误:

我该怎么办?我是否链接到正确的库?

0 投票
1 回答
5848 浏览

c++ - 如何在 Vulkan 中绘制图元?

假设 Vulkan 已经初始化,您正在录制到命令缓冲区,您有一个帧缓冲区和一个渲染通道,如何使用 Vulkan 绘制原始 2D 几何形状?

0 投票
1 回答
627 浏览

c# - 通过 c# 中的 pInvoke 调用 vkEnumeratePhysicalDevices 时出现 AccessViolationException

我有一个敏锐的想法,用 c# 为 Vulkan 编写一个包装器。不幸的是,Vulkan API 的第二次调用已经无法解释地失败了。下面的代码取自 Sascha Willems 的 Vulkan 示例并转换为 c# 代码:

我的怀疑是 Vk.Instance 应该不仅仅是一个空类。VkInstance 在官方的 vulkan.h 中定义为typedef struct VkInstance_T* VkInstance. 不幸的是,我对这条线的理解非常有限。我已经尝试过交换类型Vk.InstanceIntPtrobject没有成功。

论文是来自的重要部分vulkan.h

0 投票
1 回答
2297 浏览

c++ - Vulkan 示例:vkQueueSubmit 后面总是跟着 vkWaitForFences?

在 Vulkan 附带的API-Samples中,似乎在调用vkWaitForFences之后总是有调用vkQueueSubmit,直接或通过execute_queue_command_buffer(在 util_init.hpp 中)。调用vkWaitForFences将阻塞 CPU 执行,直到 GPU 完成前面的所有工作vkQueueSubmit。这实际上不允许同时构建多个帧,这(理论上)极大地限制了性能。

是否需要这些调用,如果需要,是否有另一种方法不要求 GPU 在构建新帧之前处于空闲状态?

0 投票
1 回答
1102 浏览

c - 为什么在 vulkan.h 中不可调度的对象总是被定义为 64 位?

看着 vulkan.hi 看到这个:

有谁知道为什么是 64 位?对我来说,总是使用 ifdef 的第一种情况似乎更合理

0 投票
1 回答
322 浏览

c# - P/Invoke vkGetPhysicalDeviceFeatures 访问冲突

我正在为 C# 开发一个 Vulkan 包装器(就像我相信很多人一样),我遇到了一些问题,vkGetPhysicalDeviceFeatures要么不返回数据,要么抛出访问冲突

未管理的一面 - 签名:

规范的签名是这样的:

VkPhysicalDevice是一个handle定义为的对象:

这只是一个指针和其他使用IntPtrSafeHandle包装此形状对象的导入。

托管端 - DLL 导入:

预期的 DLL 导入(但失败):

这类似于其他工作导入。注意:PhysicalDeviceHandle派生自SafeHandle应该编组到IntPtr,我有其他使用这种模式的导入。上面调用时会引发访问冲突。


平台:

  • 视窗 10 (x64)
  • Nvidia 驱动程序:(356.43-vkonly最新)

更新

@V。克拉夫琴科是正确的

上面的导入没有任何问题。我的问题实际上与vkEnumeratePhysicalDevices通话有关。

首先我有导入错误,正确的导入看起来像:

其次,我实际上错误地使用了该功能。你需要打vkEnumeratePhysicalDevices两次电话。第一次调用获取设备数量,第二次调用填充设备数组:

注意:这在函数文档的描述/有效用法部分中有概述,我只是在第一次通读时没有正确解释它。

一旦我终于有了正确的句柄值,EnumeratePhysicalDevices我的最后一次调用就GetPhysicalDeviceFeatures按预期工作了。的最终导入GetPhysicalDeviceFeatures看起来像:

注意Handle:名称中带有的任何变量都是SafeHandle.

0 投票
2 回答
5990 浏览

c++ - 对 vkCreateInstance 的未定义引用

最终编辑:这是 TDM_GCC 的编译器/链接器错误。见答案。

编辑:据我所知,这不是重复的。问题似乎是一个简单的菜鸟错误,但事实并非如此。我已经使用 TDM-GCC-64(Windows 的 GCC/MinGW 工具包)链接到正确的 Vulkan 库“vulkan-1.lib”,并使用了 VulkanSDK 示例中的示例代码。本页如何将 Vulkan 与 MinGW 一起使用?(R_X86_64_32 错误)还确认它可以在 MinGW 上运行,这与 TDM-GCC-64 应该没有什么不同,因为它使用了 MinGW 的一部分。如果这是一个简单答案的重复,那么我很抱歉问,但到目前为止没有人解决这个“简单”问题。

EDIT2:这是我的项目文件。只需根据需要编辑生成文件并运行“BUILD.bat”。http://www.filedropper.com/vulkanapp_1

我已经下载并安装了 LunarG Vulkan SDK v1.0.3.1。我有一个非常简单的程序,它试图创建一个 Vulkan 实例并退出。

当我尝试使用 g++ 构建程序时得到的输出是:

C:\VulkanSDK\1.0.3.1\Bin32/vulkan-1.lib: error adding symbols: File in wrong format collect2.exe: error: ld returned 1 exit status

我的生成文件如下所示:

VulkanApp: main.obj g++ -m32 -LC:\VulkanSDK\1.0.3.1\Bin32 main.obj -o VulkanApp.exe -lvulkan-1 main.obj: main.cpp g++ -m32 -IC:\VulkanSDK\1.0.3.1\Include -c main.cpp -o main.obj clean: del *.exe *.obj

我究竟做错了什么?我正在链接正确的图书馆,对吗?

这是我的程序代码:

0 投票
2 回答
5434 浏览

glsl - Vulkan 中的实例化 GLSL 着色器?

这是我能想到的(最简单的)实例化着色器,它基本上只是转换了一堆 2D 基元:

如果我尝试使用 Vulkan SDK 附带的 glslangValidator 将其编译为 SPIR-V,我会得到:

如果我删除该#extension GL_ARB_draw_instanced行,我仍然会收到gl_InstanceID错误消息。是否可以编写实例化 GLSL 并将它们编译为 SPIR-V?如果是这样,我做错了什么?

0 投票
0 回答
246 浏览

c++ - `VkDescriptorSetLayout` 中未使用的绑定的含义?

我有两个片段着色器(用 GLSL 编写),都带有一组采样器。其他绑定是相同的,但是,两者之间的数组大小不同:

对比

我可以创建一个VkDescriptorSetLayoutVkDescriptorSetLayoutBinding此参数匹配的:

创建的VkDescriptorSetLayout将正确绑定到两个着色器。

两个问题:

未使用的描述符的唯一含义是任何VkDescriptorSet大于必要的(在第一个着色器数组的情况下)?额外分配的描述符是一个很大的性能和/或内存问题吗?

0 投票
1 回答
385 浏览

c++ - Vulkan:转储当前分配的对象?

每当 Vulkan 中的对象被销毁、VK_LAYER_LUNARG_object_tracker层启用并安装调试报告时,它将报告销毁调用并通过回调给出剩余对象的总数。例如:

有什么方法可以获取有关仍然分配的对象的信息吗?

编辑:检查 object_tracker 层的来源(https://github.com/KhronosGroup/Vulkan-LoaderAndValidationLayers/blob/master/layers/object_tracker.h),似乎有一个原型objTrackGetObjectsOfTypeCount,但似乎没有就像他们在任何地方都有实现一样。这个功能是否可以访问?