Optimize the code layout to make it easier to read

This commit is contained in:
HuYingzhuo(hugo/hyzboy) 2023-02-18 15:40:55 +08:00
parent d2568072c7
commit 94e6473ce6

View File

@ -184,38 +184,6 @@ EShLanguage FindLanguage(const VkShaderStageFlagBits shader_type)
}
}
extern "C"
{
bool InitShaderCompiler()
{
init_default_build_in_resource();
return glslang::InitializeProcess();
}
void CloseShaderCompiler()
{
glslang::FinalizeProcess();
}
bool GetLimit(TBuiltInResource *bir,const int size)
{
if(!bir)return(false);
if(size!=sizeof(TBuiltInResource))return(false);
memcpy(bir,&default_build_in_resource,size);
return(true);
}
bool SetLimit(TBuiltInResource *bir,const int size)
{
if(!bir)return(false);
if(size!=sizeof(TBuiltInResource))return(false);
memcpy(&default_build_in_resource,bir,size);
return(true);
}
enum class ShaderLanguageType
{
GLSL=0,
@ -273,9 +241,11 @@ extern "C"
return str;
}
constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=128;
struct ShaderStage
{
char name[128];
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
uint8_t location;
uint32_t basetype;
uint32_t vec_size;
@ -287,35 +257,32 @@ extern "C"
ShaderStage *items;
};
struct ShaderResource
{
char name[128];
union
{
struct
struct Descriptor
{
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
uint8_t set;
uint8_t binding;
};
struct
struct PushConstant
{
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
uint8_t offset;
uint8_t size;
};
struct
struct SubpassInput
{
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
uint8_t input_attachment_index;
};
};
uint8_t binding;
};
template<typename T>
struct ShaderResourceData
{
uint32_t count;
ShaderResource *items;
T *items;
};
struct SPVData
@ -328,9 +295,9 @@ extern "C"
uint32_t spv_length;
ShaderStageData input,output;
ShaderResourceData resource[VK_DESCRIPTOR_TYPE_COUNT];
ShaderResourceData push_constant;
ShaderResourceData subpass_input;
ShaderResourceData<Descriptor> resource[VK_DESCRIPTOR_TYPE_COUNT];
ShaderResourceData<PushConstant> push_constant;
ShaderResourceData<SubpassInput> subpass_input;
void Init()
{
@ -387,11 +354,6 @@ extern "C"
}
};//struct SPVData
void FreeSPVData(SPVData *spv)
{
delete spv;
}
void OutputShaderStage(ShaderStageData *ssd,ShaderParse *sp,const SPVResVector &stages)
{
size_t attr_count=stages.size();
@ -421,15 +383,15 @@ extern "C"
}
}
void OutputShaderResource(ShaderResourceData *ssd,ShaderParse *sp,const SPVResVector &res)
void OutputShaderResource(ShaderResourceData<Descriptor> *ssd,ShaderParse *sp,const SPVResVector &res)
{
size_t count=res.size();
if(count<=0)return;
ssd->count=(uint32_t)count;
ssd->items=new ShaderResource[count];
ShaderResource *sr=ssd->items;
ssd->items=new Descriptor[count];
Descriptor *sr=ssd->items;
for(const spirv_cross::Resource &obj:res)
{
@ -441,15 +403,15 @@ extern "C"
}
}
void OutputPushConstant(ShaderResourceData* ssd, ShaderParse* sp, const SPVResVector& res)
void OutputPushConstant(ShaderResourceData<PushConstant> *ssd, ShaderParse* sp, const SPVResVector& res)
{
size_t count = res.size();
if (count <= 0)return;
ssd->count = (uint32_t)count;
ssd->items = new ShaderResource[count];
ShaderResource* sr = ssd->items;
ssd->items = new PushConstant[count];
PushConstant *sr=ssd->items;
for (const spirv_cross::Resource& obj : res)
{
@ -461,15 +423,15 @@ extern "C"
}
}
void OutputSubpassInput(ShaderResourceData* ssd, ShaderParse* sp, const SPVResVector& res)
void OutputSubpassInput(ShaderResourceData<SubpassInput> *ssd, ShaderParse* sp, const SPVResVector& res)
{
size_t count = res.size();
if (count <= 0)return;
ssd->count = (uint32_t)count;
ssd->items = new ShaderResource[count];
ShaderResource* sr = ssd->items;
ssd->items = new SubpassInput[count];
SubpassInput *sr = ssd->items;
for (const spirv_cross::Resource& obj : res)
{
@ -481,6 +443,43 @@ extern "C"
}
}
extern "C"
{
bool InitShaderCompiler()
{
init_default_build_in_resource();
return glslang::InitializeProcess();
}
void CloseShaderCompiler()
{
glslang::FinalizeProcess();
}
bool GetLimit(TBuiltInResource *bir,const int size)
{
if(!bir)return(false);
if(size!=sizeof(TBuiltInResource))return(false);
memcpy(bir,&default_build_in_resource,size);
return(true);
}
bool SetLimit(TBuiltInResource *bir,const int size)
{
if(!bir)return(false);
if(size!=sizeof(TBuiltInResource))return(false);
memcpy(&default_build_in_resource,bir,size);
return(true);
}
void FreeSPVData(SPVData *spv)
{
delete spv;
}
SPVData *Shader2SPV(
const uint32_t shader_stage,
const char * shader_source,