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

graphics - GPU上的相干内存是什么?

我在

与图形编程相关的技术论文。我一直在寻找一个简单而清晰的解释,但发现大多是这种类型的“硬核”论文。很高兴收到外行风格的回答,关于 GPU 架构上的相干内存实际上是什么以及它是如何实现的与其他(可能不连贯的)内存类型进行比较。

0 投票
1 回答
3942 浏览

c++ - 全局加载 Vulkan 函数

随着 Vulkan 的发布,我决定(作为一种爱好)编写一个基于 Vulkan 的 GUI。但是,我目前停留在第一步——加载 Vulkan 函数。我正在使用 Nvidia 的 C++ Vulkan 包装器,据我所知,它需要全局加载 Vulkan 函数。

我可以成功加载本地函数,但是::vkCreateInstance失败了:

尝试全局分配新函数指针会给我 2 个编译时错误(使用 VS2015 编译):

  • 表达式必须是可修改的左值。
  • '=':作为左操作数。

vulkan.hheader 中声明了函数原型,例如:

这可能会阻止我全局加载函数。如果我要定义VK_NO_PROTOTYPES,那么这些原型将被跳过,我相信我可以重新声明它们PFN_vkCreateInstance vkCreateInstance = nullptr;,依此类推。但这是正确的方法吗?

所以,我的问题 - 全局加载 Vulkan 函数的正确方法是什么?

0 投票
0 回答
1257 浏览

pipeline - 来自 vkCreateGraphicsPipelines 的访问冲突

我在这段 Vulkan API 上遇到了访问冲突。

错误是:

据我所知,所有其他相关代码:

device 和 pipelineCache 都由超类设置,该超类由 Sascha Willems 编写,适用于他创建的所有示例,所以我不认为问题会出现。但是,这实际上只留下了 pipelineCreateInfo 或 pipelines.billboard 作为错误的潜在来源。

这两者的处理方式与 Sascha 在他的示例中的示例(几乎完全相同)相同,所以我在这里不知所措。

编辑:我发现了问题。我未能在我的着色器中指定采样器的绑定点。

0 投票
0 回答
636 浏览

c# - C#:结构中的非托管委托,以及包装 vulkan API dll 的其他非托管问题

我正在尝试在我的 C# 程序中使用新的 vulkan API。由于我们只能访问头文件,因此我复制了代码并将其调整为一个不安全的类来包装它:

所有的 PFN_xxx 原本都是头部中的函数指针,我直观地把它们改写为委托。所以,目前,它正在工作。但是,在代码的后期,我有以下从 dll 导入的函数,它会出错:

错误是CS0208,由以下消息描述:“无法获取托管类型的地址、大小或声明指向托管类型的指针('Vk.AllocationCallbacks')” 通过谷歌搜索,我了解到 AllocationCallbacks 是管理,因为它的代表。那么我该如何解决这个问题呢?我在网上没有找到令人满意的答案,我试图将我的结构中的委托编组为非托管函数指针(像这样),但它似乎不起作用,编译器保留错误。


这是另一个问题:我有一个结构,其中定义了固定大小的结构数组。原始声明是:

我只是这样翻译:

但同样,我有同样的问题,著名的 CS0208 错误,因为以下函数导入:

而这一次,错误是由于固定大小的数组。任何想法 ?

谢谢你的帮助 !

0 投票
1 回答
3222 浏览

c - Vulkan:vk*CreateInfo 结构中的 sType 有什么意义?

在新 Vulkan API 的所有创建信息结构 ( vk*CreateInfo) 中,总是有一个.sType成员。如果价值只能是一件事,为什么会出现这种情况?此外,Vulkan 规范非常明确,您只能将vk*CreateInfo结构用作其相应vkCreate*功能的参数。似乎有点多余。我可以看到,如果驱动程序将此结构直接传递给 GPU,您可能需要拥有它(我确实注意到它始终是第一个成员)。但这对于应用程序来说似乎是一个非常糟糕的主意,因为如果驱动程序这样做了,应用程序将不太容易出错,并且在结构之前添加一个 int 似乎并不是一个计算效率极低的操作。我只是不明白它为什么存在。

TL;DR
    为什么vk*CreateInfo结构有.sType成员?

0 投票
1 回答
2261 浏览

memory-management - 有人可以帮我理解 VkPhysicalDeviceMemoryProperties 吗?

我想弄清楚,但我有点卡住了。

类型和堆的关联方式很简单,虽然有点奇怪。(为什么不给VkMemoryHeap会员VkMemoryType?)

我想我明白所有的VkMemoryPropertyFlags意思,它们看起来相当简单。

但是VkMemoryHeap.flags会员怎么了?它显然只有一个非零有效值,VkMemoryHeapFlagBits.VK_MEMORY_HEAP_DEVICE_LOCAL_BIT虽然这本身不会太奇怪,但VkMemoryPropertyFlagBits.VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT堆的内存类型上也可能存在一个。

会员是什么VkMemoryHeap.flags意思,它与VkMemoryType.flags会员有什么关系?

0 投票
1 回答
199 浏览

c++ - VkLayer_param_checker.dll 访问冲突

我使用 LunarG 安装程序设置了一个 Vulkan 1.0.5.0 程序,它无需启用任何层即可工作。

当我尝试启用以下任一功能时:

当我尝试调用 vkCreateInstance 时,我在 VkLayer_param_checker.dll 或 VkLayer_api_dump.dll 中遇到访问冲突。

如果我尝试单独加载任何一个作为唯一层,它们也会失败。

JSON 文件存在于注册表中的 ExplicitLayers 下,文件本身看起来很好。

我还在 Visual Studio 中收到有关已加载 dll 的消息。

这些层适用于较旧的 1.0.3.1 测试程序,这很奇怪,我能够启用以下所有功能:

是否有必须加载图层的特定顺序?我确定我在某个地方读到过,但我再也找不到了。任何帮助表示赞赏。

0 投票
2 回答
1537 浏览

c++ - X11 上的 Vulkan:vkGetPhysicalDeviceSurfaceCapabilitiesKHR 错误

我试图让 Vulkan 在 X11 下运行。

我(显然)成功地创建了一个实例、设备和表面,并且与表面相关的几个调用也成功了,甚至返回了合理的值(例如vkGetPhysicalDeviceSurfaceFormatsKHR返回两种格式)。但是,当我打电话时vkGetPhysicalDeviceSurfaceCapabilitiesKHR,我得到以下信息:

X11 窗口是0x5800009,如错误中所引用。我正在使用 Vulkan SDK 1.0.5 和 Nvidia 364.12 驱动程序(如果相关)。

0 投票
1 回答
318 浏览

c++ - 从同一个 VkPhysicalDevice 创建两个 VkDevice 是否有效?

我正在为 Vulkan API 编写 C++ 包装器,因此我想确保我的文档不会与实际 API 所说的相矛盾。

即使在启用 LunarG 标准验证层的情况下运行,此方案也有效。但是目前有很多东西通过了验证层,尽管是不正确的。所以我的问题是,这样做是否有效

0 投票
1 回答
1608 浏览

c++ - 带有 VK_NULL_HANDLE 的 Vulkan DestroyInstance / DestroyDevice

我的印象是你可以在 NULL 句柄上调用 Destroy / Free,这将是一个空操作。

2.5.1 有效使用

将 VK_NULL_HANDLE 传递给任何 vkDestroy* 或 vkFree* 命令是有效的,它们会默默地忽略这些值。

但是如果你使用vkGetInstanceProcAddrvkGetDeviceProcAddr来获取函数指针会发生什么呢?我正在执行以下操作:

当然,当为原始设备调用析构函数时,它会将空句柄传递给特定于设备的vkDestroyDevice

目前,这给了我一个读取访问冲突,我不确定这是 AMD 的错、LunarG 的错还是我的错。