simplify shader modules

This commit is contained in:
Greg Wells
2025-06-07 14:46:26 -04:00
parent 5108342e5b
commit 77002cd26a
3 changed files with 22 additions and 10 deletions

View File

@@ -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;
}

View File

@@ -6,3 +6,5 @@ typedef struct gnPlatformShaderModule_t {
VkShaderModule shaderModule;
VkPipelineShaderStageCreateInfo shaderStageInfo;
} gnPlatformShaderModule;
VkShaderStageFlagBits vkGryphnShaderModuleStage(gnShaderModuleStage stage);

View File

@@ -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;