问题标签 [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-es - texture2D 与安卓手机上的计算着色器不兼容?
我正在尝试使用 texture2D() 从计算着色器中的 sampler2d 纹理中读取值。在 PC 上它工作正常,但在 android 移动设备(使用版本 310 es)上,相同代码的编译失败并出现以下错误:
这个调用不是与计算着色器兼容吗?
vulkan - 当源图像使用 VK_IMAGE_TILING_OPTIMAL 时 vkCmdCopyImageToBuffer 是否工作?
我已经读过(在自己遇到限制之后),为了将数据从主机复制到VK_IMAGE_TILING_OPTIMAL
VkImage,最好使用VkBuffer而不是 VkImage 作为暂存图像,以避免对 mipmap 和层数的限制。(这里和这里)
因此,当涉及到实现一个glReadPixels
类似功能以将渲染到纹理的结果读取回主机时,我认为使用暂存 VkImagevkCmdCopyImageToBuffer
而不是使用暂存 VkImage 读取暂存 VkBuffer 是一个好主意。
但是,我还不能让它工作,我看到了大部分预期的图像,但是图像的矩形块位置不正确,甚至有些位重复。
我很有可能在某个地方搞砸了我的同步或布局转换,我将继续调查这种可能性。
但是,我无法从规范中弄清楚使用vkCmdCopyImageToBuffer
图像源 usingVK_IMAGE_TILING_OPTIMAL
是否实际上应该“取消平铺”图像,或者如果我尝试这样一个事物。
所以我的问题是:源图像是vkCmdCopyImageToBuffer
用VK_IMAGE_TILING_OPTIMAL
线性平铺数据还是最佳(实现定义)平铺数据填充缓冲区?
c++ - 渲染调用性能消耗
我的 Vulkan 程序运行速度极慢,我正试图找出原因。我注意到,即使是一些绘制调用也已经消耗了远远超过应有的性能。例如,这是一个用于渲染一些网格的提取(伪代码):
有 238 个网格被渲染,总顶点索引计数为 52050。GPU 绝对不会负担过重(着色器非常便宜)。
如果我使用上面的代码运行我的程序,帧将在大约46ms 内呈现。没有它,它只有9ms。
我正在使用带有 2 个交换链图像的 fifo 呈现模式。此时只有一个主命令缓冲区(没有辅助命令缓冲区/预先记录的缓冲区),所有帧都使用相同的缓冲区。
我的问题是,我真的不知道要寻找什么。这几个渲染调用应该几乎没有影响,所以问题的根源一定在其他地方。
谁能给我任何提示我应该如何解决这个问题?是否已经有 Vulkan 的分析器?我只需要朝着正确的方向轻推。
// 编辑:
因此,如果所有 238 个网格都被渲染,看起来 vkDeviceWaitIdle 需要大约 32 毫秒来执行。(如果没有渲染,则小于 1 毫秒)。大部分停滞都源于那里,但我仍然不知道该怎么办。
graphics - vkCreateWin32SurfaceKHR 不写入表面
我正在尝试对 Vulkan 的工作进行简单测试。我一直在关注 LunarG 教程,但遇到了vkCreateWin32SurfaceKHR
似乎无济于事的问题。即,surface
没有被写入。该函数vkCreateWin32SurfaceKHR
返回 0,因此它不报告失败。任何帮助表示赞赏。
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 的属性?
c++ - 从 Vulkan 中的 R16_UINT-3D 纹理对片段着色器中的值进行采样
我正在使用 Sascha Willems 的纹理教程,它没有任何问题。然后我将纹理从 2D 纹理更改为 3D 纹理无符号 16 位。
我设置了正确的深度,然后更改了这些值:
在着色器中:
但是我从 texture(volumeTexture, textPos).r 得到的所有值现在都为零。我想要做的是上传一个 UINT16 图像,但从片段着色器将其采样为浮点数。
如果我打开 RenderDoc,纹理看起来不错。
paste.org/private/i7dqw7pm0snkbf40eyywg
这是我在opengl中所做的:
c++ - Vulkan 中命令缓冲区之间的同步
在 Vulkan 中有几种处理同步的方法。我是这样理解的:
- 栅栏是 GPU 到 CPU 的同步。
- 信号量是 GPU 到 GPU 的同步,它们用于同步队列提交(在相同或不同的队列上)。
- 事件更通用,在 CPU 和 GPU 上都可以重置和检查。
- 屏障用于命令缓冲区内的同步。
就我而言,我有两个命令缓冲区。我希望第二个命令缓冲区在第一个命令缓冲区之后执行。
什么样的同步最适合这个?如果我使用vkQueueWaitIdle(queue)),
它与使用栅栏是一样的,还是应该为此使用事件或信号量?
如果我同时将多个命令缓冲区发送到队列:
还有一种方法可以在第一个和第二个之间进行同步吗?
framebuffer - 如何处理可呈现图像的布局?
一个像样的图像开始于VK_IMAGE_LAYOUT_UNDEFINED
但将VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
在它们被呈现一次之后。
许多示例vkImages
在VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
创建vkSwapchain
. 这允许他们使用VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
for oldLayout
。但是不允许在创建交换链后立即进行转换。
只有在图像返回之后
vkAcquireNextImageKHR
,并且在图像被呈现之前,才能使用可呈现的图像vkQueuePresentKHR
。这包括转换图像布局和渲染命令。
我有哪些选择可以正确处理交换链图像布局?
vulkan - VkDeviceQueueCreateInfo 中 queueCount 的作用是什么?
https://www.khronos.org/registry/vulkan/specs/1.0/man/html/VkDeviceQueueCreateInfo.html
我目前在做什么:
查找具有支持图形和表面的队列的设备。
然后我找到 和 的graphicsQueue
索引surfaceQueue
。就我而言,它们是相同的,但我认为它们也可以不同。
现在我一直设置queueCount
为 1 并且到目前为止我没有遇到任何问题,但我可能应该设置为queueCount
to VkQueueFamilyProperties.queueCount
。
但现在我想知道它实际上做了什么?越高queueCount
表示性能越好吗?
vulkan - 我应该尝试使用尽可能多的队列吗?
在我的机器上,我有两个队列族,一个支持一切,一个只支持传输。
支持一切的队列族的 queueCount 为16
.
现在规格说明
提交到不同队列的命令缓冲区可能会并行执行,甚至可能彼此乱序执行
这是否意味着我应该尝试使用所有可用队列以获得最大性能?