问题标签 [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.
vulkan - Vulkan 附件说明
渲染通道附件需要字段初始布局和最终布局,并在文档中这样描述:
initialLayout是渲染通道实例开始时附件图像子资源所在的布局。
finalLayout是在渲染过程实例结束时附件图像子资源将转换到的布局。在渲染通道实例期间,如果需要,附件可以在每个子通道中使用不同的布局。
这是否意味着当我们调用和结束渲染通道实例时附件将自动转换,还是意味着程序员应该在渲染通道之前和之后转换到这些布局?谢谢
vulkan - 不同的 Vulkan 加载程序有什么不同?
首先我想知道一些小细节,看看我是否正确理解了一些概念:
- vulkan-1.dll(或Linux上的libvulkan.so.1)被称为加载程序吗?
- 当我使用
HMODULE vulkan_module = LoadLibrary( "vulkan-1.dll" );
时,这是使用图形驱动程序中的加载程序(前提是前面的细节是真的)?
现在到实际的问题。加载器似乎负责将驱动程序拉到一起,使它们看起来像一个“单元”,以及收集可用的扩展和验证层。那么 LunarG 加载程序(例如)与图形驱动程序提供的加载程序有何不同?为什么一个人要使用一个而不是另一个?
c++ - 调用 vkEnumerateDeviceExtensionProperties “两次” - 是否需要?
从vkEnumerateDeviceExtensionProperties 的手册页中,
vkEnumerateDeviceExtensionProperties 检索物理设备上的扩展属性,其句柄在物理设备中给出。要确定层实现的扩展,请将 pLayerName 设置为指向层的名称,并且任何返回的扩展都由该层实现。将 pLayerName 设置为 NULL 将返回可用的非层扩展。pPropertyCount 必须设置为 pProperties 指向的 VkExtensionProperties 数组的大小。pProperties 应指向要填写的 VkExtensionProperties 数组或为空。如果为 null,vkEnumerateDeviceExtensionProperties 将使用找到的扩展数更新 pPropertyCount。VkExtensionProperties 的定义如下:
(强调我的)。pPropertyCount
在当前的实现(Window SDK v1.0.13)中,似乎更新了扩展的数量,无论是否pProperties
为空。但是,文档似乎没有明确说明在这种情况下会发生什么。
这是一个示例,说明为什么拥有这样的功能“更好”:
对比
我的问题是:我这样做是否依赖于不受支持的功能,或者这是否以某种方式在文档中的其他地方宣传?
gpu - Vulkan 管道 + 颜色附件
是否有可能有一个不写入通道的所有颜色附件的管道(带有适当的片段着色器)?例如 Pass 有 2xColor + 1depth 附件。有些片段程序可能会同时写 color01+depth,而有些只写 color0+depth。
仅将未使用附件的 colorWriteMask 设置为 none 是不成功的。我一直无法找到将通过验证层的管道配置。它总是抱怨片段着色器没有写入额外的附件。
android - 在 Android N 上编译 Vulkan API 示例时出现问题
我正在尝试在 Android NI 上运行 vulkan API 示例,目前面临一个问题。我能够编译 LunarG(https://github.com/LunarG/VulkanSamples/tree/master/API-Samples)提供的示例并生成apk,但在运行时 Vulkan 实例可访问的物理设备作为无效值返回。因此应用程序崩溃有关如何进一步进行的任何建议。
linux - 我应该如何设置 Vulkan SDK 环境变量?
Vulkan SDK的Linux 入门指南提供了设置运行时环境以允许应用程序查看本地 Vulkan SDK 安装的说明:
设置 VULKAN_SDK 变量后,在您的环境中设置这些变量:
我应该用这些命令做什么?目前我只是把它们放在我的~/.bashrc
文件末尾:
到目前为止,这似乎有效,但这不只是在 Bash 中设置变量吗?如果我使用不同的 shell 或 IDE 怎么办?
这是我应该设置 Vulkan SDK 环境变量的方式,还是有更好的方式?
graphics - 在 Vulkan 中生成 mipmap
我正在尝试使用但不了解该过程来生成 mipmaps 运行时(实现glGenerateMipmap()
功能) 。vkCmdBlitImage
到目前为止,这是我的代码:
每个 mip 级别都需要自己的图像吗?它们应该如何初始化?为纹理数据使用暂存缓冲区时,我应该何时生成 mipmap?
编辑:我将代码修改为只使用建议的一个图像,现在它似乎可以工作(我可以在 RenderDoc 纹理查看器中看到正确的 mip 级别图像,并且我没有收到任何验证错误)。
vulkan - Size in MemoryRequirements not what I'm expecting
I'm creating a texture, querying the memory requirements, and it's not what I was expecting. Here's the ImageCreateInfo structure:
Now, I was expecting one byte for each of R,G,B, at width and height of 1024 to give memory requirements of 3 * 1024 * 1024 = 3,145,728
. But instead, it returns 1,048,576
, which is perfectly 1024 * 1024. It seems to not care about the one byte for each channel of RGB. What am I missing here?
vulkan - LunarG 核心验证层将结构重置为零
我正在实现一个基本的纹理立方体示例,并且遇到了一个有趣的问题 - 在将我的DescriptorWriteSet
结构传递给UpdateDescriptorSets
API 调用后,所有字段都已清零。此后尝试读取字段的任何代码都会出现空指针异常(因为 DescriptorBufferInfo 指针现在为空)。这仅在启用 VK_LAYER_LUNARG_core_validation 时发生,如果我禁用它,API 调用似乎工作正常。
我的示例不完整,所以我不能说它是否适用于禁用图层,或者我的代码是否有错误。然而,我一直盯着传递给这个调用的值,做一个健全性检查,因为我确定我没有传入一个空指针。这是一个错误,还是这是预期的行为?
- 视窗 10
- LunarG SDK 1.0.8(我想使用 1.0.13,但这需要更新的 AMD 驱动程序,它会蓝屏我的电脑)
编辑:
这不仅仅是将我给它的结构清零——我目前只传入DescriptorWriteSet
常量数组中的第一个,它也将第二个清零。事实上,当我检查阵列周围的内存时,这一层会触及阵列两侧的内存。这对我来说似乎更像是一个错误......
编辑2:
原来问题源于我的代码:
我的两个布局绑定具有相同的绑定索引 0。当然,我希望这会导致问题,但我不希望这会导致在未来的 API 调用中传递的结构归零......我总是犹豫不决像这样的事情作为 Github 上的问题,因为超过一半的时间是我的错,我得到了这个问题。
vulkan - 为 Vulkan 编译为 OpenGL ES 版本编写的 GLSL
我的问题与这个问题类似,但部分(有用的)给出的答案与基于 OpenGL ES ESSL 3.10 为 vulkan 编译 GLSL 不兼容。
为了在顶点着色器和片段着色器中使用单独的推送常量内存部分,建议的解决方案是在推送常量结构的第一个成员之前使用 layout(offset = #)。
尝试在 GLSL ES 310 代码中执行此操作会导致错误“'块成员偏移':此配置文件不支持:es”。
是否有支持的方式来声明与 es 兼容的这种偏移量?
我发现的唯一解决方法是在片段着色器中声明一堆虚拟变量。当我这样做时,如果我没有在 VkPipelineLayoutCreateInfo 中声明片段着色器的推送常量缓冲区的全部范围,我会收到验证层错误。修复该问题后,我收到有关“vkCreatePipelineLayout() 调用具有具有重叠范围的推送常量”的验证层警告。
显然我可以忽略警告,但如果有一个更整洁的解决方案,那会更可取。
简单示例,使用 VulkanSDK\1.0.13.0\Bin\glslangValidator.exe 编译成功:
而这不是:
将我所有的 310 ES 着色器代码转换为 430 可以解决我的问题,但这并不理想。GL_ARB_enhanced_layouts 不适用于 310 ES 代码,所以我的问题不是为什么它不起作用,而是我在 ES 中是否有任何选项可以实现相同的目标?