From 159c808dad88cd4c552d53851eb8eece22213dfe Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Sun, 19 Mar 2023 20:17:02 +0800 Subject: [PATCH] added GetCode/GetCodeSize at ShaderCreateInfo --- inc/hgl/shadergen/ShaderCreateInfo.h | 11 +++++++++++ src/ShaderGen/ShaderCreateInfo.cpp | 19 ++++++++++++++++--- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/inc/hgl/shadergen/ShaderCreateInfo.h b/inc/hgl/shadergen/ShaderCreateInfo.h index 701e4508..71b1f7f5 100644 --- a/inc/hgl/shadergen/ShaderCreateInfo.h +++ b/inc/hgl/shadergen/ShaderCreateInfo.h @@ -3,6 +3,12 @@ #include #include + +namespace glsl_compiler +{ + struct SPVData; +} + SHADERGEN_NAMESPACE_BEGIN class MaterialDescriptorInfo; @@ -24,6 +30,8 @@ protected: AnsiString final_shader; + glsl_compiler::SPVData *spv_data; + protected: virtual bool ProcHeader(){return(true);} @@ -63,6 +71,9 @@ public: const AnsiString &GetShaderSource()const{return final_shader;} bool CreateShader(ShaderCreateInfo *); + + const uint32_t *GetCode()const; + const size_t GetCodeSize()const; };//class ShaderCreateInfo SHADERGEN_NAMESPACE_END #endif//HGL_SHADER_CREATE_INFO_INCLUDE diff --git a/src/ShaderGen/ShaderCreateInfo.cpp b/src/ShaderGen/ShaderCreateInfo.cpp index 3ea87a67..8ddf49f8 100644 --- a/src/ShaderGen/ShaderCreateInfo.cpp +++ b/src/ShaderGen/ShaderCreateInfo.cpp @@ -8,10 +8,15 @@ ShaderCreateInfo::ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorIn shader_stage=ss; mdm=m; sdm=new ShaderDescriptorInfo(ss); + + spv_data=nullptr; } ShaderCreateInfo::~ShaderCreateInfo() { + if(spv_data) + glsl_compiler::Free(spv_data); + delete sdm; } @@ -269,13 +274,21 @@ bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc) bool ShaderCreateInfo::CompileToSPV() { - glsl_compiler::SPVData *spv_data=glsl_compiler::Compile(shader_stage,final_shader.c_str()); + spv_data=glsl_compiler::Compile(shader_stage,final_shader.c_str()); if(!spv_data) return(false); - glsl_compiler::Free(spv_data); - return(true); } + +const uint32_t *ShaderCreateInfo::GetCode()const +{ + return spv_data?spv_data->spv_data:nullptr; +} + +const size_t ShaderCreateInfo::GetCodeSize()const +{ + return spv_data?spv_data->spv_length:0; +} SHADERGEN_NAMESPACE_END