- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试在运行时将我的 glsl 着色器编译为 spirv 时遇到此错误。在这一点上,我完全被难住了,我不知道是什么导致了错误,也无法在网上找到任何东西。
错误只发生在我的顶点着色器上,我的片段着色器编译没有问题(虽然它们都“编译”得很好,但在创建 vulkan 模块而不是使用 shaderc 编译时会发生错误)。此外,当我从命令行编译并读取那些已编译的文件时,着色器模块的创建没有问题。
这是我的顶点着色器:
# version 450
# extension GL_ARB_separate_shader_objects : enable
layout(location = 0) in vec2 aPos;
layout(location = 1) in vec3 aColor;
layout(location = 0) out vec3 fragColor;
void main()
{
gl_Position = vec4(aPos, 1.0, 1.0);
fragColor = aColor;
}
这是我用来读取和编译 .vert 文件的代码
std::vector<char> readFile(const std::string& filename)
{
std::ifstream file(filename, std::ios::ate | std::ios::binary);
if (!file.is_open())
{
throw std::runtime_error("failed to open file!");
}
size_t fileSize = (size_t) file.tellg();
std::vector<char> buffer(fileSize);
file.seekg(0);
file.read(buffer.data(), fileSize);
file.close();
return buffer;
}
std::vector<uint32_t> compileToSPIRV(const char* sPath, const shaderc_shader_kind kind)
{
auto shaderVect = readFile(sPath);
std::string shaderText(shaderVect.begin(), shaderVect.end());
shaderc::Compiler compiler;
shaderc::CompileOptions options;
options.AddMacroDefinition("MY_DEFINE", "1");
options.SetOptimizationLevel(shaderc_optimization_level_size);
auto assembly = compiler.CompileGlslToSpvAssembly(shaderText, kind, sPath, options);
std::string ass(assembly.cbegin(), assembly.cend());
auto compile = compiler.AssembleToSpv(ass.c_str(), ass.size());
std::vector<uint32_t> comp(compile.cbegin(), compile.cend());
return comp;
}
感谢您的帮助。如果您希望我包含任何其他代码,请告诉我。
编辑:创建着色器模块:
VkShaderModule createShaderModule(const std::vector<uint32_t>& code)
{
VkShaderModuleCreateInfo moduleInfo = {};
moduleInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
moduleInfo.codeSize = code.size();
moduleInfo.pCode = code.data();
VkShaderModule shaderModule;
if (vkCreateShaderModule(device, &moduleInfo, nullptr, &shaderModule) != VK_SUCCESS)
{
throw std::runtime_error("Failed to create shader module");
}
return shaderModule;
}
最佳答案
VkShaderModuleCreateInfo::codeSize
以字节为单位,而不是 uint32_t
。所以可能应该是 4*code.size()
。
关于c++ - SPIR-V 模块无效 : Codesize must be a multiple of 4 but is 191,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58830897/
我一直在阅读有关异构计算的文章,并遇到了 SPIR-V .在那里我发现了以下内容: SPIR-V is the first open standard, cross-API intermediate
对于逆向工程师来说,将图形调试器附加到 OpenGL 应用程序以提取着色器源代码非常简单。据我了解,另一方面,Vulkan 使用 SPIR-V 字节码,而不是将明文着色器传递给图形 API。 SPIR
我有一个计算着色器: #version 450 #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_gpu_sha
所以我需要得到一些GLSL的SPIR-V代码 我能找到的关于该主题的所有资源都涉及为图形等设置整个环境。 在最简单的情况下,当我有一些 GLSL 代码并且我想获得 SPIR-V 代码时,最好的方法是什
我想知道 nvidia 是否支持 spir 后端?如果是,我找不到任何关于此的文档和示例示例。但如果没有,有没有办法将 spir 后端工作到 nvidia gpus 上? 提前致谢 最佳答案 由于 S
我已经成功地使用 OpenCL 和 VS2015 编写并执行了一个 .cl 程序。我现在正尝试按照 these guidelines 将其转换为 OpenCL C++ ,其中提到: To compil
已关闭。此问题旨在寻求有关书籍、工具、软件库等的建议。不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以
我需要在 SPIR-V 中编译 OpenCL 内核以与 Vulkan 一起使用,我尝试使用 Google CLSPV https://github.com/google/clspv ,但问题出现在矢量
SPIR-V 规范允许模块请求将分支展平或使用适当指令的控制装饰展开循环。这对着色器的最终性能配置文件有重大影响。但是,与 HLSL 不同,标准 GLSL 没有办法表达这一点。目的是驱动程序可以为您做
我一直在尝试在运行时将我的 glsl 着色器编译为 spirv 时遇到此错误。在这一点上,我完全被难住了,我不知道是什么导致了错误,也无法在网上找到任何东西。 错误只发生在我的顶点着色器上,我的片段着
我正在使用来自 github 的 Jonno Robson 的 Vulkan 代码库:Vulkan-Terrain-Generator作为更好地理解 Vulkan 的指南和/或学习引用。我对源代码本身
我正在尝试在 Windows 上使用 LunarG Vulkan SDK 1.0.37.0 编译以下着色器: #version 450 core #extension GL_ARB_bindless_
我希望 Visual Studio 自动检测着色器文件的更改并运行 glslangValidator 作为构建步骤,而不是手动将我的 GLSL 着色器编译为 SPIR-V。我正在使用 Premake
我是一名优秀的程序员,十分优秀!