added GetCode/GetCodeSize at ShaderCreateInfo

This commit is contained in:
2023-03-19 20:17:02 +08:00
parent facdec5556
commit 159c808dad
2 changed files with 27 additions and 3 deletions

View File

@@ -3,6 +3,12 @@
#include<hgl/shadergen/ShaderGenNamespace.h> #include<hgl/shadergen/ShaderGenNamespace.h>
#include<hgl/graph/VertexAttrib.h> #include<hgl/graph/VertexAttrib.h>
namespace glsl_compiler
{
struct SPVData;
}
SHADERGEN_NAMESPACE_BEGIN SHADERGEN_NAMESPACE_BEGIN
class MaterialDescriptorInfo; class MaterialDescriptorInfo;
@@ -24,6 +30,8 @@ protected:
AnsiString final_shader; AnsiString final_shader;
glsl_compiler::SPVData *spv_data;
protected: protected:
virtual bool ProcHeader(){return(true);} virtual bool ProcHeader(){return(true);}
@@ -63,6 +71,9 @@ public:
const AnsiString &GetShaderSource()const{return final_shader;} const AnsiString &GetShaderSource()const{return final_shader;}
bool CreateShader(ShaderCreateInfo *); bool CreateShader(ShaderCreateInfo *);
const uint32_t *GetCode()const;
const size_t GetCodeSize()const;
};//class ShaderCreateInfo };//class ShaderCreateInfo
SHADERGEN_NAMESPACE_END SHADERGEN_NAMESPACE_END
#endif//HGL_SHADER_CREATE_INFO_INCLUDE #endif//HGL_SHADER_CREATE_INFO_INCLUDE

View File

@@ -8,10 +8,15 @@ ShaderCreateInfo::ShaderCreateInfo(VkShaderStageFlagBits ss,MaterialDescriptorIn
shader_stage=ss; shader_stage=ss;
mdm=m; mdm=m;
sdm=new ShaderDescriptorInfo(ss); sdm=new ShaderDescriptorInfo(ss);
spv_data=nullptr;
} }
ShaderCreateInfo::~ShaderCreateInfo() ShaderCreateInfo::~ShaderCreateInfo()
{ {
if(spv_data)
glsl_compiler::Free(spv_data);
delete sdm; delete sdm;
} }
@@ -269,13 +274,21 @@ bool ShaderCreateInfo::CreateShader(ShaderCreateInfo *last_sc)
bool ShaderCreateInfo::CompileToSPV() 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) if(!spv_data)
return(false); return(false);
glsl_compiler::Free(spv_data);
return(true); 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 SHADERGEN_NAMESPACE_END