diff --git a/rendering_api/vulkan/src/shader_module/vulkan_shader_module.c b/rendering_api/vulkan/src/shader_module/vulkan_shader_module.c index 4cca412..42cf1d6 100644 --- a/rendering_api/vulkan/src/shader_module/vulkan_shader_module.c +++ b/rendering_api/vulkan/src/shader_module/vulkan_shader_module.c @@ -1,6 +1,16 @@ #include "vulkan_shader_module.h" #include "output_device/vulkan_output_devices.h" +VkShaderStageFlagBits vkGryphnShaderModuleStage(gnShaderModuleStage stage) { + VkShaderStageFlagBits outStage = 0; + switch(stage) { + case GN_VERTEX_SHADER_MODULE: outStage |= VK_SHADER_STAGE_VERTEX_BIT; break; + case GN_FRAGMENT_SHADER_MODULE: outStage |= VK_SHADER_STAGE_FRAGMENT_BIT; break; + case GN_ALL_SHADER_MODULE: return VK_SHADER_STAGE_ALL_GRAPHICS; + } + return outStage; +} + gnReturnCode gnCreateShaderModuleFn(struct gnShaderModule_t *module, struct gnOutputDevice_t *device, struct gnShaderModuleInfo_t shaderModuleInfo) { module->shaderModule = malloc(sizeof(struct gnPlatformShaderModule_t)); @@ -13,14 +23,12 @@ gnReturnCode gnCreateShaderModuleFn(struct gnShaderModule_t *module, struct gnOu return GN_FAILED_TO_CREATE_SHADER_MODULE; } - module->shaderModule->shaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; - if (shaderModuleInfo.stage == GN_VERTEX_SHADER_MODULE) - module->shaderModule->shaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; - else if (shaderModuleInfo.stage == GN_FRAGMENT_SHADER_MODULE) - module->shaderModule->shaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; - - module->shaderModule->shaderStageInfo.module = module->shaderModule->shaderModule; - module->shaderModule->shaderStageInfo.pName = shaderModuleInfo.entryPoint.value; + module->shaderModule->shaderStageInfo = (VkPipelineShaderStageCreateInfo){ + .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .stage = vkGryphnShaderModuleStage(shaderModuleInfo.stage), + .module = module->shaderModule->shaderModule, + .pName = shaderModuleInfo.entryPoint.value + }; return GN_SUCCESS; } diff --git a/rendering_api/vulkan/src/shader_module/vulkan_shader_module.h b/rendering_api/vulkan/src/shader_module/vulkan_shader_module.h index 423784f..53cb33c 100644 --- a/rendering_api/vulkan/src/shader_module/vulkan_shader_module.h +++ b/rendering_api/vulkan/src/shader_module/vulkan_shader_module.h @@ -6,3 +6,5 @@ typedef struct gnPlatformShaderModule_t { VkShaderModule shaderModule; VkPipelineShaderStageCreateInfo shaderStageInfo; } gnPlatformShaderModule; + +VkShaderStageFlagBits vkGryphnShaderModuleStage(gnShaderModuleStage stage); diff --git a/src/core/shader_module/gryphn_shader_module.h b/src/core/shader_module/gryphn_shader_module.h index 1fe3495..3e73619 100644 --- a/src/core/shader_module/gryphn_shader_module.h +++ b/src/core/shader_module/gryphn_shader_module.h @@ -5,11 +5,13 @@ #include "core/gryphn_handles.h" typedef enum gnShaderModuleStage_e { - GN_VERTEX_SHADER_MODULE, GN_FRAGMENT_SHADER_MODULE + GN_VERTEX_SHADER_MODULE = 0x00000001, + GN_FRAGMENT_SHADER_MODULE = 0x00000002, + GN_ALL_SHADER_MODULE = 0xffffffff } gnShaderModuleStage; typedef struct gnShaderModuleInfo_t { - enum gnShaderModuleStage_e stage; + gnShaderModuleStage stage; uint32_t* code; uint32_t size; gnString entryPoint;