#include "vk_pipelines.h" #include #include "vk_initializers.h" #include bool vkutil::load_shader_module(const char* filePath, VkDevice device, VkShaderModule* outShaderModule) { std::ifstream file(filePath, std::ios::ate | std::ios::binary); if(!file.is_open()) { std::println("failed to open file: {}", filePath); return false; } size_t fileSize = (size_t)file.tellg(); //spirv expects the buffer to uint32 std::vector buffer(fileSize / sizeof(uint32_t)); file.seekg(0); file.read((char*)buffer.data(), fileSize); file.close(); VkShaderModuleCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO, .pNext = nullptr, // codeSize has to be in bytes .codeSize = buffer.size() * sizeof(uint32_t), .pCode = buffer.data(), }; VkShaderModule shaderModule; if(vkCreateShaderModule(device, &createInfo, nullptr, &shaderModule) != VK_SUCCESS) { std::println("Error after vkCreateShaderModule"); return false; } *outShaderModule = shaderModule; return true; }