问题标签 [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 回答
1022 浏览

opengl-es - texture2D 与安卓手机上的计算着色器不兼容?

我正在尝试使用 texture2D() 从计算着色器中的 sampler2d 纹理中读取值。在 PC 上它工作正常,但在 android 移动设备(使用版本 310 es)上,相同代码的编译失败并出现以下错误:

这个调用不是与计算着色器兼容吗?

0 投票
1 回答
1694 浏览

vulkan - 当源图像使用 VK_IMAGE_TILING_OPTIMAL 时 vkCmdCopyImageToBuffer 是否工作?

我已经读过(在自己遇到限制之后),为了将数据从主机复制到VK_IMAGE_TILING_OPTIMAL VkImage,最好使用VkBuffer而不是 VkImage 作为暂存图像,以避免对 mipmap 和层数的限制。(这里这里

因此,当涉及到实现一个glReadPixels类似功能以将渲染到纹理的结果读取回主机时,我认为使用暂存 VkImagevkCmdCopyImageToBuffer而不是使用暂存 VkImage 读取暂存 VkBuffer 是一个好主意。

但是,我还不能让它工作,我看到了大部分预期的图像,但是图像的矩形块位置不正确,甚至有些位重复。

我很有可能在某个地方搞砸了我的同步或布局转换,我将继续调查这种可能性。

但是,我无法从规范中弄清楚使用vkCmdCopyImageToBuffer图像源 usingVK_IMAGE_TILING_OPTIMAL是否实际上应该“取消平铺”图像,或者如果我尝试这样一个事物。

所以我的问题是:源图像是vkCmdCopyImageToBufferVK_IMAGE_TILING_OPTIMAL线性平铺数据还是最佳(实现定义)平铺数据填充缓冲区?

0 投票
2 回答
373 浏览

c++ - 渲染调用性能消耗

我的 Vulkan 程序运行速度极慢,我正试图找出原因。我注意到,即使是一些绘制调用也已经消耗了远远超过应有的性能。例如,这是一个用于渲染一些网格的提取(伪代码):

有 238 个网格被渲染,总顶点索引计数为 52050。GPU 绝对不会负担过重(着色器非常便宜)。

如果我使用上面的代码运行我的程序,帧将在大约46ms 内呈现。没有它,它只有9ms

我正在使用带有 2 个交换链图像的 fifo 呈现模式。此时只有一个主命令缓冲区(没有辅助命令缓冲区/预先记录的缓冲区),所有帧都使用相同的缓冲区。

我的问题是,我真的不知道要寻找什么。这几个渲染调用应该几乎没有影响,所以问题的根源一定在其他地方。

谁能给我任何提示我应该如何解决这个问题?是否已经有 Vulkan 的分析器?我只需要朝着正确的方向轻推。

// 编辑:

因此,如果所有 238 个网格都被渲染,看起来 vkDeviceWaitIdle 需要大约 32 毫秒来执行。(如果没有渲染,则小于 1 毫秒)。大部分停滞都源于那里,但我仍然不知道该怎么办。

0 投票
2 回答
762 浏览

graphics - vkCreateWin32SurfaceKHR 不写入表面

我正在尝试对 Vulkan 的工作进行简单测试。我一直在关注 LunarG 教程,但遇到了vkCreateWin32SurfaceKHR似乎无济于事的问题。即,surface没有被写入。该函数vkCreateWin32SurfaceKHR返回 0,因此它不报告失败。任何帮助表示赞赏。

0 投票
3 回答
4785 浏览

vulkan - Vulkan 构建错误

我想构建一个包含在 Vulkan SDK 中的示例。

我从http://vulkan.lunarg.com下载了 SDK并安装了它。

然后我打开Visual Studio(我有一个2013版本),我从这个路径打开解决方案:(C:\VulkanSDK\1.0.13.0\Demos)。我选择DEMOS.sln文件。然后当我点击LocalWindowsDebugger这条消息时弹出:

我从未使用过 vulkan,但由于它名为“Demo”,我认为它里面的所有东西都应该设置好才能工作。

我在网上搜索过,但由于它是新的,所以很少有资源谈论它。

什么是ICD?以及如何安装它?(它与 VulkanSDK 的安装程序不同吗?)或者这个错误是关于完全不同的属性?像设置 VisualStudio 的属性?

0 投票
2 回答
1028 浏览

c++ - 从 Vulkan 中的 R16_UINT-3D 纹理对片段着色器中的值进行采样

我正在使用 Sascha Willems 的纹理教程,它没有任何问题。然后我将纹理从 2D 纹理更改为 3D 纹理无符号 16 位。

我设置了正确的深度,然后更改了这些值:

在着色器中:

但是我从 texture(volumeTexture, textPos).r 得到的所有值现在都为零。我想要做的是上传一个 UINT16 图像,但从片段着色器将其采样为浮点数。

如果我打开 RenderDoc,纹理看起来不错。

paste.org/private/i7dqw7pm0snkbf40eyywg

这是我在opengl中所做的:

0 投票
2 回答
4336 浏览

c++ - Vulkan 中命令缓冲区之间的同步

在 Vulkan 中有几种处理同步的方法。我是这样理解的:

  • 栅栏是 GPU 到 CPU 的同步。
  • 信号量是 GPU 到 GPU 的同步,它们用于同步队列提交(在相同或不同的队列上)。
  • 事件更通用,在 CPU 和 GPU 上都可以重置和检查。
  • 屏障用于命令缓冲区内的同步。

就我而言,我有两个命令缓冲区。我希望第二个命令缓冲区在第一个命令缓冲区之后执行。

什么样的同步最适合这个?如果我使用vkQueueWaitIdle(queue)),它与使用栅栏是一样的,还是应该为此使用事件或信号量?

如果我同时将多个命令缓冲区发送到队列:

还有一种方法可以在第一个和第二个之间进行同步吗?

0 投票
2 回答
3027 浏览

framebuffer - 如何处理可呈现图像的布局?

一个像样的图像开始于VK_IMAGE_LAYOUT_UNDEFINED但将VK_IMAGE_LAYOUT_PRESENT_SRC_KHR在它们被呈现一次之后。

许多示例vkImagesVK_IMAGE_LAYOUT_PRESENT_SRC_KHR创建vkSwapchain. 这允许他们使用VK_IMAGE_LAYOUT_PRESENT_SRC_KHRfor oldLayout但是不允许在创建交换链后立即进行转换。

只有在图像返回之后vkAcquireNextImageKHR,并且在图像被呈现之前,才能使用可呈现的图像vkQueuePresentKHR这包括转换图像布局和渲染命令。

我有哪些选择可以正确处理交换链图像布局?

0 投票
2 回答
896 浏览

vulkan - VkDeviceQueueCreateInfo 中 queueCount 的作用是什么?

https://www.khronos.org/registry/vulkan/specs/1.0/man/html/VkDeviceQueueCreateInfo.html

我目前在做什么:

查找具有支持图形和表面的队列的设备。

然后我找到 和 的graphicsQueue索引surfaceQueue。就我而言,它们是相同的,但我认为它们也可以不同。

现在我一直设置queueCount为 1 并且到目前为止我没有遇到任何问题,但我可能应该设置为queueCountto VkQueueFamilyProperties.queueCount

但现在我想知道它实际上做了什么?越高queueCount表示性能越好吗?

0 投票
4 回答
9865 浏览

vulkan - 我应该尝试使用尽可能多的队列吗?

在我的机器上,我有两个队列族,一个支持一切,一个只支持传输。

支持一切的队列族的 queueCount 为16.

现在规格说明

提交到不同队列的命令缓冲区可能会并行执行,甚至可能彼此乱序执行

这是否意味着我应该尝试使用所有可用队列以获得最大性能?