问题标签 [spir-v]

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 回答
162 浏览

windows - 是否有独立于操作系统的方法将 OpenCL 内核转换为 SPIR-V?

我找到了关于使用开源工具将 OpenCL 内核离线编译到 SPIR-V 中的指南,clang但我找不到使用其他编译器执行此操作的官方方法。

有没有办法使用 CMake 将 OpenCL 内核转换为 SPIR-V?clang如果没有,除了编写自定义脚本和调用不同的操作系统(我对 Linux 和 Windows 特别感兴趣)之外,是否还有另一种通用方法来构建相同的包含 OpenCL 的项目?

我看到 SPIR-V 是为 OpenCL 2.0+ 设计的,但 NVidia 显卡只支持 OpenCL 1.2-。包含 SPIR-V 模块的应用程序是否可以在 NVidia 显卡上运行?

0 投票
1 回答
663 浏览

opengl - 如何在 SPIR-V 着色器中的 OpenGL 中设置 sampler2D 制服?

我正在使用 glslangValidator 编译此着色器,并使用扩展名为 GL_ARB_gl_spirv 的 OpenGL 4.3 核心配置文件,并使用 GLAD Web 服务生成函数指针以访问核心 OpenGL API,并使用 SDL2 来创建上下文(如果有任何用处)。

如果我有这样的片段着色器:

我将如何设置inTexture使用哪个纹理单元?

从我通过文档在线阅读的内容来看,我无法使用glGetUniformLocation该制服的位置来获取要使用的位置glUniform1i,因为我使用的是 SPIR-V,而不是直接使用 GLSL。

我需要做什么才能将其设置为时尚glUniform1i?我需要location在布局修饰符中设置吗?binding? _ 我尝试使用统一缓冲区对象,但显然sampler2D只能是统一的。

0 投票
1 回答
301 浏览

shader - 使用 SPIRV-Reflect,我怎么知道来自不同着色器的两个描述符绑定实际上是指同一个缓冲区?

我有一个用 HLSL 编写的顶点和片段着色器,我使用DirectX Shader Compiler将其编译成 SPIR-V 二进制文件。

它们都使用一个 common cbuffer(我想将其视为uniform缓冲区)ubo。为了构造一个合适的VkDescriptorSetLayout,我想使用SPIRV-Reflect来获取关于ubo.

虽然,我可以从我的着色器的 SPIR-V 二进制文件的二进制文件中创建单独spv_reflect::ShaderModule的 'vertex_shader和',但我只能通过单独调用两者来fragment_shader检索有关现有描述符绑定的信息EnumerateDescriptorBindings()spv_reflect::ShaderModule

它们都产生了 的存在ubo。但我想要做的是告诉 API 两个着色器使用相同的统一缓冲区ubo,即创建一个VkDescriptorSetLayoutBindingfor并为字段ubo指定VK_SHADER_STAGE_VERTEX_BIT和。VK_SHADER_STAGE_FRAGMENT_BITstageFlags

但为了做到这一点,我需要检测到各个调用产生的两个描述符绑定EnumerateDescriptorBindings都引用同一个缓冲区。我怎样才能做到这一点?

0 投票
1 回答
376 浏览

glsl - 如何在 GLSL 中使用 Vulkan SPIR-V 数据格式

SPIR-V 允许非常冗长的数据格式

GLSL 只有基本数据类型(第 4 章),没有指定位长。

据我所知,为 Vulkan 编写着色器最方便的方法是在 GLSL 中对其进行编程,然后使用 Vulkan SDK 提供的编译器 (glslc.exe) 将文件转换为 SPIR-V 二进制文件。

VK_FORMAT_R4G4_UNORM_PACK8我的问题是如何在使用 glslc.exe 编译我们的着色器代码时在 GLSL 中使用这些详细的数据格式,例如(在上面的 SPIR-V 链接中找到)。有编译器允许的特殊数据类型吗?如果没有,是否可以使用另一种更高级别的语言,然后编译成二进制文件?

例如,如果这是图形管道中使用的属性描述:

正在进行的 GLSL 着色器代码如下所示:

0 投票
1 回答
196 浏览

vulkan - 在 HLSL 中指定推送常量块偏移

我正在尝试编写一个 Vulkan 渲染器,我将 glslangValidator 与 HLSL 一起用于着色器,并尝试实现推送常量。

注释“[[vk::push_constant]]”有效,我使用 spirv_reflect 进行反射,两个推送常量都显示出来,它们按预期工作。我遇到的问题是它们似乎重叠,如果我为“bbbb”分配一个值,“imageColor”会以完全相同的方式受到影响,反之亦然。在反射数据中,两个推送常量块的偏移量都为 0,这就解释了这个问题。但是,我似乎完全无法更改任一推送常量的偏移量。[[vk::offset(x)]] 根本不起作用,它既不影响单个成员的偏移量,也不影响推送常量的偏移量。唯一有效的偏移量是 HLSL 内置的“packoffset”,它仅适用于缓冲区成员。

我将非常感谢您对此事的任何帮助,并愿意提供任何必要的澄清,非常感谢!

0 投票
1 回答
207 浏览

c++ - Vulkan 专业化常量数组

有可能有一个专门化常量的数组,这样 glsl 代码看起来类似于以下内容:

或者,或者:

据我所知,可以使用的专业化常量的数量没有限制,所以感觉很奇怪,这是不可能的,但是当我尝试上述方法时,SPIR-V 编译器通知我“constant_id”只能应用于标量。目前我正在使用统一缓冲区来提供数据,但我想消除后备缓冲区以及在绘制之前绑定缓冲区的需要,并允许系统在可能的情况下在管道创建期间优化代码。

0 投票
1 回答
69 浏览

glsl - 有没有一些方法可以为 vulkan 解决 glsl 中的宏

许多 GLSL 程序使用宏

为了解决不同的配置,当 vulkan 构建管道布局和描述符集时,是否有一些优雅的方法来解决这个问题?

0 投票
0 回答
151 浏览

gpu - SPIR-V 编译成什么?

SPIR-V -???-> GPU 原生

https://www.khronos.org/assets/uploads/developers/library/2016-vulkan-devday-uk/3-Intro-to-spir-v-shaders.pdf 提到它是“IHV 编译器”,但我不能不知道那是什么。我认为它是供应商(Nvidia/AMD/intel)特定的编译器。在哪里可以找到有关从 SPIR-V 到本机 (GPU) 机器格式编译器的更多信息?

0 投票
0 回答
52 浏览

glsl - 使用 Vulkan 运行计算着色器时出现 LLVM 错误

我正在使用 Vulkan 并想运行一个用 GLSL 编写的计算着色器。当试图做这样的事情时

该代码使用 glslc 编译,但在运行时崩溃并显示以下错误消息:

我究竟做错了什么?会不会是动态索引问题?

编辑:它在 vkCreateShaderModule() 崩溃

0 投票
0 回答
37 浏览

glsl - 什么是 SPIR-V 功能(几何)要求

我有 2 个帧缓冲区。首先,一个是分层的。并将 HDR 图像渲染到 Cubemap。在此 Renderpass 几何着色器中使用。

调试层给了我以下错误信息。

我搜索了 SPIR-V 几何着色器要求,但找不到我所缺少的。我的几何着色器代码是