首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >vkCreateShaderModule不会失败,即使pCode没有指向有效的SPIR-V代码

vkCreateShaderModule不会失败,即使pCode没有指向有效的SPIR-V代码
EN

Stack Overflow用户
提问于 2017-12-30 01:48:44
回答 2查看 1K关注 0票数 0

根据文档,VkShaderModuleCreateInfo结构的VkShaderModuleCreateInfo字段

必须指向有效的SPIR-V代码,按Khronos SPIR-V规范进行格式化和打包。

现在,我在以下实用程序函数的调用中输入了一个错误,并且无意地将GLSL代码的文件名提供为shader_file_name

代码语言:javascript
复制
void create_shader_module(VkDevice device, std::string const& shader_file_name)
{
    std::ifstream shader_file(shader_file_name, std::ios::binary);

    shader_file.seekg(0, std::ios_base::end);
    std::size_t const shader_file_size = shader_file.tellg();

    if (shader_file_size > 0)
    {
        assert(shader_file_size % sizeof(std::uint32_t) == 0);

        std::vector<char> binary(shader_file_size);
        shader_file.seekg(0, std::ios_base::beg);
        shader_file.read(binary.data(), shader_file_size);

        VkShaderModuleCreateInfo shader_module_create_info{};
        shader_module_create_info.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
        shader_module_create_info.codeSize = shader_file_size;
        shader_module_create_info.pCode = reinterpret_cast<std::uint32_t const*>(binary.data());

        VkShaderModule shader_module;
        if (vkCreateShaderModule(device, &shader_module_create_info, nullptr, &shader_module) != VK_SUCCESS)
            throw std::exception("Could not create shader module");
    }
}

尽管出现了错误,但代码没有抛出,即vkCreateShaderModule返回了VK_SUCCESS。为什么?

(注意,使用生成的着色器模块对vkCreateGraphicsPipelines进行VkPipelineShaderStageCreateInfo的后续调用失败。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-30 02:21:54

你使用的是Vulkan,而不是OpenGL。在Vulkan中,验证SPIR代码并不取决于实现。vkCreateShaderModule的有效用法是:"pCode必须指向有效的SPIR代码,格式化和打包为Khronos规范所描述的。“与任何其他有效用法语句一样,如果您违反了它,则实现将不会告诉您已经这样做了。

你只会得到未定义的行为。

票数 2
EN

Stack Overflow用户

发布于 2017-12-30 12:29:44

验证层会发现这个问题,并发出一条消息:

SPIR模块无效:无效的SPIR-V幻数.

验证层在vkCreateShaderModule时运行SPIR验证器。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48030218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档