Optimize the code layout to make it easier to read
This commit is contained in:
parent
d2568072c7
commit
94e6473ce6
123
glsl2spv.cpp
123
glsl2spv.cpp
@ -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
|
enum class ShaderLanguageType
|
||||||
{
|
{
|
||||||
GLSL=0,
|
GLSL=0,
|
||||||
@ -273,9 +241,11 @@ extern "C"
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=128;
|
||||||
|
|
||||||
struct ShaderStage
|
struct ShaderStage
|
||||||
{
|
{
|
||||||
char name[128];
|
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
uint8_t location;
|
uint8_t location;
|
||||||
uint32_t basetype;
|
uint32_t basetype;
|
||||||
uint32_t vec_size;
|
uint32_t vec_size;
|
||||||
@ -287,35 +257,32 @@ extern "C"
|
|||||||
ShaderStage *items;
|
ShaderStage *items;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ShaderResource
|
struct Descriptor
|
||||||
{
|
|
||||||
char name[128];
|
|
||||||
|
|
||||||
union
|
|
||||||
{
|
|
||||||
struct
|
|
||||||
{
|
{
|
||||||
|
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
uint8_t set;
|
uint8_t set;
|
||||||
uint8_t binding;
|
uint8_t binding;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct
|
struct PushConstant
|
||||||
{
|
{
|
||||||
|
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
uint8_t offset;
|
uint8_t offset;
|
||||||
uint8_t size;
|
uint8_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct
|
struct SubpassInput
|
||||||
{
|
{
|
||||||
|
char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
|
||||||
uint8_t input_attachment_index;
|
uint8_t input_attachment_index;
|
||||||
};
|
uint8_t binding;
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
struct ShaderResourceData
|
struct ShaderResourceData
|
||||||
{
|
{
|
||||||
uint32_t count;
|
uint32_t count;
|
||||||
ShaderResource *items;
|
T *items;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SPVData
|
struct SPVData
|
||||||
@ -328,9 +295,9 @@ extern "C"
|
|||||||
uint32_t spv_length;
|
uint32_t spv_length;
|
||||||
|
|
||||||
ShaderStageData input,output;
|
ShaderStageData input,output;
|
||||||
ShaderResourceData resource[VK_DESCRIPTOR_TYPE_COUNT];
|
ShaderResourceData<Descriptor> resource[VK_DESCRIPTOR_TYPE_COUNT];
|
||||||
ShaderResourceData push_constant;
|
ShaderResourceData<PushConstant> push_constant;
|
||||||
ShaderResourceData subpass_input;
|
ShaderResourceData<SubpassInput> subpass_input;
|
||||||
|
|
||||||
void Init()
|
void Init()
|
||||||
{
|
{
|
||||||
@ -387,11 +354,6 @@ extern "C"
|
|||||||
}
|
}
|
||||||
};//struct SPVData
|
};//struct SPVData
|
||||||
|
|
||||||
void FreeSPVData(SPVData *spv)
|
|
||||||
{
|
|
||||||
delete spv;
|
|
||||||
}
|
|
||||||
|
|
||||||
void OutputShaderStage(ShaderStageData *ssd,ShaderParse *sp,const SPVResVector &stages)
|
void OutputShaderStage(ShaderStageData *ssd,ShaderParse *sp,const SPVResVector &stages)
|
||||||
{
|
{
|
||||||
size_t attr_count=stages.size();
|
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();
|
size_t count=res.size();
|
||||||
|
|
||||||
if(count<=0)return;
|
if(count<=0)return;
|
||||||
|
|
||||||
ssd->count=(uint32_t)count;
|
ssd->count=(uint32_t)count;
|
||||||
ssd->items=new ShaderResource[count];
|
ssd->items=new Descriptor[count];
|
||||||
ShaderResource *sr=ssd->items;
|
Descriptor *sr=ssd->items;
|
||||||
|
|
||||||
for(const spirv_cross::Resource &obj:res)
|
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();
|
size_t count = res.size();
|
||||||
|
|
||||||
if (count <= 0)return;
|
if (count <= 0)return;
|
||||||
|
|
||||||
ssd->count = (uint32_t)count;
|
ssd->count = (uint32_t)count;
|
||||||
ssd->items = new ShaderResource[count];
|
ssd->items = new PushConstant[count];
|
||||||
ShaderResource* sr = ssd->items;
|
PushConstant *sr=ssd->items;
|
||||||
|
|
||||||
for (const spirv_cross::Resource& obj : res)
|
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();
|
size_t count = res.size();
|
||||||
|
|
||||||
if (count <= 0)return;
|
if (count <= 0)return;
|
||||||
|
|
||||||
ssd->count = (uint32_t)count;
|
ssd->count = (uint32_t)count;
|
||||||
ssd->items = new ShaderResource[count];
|
ssd->items = new SubpassInput[count];
|
||||||
ShaderResource* sr = ssd->items;
|
SubpassInput *sr = ssd->items;
|
||||||
|
|
||||||
for (const spirv_cross::Resource& obj : res)
|
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(
|
SPVData *Shader2SPV(
|
||||||
const uint32_t shader_stage,
|
const uint32_t shader_stage,
|
||||||
const char * shader_source,
|
const char * shader_source,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user