diff --git a/src/main.c b/src/main.c index efaad3b..64e6564 100644 --- a/src/main.c +++ b/src/main.c @@ -637,7 +637,8 @@ ShaderBuffer loadShaderIntoBuffer(const char *fileLocation) { fileLocation); exit(EXIT_FAILURE); } - buf.buffer = malloc(sizeof(char) * (buf.bufferSize)); // Not '\0' terminting ourselves + buf.buffer = + malloc(sizeof(char) * (buf.bufferSize)); // Not '\0' terminting ourselves size_t tempSize = fread(buf.buffer, sizeof(char), buf.bufferSize, file); if (ferror(file) != 0) { @@ -649,20 +650,55 @@ ShaderBuffer loadShaderIntoBuffer(const char *fileLocation) { return buf; } -void createGraphicsPipeline(Application *app) { - ShaderBuffer vertShader = loadShaderIntoBuffer("shaders/shader.vert.spv"); - for (int i = 0; i < vertShader.bufferSize;i++){ - printf("%c",vertShader.buffer[i]); - } - printf("\n"); - ShaderBuffer fragShader = loadShaderIntoBuffer("shaders/shader.frag.spv"); - for (int i = 0; i < fragShader.bufferSize;i++){ - printf("%c",fragShader.buffer[i]); - } - printf("\n"); +VkShaderModule createShaderModule(VkDevice device, ShaderBuffer code) { + VkShaderModuleCreateInfo createInfo = {0}; + createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; + createInfo.codeSize = code.bufferSize; + createInfo.pCode = (uint32_t *)code.buffer; - free(vertShader.buffer); - free(fragShader.buffer); + VkShaderModule shaderModule; + if (vkCreateShaderModule(device, &createInfo, NULL, &shaderModule) != + VK_SUCCESS) { + fprintf(stderr, "Failed to create shaderModule from Shader Code!"); + exit(EXIT_FAILURE); + } + + return shaderModule; +} + +void createGraphicsPipeline(Application *app) { + ShaderBuffer vertShaderCode = loadShaderIntoBuffer("shaders/shader.vert.spv"); + ShaderBuffer fragShaderCode = loadShaderIntoBuffer("shaders/shader.frag.spv"); + + VkShaderModule vertShaderModule = + createShaderModule(app->device, vertShaderCode); + VkShaderModule fragShaderModule = + createShaderModule(app->device, fragShaderCode); + + free(vertShaderCode.buffer); + free(fragShaderCode.buffer); + + VkPipelineShaderStageCreateInfo vertShaderStageInfo = {0}; + vertShaderStageInfo.sType = + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; + vertShaderStageInfo.module = vertShaderModule; + vertShaderStageInfo.pName = "main"; + vertShaderStageInfo.pSpecializationInfo = NULL; + + VkPipelineShaderStageCreateInfo fragShaderStageInfo = {0}; + fragShaderStageInfo.sType = + VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; + fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; + fragShaderStageInfo.module = fragShaderModule; + fragShaderStageInfo.pName = "main"; + vertShaderStageInfo.pSpecializationInfo = NULL; + + VkPipelineShaderStageCreateInfo shaderStages[] = {vertShaderStageInfo, + fragShaderStageInfo}; + + vkDestroyShaderModule(app->device, fragShaderModule, NULL); + vkDestroyShaderModule(app->device, vertShaderModule, NULL); } void initVulkan(Application *app) {