gpt4 book ai didi

c++ - 带有 glsl 着色器的 Vulkan 教程

转载 作者:搜寻专家 更新时间:2023-10-31 00:26:12 33 4
gpt4 key购买 nike

我复制粘贴了this中的代码vulkan 教程,尝试将其拆解并理解 Vulkan API。但是,我无法让它无错误地运行。

如果我禁用验证,代码确实会按预期运行。但是,如果启用了验证,我会得到:

validation layer: SPIR-V module not valid: Codesize must be a multiple of 4 but is 421. The Vulkan spec states: If pCode points to SPIR-V code, codeSize must be a multiple of 4 (https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VUID-VkShaderModuleCreateInfo-pCode-01376

如果我理解正确的话,这就是 LunarSDK 验证检查之一。

所以我认为我必须要求一个 vulkan 扩展来处理 glsl 着色器而不是 Spir-v 但我不确定该怎么做,因为这是我第一次处理 API 而且我不知道我的代码是什么我在找。我尝试阅读教程和文档,但找不到修复方法。

最佳答案

Vulkan 期望 SPIR-V shaders (Standard Portable Intermediate Representation) .只有通过扩展,vulkan 实现才允许着色器的其他输入。 Khronos 集团提供了一个 GLSL -> SPIR-V 编译器,您可以将其嵌入到您的应用程序中并在运行时编译,或者在构建时预编译并随您的应用程序一起发布。此编译器随 LunarGSDK 一起提供。使用 glslang编译器在 Vulkan Tutorial here 中进行了解释.你可以通过命令编译:

/path/to/glsllanvalidator/glslangValidator.exe -V shader.frag

我相信您必须使用正确的文件扩展名(.frag、.vert、.comp 等,在 OpenGL 中未使用),编译器才能识别着色器。有关独立编译器的更多信息 can be found here .使用此方法,您将在构建步骤中运行 glslangValidator

要将编译器嵌入到您的应用程序中,您可以使用找到的资源 in this answer并使用像 shaderc 这样的辅助库,或者您可以使用 glslang directly 自行嵌入它.

SPIR-V 是一种低级汇编语言,由提供给 vulkan 驱动程序的二进制文件表示。然后司机可以JIT compile the shader ,无论 vulkan 驱动程序如何,您都可以拥有相同的着色器代码。这里的不同之处在于,如果为驱动程序提供了代码的人类可读文本表示,则不会强制驱动程序执行所需的所有编译步骤。驱动程序只需要理解这种低级汇编表示。这允许开发人员使用编译为 SPIR-V(现在包括 HLSL )的任何语言前端。作为一个额外的好处,这从驱动程序中消除了巨大的开销,从而减少了驱动程序维护者的主要错误来源,并且意味着您不需要将程序存储为可以在发布应用程序时轻松提取的纯文本.

关于c++ - 带有 glsl 着色器的 Vulkan 教程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53471050/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com