Files
Gryphn/rendering_api/vulkan/src/shaders/vulkan_shader.cpp
2025-05-05 19:29:42 -04:00

36 lines
1.5 KiB
C++

#include <vulkan/vulkan.h>
#include "core/shaders/gryphn_shader.h"
#include "vulkan_shader_module.h"
VkShaderStageFlagBits vulkanShaderModuleType(gnShaderModuleStage name) {
if (name == GN_VERTEX_SHADER_MODULE) return VK_SHADER_STAGE_VERTEX_BIT;
if (name == GN_FRAGMENT_SHADER_MODULE) return VK_SHADER_STAGE_FRAGMENT_BIT;
return VK_SHADER_STAGE_VERTEX_BIT; // assume that shits a vertex shader
}
GN_EXPORT gnReturnCode gnBuildShaderFn(gnShader* shader) {
for (int i = 0; i < gnListLength(shader->shaderModules); i++) {
gnShaderModule* module = gnListGetPtr(shader->shaderModules, i);
// std::cout << "Building ";
// if (module->shaderType == GN_VERTEX_SHADER_MODULE) std::cout << "GN_VERTEX_SHADER_MODULE";
// if (module->shaderType == GN_FRAGMENT_SHADER_MODULE) std::cout << "GN_FRAGMENT_SHADER_MODULE";
// std::cout << " shader\n";
module->shaderModule->stageCreateInfo = {};
module->shaderModule->stageCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
module->shaderModule->stageCreateInfo.stage = vulkanShaderModuleType(module->shaderType);
module->shaderModule->stageCreateInfo.module = module->shaderModule->module;
module->shaderModule->stageCreateInfo.pName = "main";
}
return GN_SUCCESS;
}
GN_EXPORT void gnShaderDestroyModulesFn(gnShader& shader) {
for (int i = 0; i < gnListLength(shader.shaderModules); i++) {
gnShaderModule* module = gnListGetPtr(shader.shaderModules, i);
gnDestroyShaderModule(*module);
}
}