reanmed to ShaderAttribute instead of ShaderStage

This commit is contained in:
2023-03-17 16:06:11 +08:00
parent 9ee5f0adaa
commit 4de8139936
14 changed files with 51 additions and 52 deletions

View File

@@ -73,7 +73,7 @@ class Semaphore;
struct PipelineLayoutData; struct PipelineLayoutData;
class DescriptorSet; class DescriptorSet;
struct ShaderStage; struct ShaderAttribute;
class ShaderResource; class ShaderResource;
class ShaderModule; class ShaderModule;

View File

@@ -60,7 +60,7 @@ class VertexShaderModule:public ShaderModule
uint32_t attr_count; uint32_t attr_count;
VAT *type_list; VAT *type_list;
const char **name_list; const char **name_list;
ShaderStage **ssi_list; ShaderAttribute **ssi_list;
private: private:
@@ -75,9 +75,9 @@ public:
* 获取输入流绑定点需要注意的时这里获取的binding并非是shader中的binding/location而是绑定顺序的序列号。对应vkCmdBindVertexBuffer的缓冲区序列号 * 获取输入流绑定点需要注意的时这里获取的binding并非是shader中的binding/location而是绑定顺序的序列号。对应vkCmdBindVertexBuffer的缓冲区序列号
*/ */
const int GetStageInputBinding(const AnsiString &name)const{return shader_resource->GetStageInputBinding(name);} const int GetStageInputBinding(const AnsiString &name)const{return shader_resource->GetStageInputBinding(name);}
const ShaderStage * GetStageInput (const AnsiString &name)const{return shader_resource->GetStageInput(name);} const ShaderAttribute * GetStageInput (const AnsiString &name)const{return shader_resource->GetStageInput(name);}
const uint GetStageInputCount () const{return shader_resource->GetStageInputCount();} const uint GetStageInputCount () const{return shader_resource->GetStageInputCount();}
const ShaderStageList & GetStageInputs () const{return shader_resource->GetStageInputs();} const ShaderAttributeList & GetStageInputs () const{return shader_resource->GetStageInputs();}
//const uint32_t GetAttrCount()const{return attr_count;} //const uint32_t GetAttrCount()const{return attr_count;}

View File

@@ -16,27 +16,26 @@ class ShaderResource
const void *spv_data; const void *spv_data;
uint32 spv_size; uint32 spv_size;
ShaderStageList stage_inputs; ShaderStageIO stage_io;
// ShaderStageList stage_outputs;
public: public:
ShaderResource(const VkShaderStageFlagBits &,const void *,const uint32); ShaderResource(const VkShaderStageFlagBits &,const void *,const uint32);
virtual ~ShaderResource()=default; virtual ~ShaderResource()=default;
const VkShaderStageFlagBits GetStage ()const {return stage_flag;} const VkShaderStageFlagBits GetStageFlagBit ()const {return stage_flag;}
const char * GetStageName ()const {return GetShaderStageName(stage_flag);} const char * GetStageFlagName ()const {return GetShaderStageName(stage_flag);}
const uint32_t * GetCode ()const {return (uint32_t *)spv_data;} const uint32_t * GetCode ()const {return (uint32_t *)spv_data;}
const uint32_t GetCodeSize ()const {return spv_size;} const uint32_t GetCodeSize ()const {return spv_size;}
ShaderStageList & GetStageInputs () {return stage_inputs;} ShaderAttributeList & GetStageInputs () {return stage_io.input;}
// ShaderStageList & GetStageOutputs () {return stage_outputs;} // ShaderAttributeList & GetStageOutputs () {return stage_io.output;}
const uint GetStageInputCount ()const {return stage_inputs.GetCount();} const uint GetStageInputCount ()const {return stage_io.input.GetCount();}
// const uint GetStageOutputCount ()const {return stage_outputs.GetCount();} // const uint GetStageOutputCount ()const {return stage_io.output.GetCount();}
const ShaderStage * GetStageInput (const AnsiString &)const; const ShaderAttribute * GetStageInput (const AnsiString &)const;
const int GetStageInputBinding(const AnsiString &)const; const int GetStageInputBinding(const AnsiString &)const;
};//class ShaderResource };//class ShaderResource

View File

@@ -19,7 +19,7 @@ using SubpassInputDescriptorList=ObjectList<SubpassInputDescriptor>;
*/ */
class ShaderDescriptorInfo class ShaderDescriptorInfo
{ {
VkShaderStageFlagBits shader_stage; VkShaderStageFlagBits stage_flag;
ShaderStageIO stage_io; ShaderStageIO stage_io;
@@ -39,8 +39,8 @@ public:
ShaderDescriptorInfo(VkShaderStageFlagBits); ShaderDescriptorInfo(VkShaderStageFlagBits);
~ShaderDescriptorInfo()=default; ~ShaderDescriptorInfo()=default;
const VkShaderStageFlagBits GetStageBits()const { return shader_stage; } const VkShaderStageFlagBits GetStageFlag()const { return stage_flag; }
const AnsiString GetStageName()const { return AnsiString(GetShaderStageName(shader_stage)); } const AnsiString GetStageName()const { return AnsiString(GetShaderStageName(stage_flag)); }
public: public:
@@ -57,8 +57,8 @@ public:
public: public:
bool AddInput(ShaderStage *); bool AddInput(ShaderAttribute *);
bool AddOutput(ShaderStage *); bool AddOutput(ShaderAttribute *);
bool AddUBO(DescriptorSetType type,const UBODescriptor *sd); bool AddUBO(DescriptorSetType type,const UBODescriptor *sd);
bool AddSampler(DescriptorSetType type,const SamplerDescriptor *sd); bool AddSampler(DescriptorSetType type,const SamplerDescriptor *sd);

View File

@@ -139,7 +139,7 @@ Material *RenderResource::CreateMaterial(const OSString &filename)
if(sr) if(sr)
{ {
shader_name=filename+OS_TEXT("?")+ToOSString(sr->GetStageName()); shader_name=filename+OS_TEXT("?")+ToOSString(sr->GetStageFlagName());
sm=CreateShaderModule(shader_name,sr); sm=CreateShaderModule(shader_name,sr);

View File

@@ -7,7 +7,7 @@ ShaderModule *GPUDevice::CreateShaderModule(ShaderResource *sr)
{ {
if(!sr)return(nullptr); if(!sr)return(nullptr);
PipelineShaderStageCreateInfo *shader_stage=new PipelineShaderStageCreateInfo(sr->GetStage()); PipelineShaderStageCreateInfo *shader_stage=new PipelineShaderStageCreateInfo(sr->GetStageFlagBit());
ShaderModuleCreateInfo moduleCreateInfo(sr); ShaderModuleCreateInfo moduleCreateInfo(sr);
@@ -16,7 +16,7 @@ ShaderModule *GPUDevice::CreateShaderModule(ShaderResource *sr)
ShaderModule *sm; ShaderModule *sm;
if(sr->GetStage()==VK_SHADER_STAGE_VERTEX_BIT) if(sr->GetStageFlagBit()==VK_SHADER_STAGE_VERTEX_BIT)
sm=new VertexShaderModule(attr->device,shader_stage,sr); sm=new VertexShaderModule(attr->device,shader_stage,sr);
else else
sm=new ShaderModule(attr->device,shader_stage,sr); sm=new ShaderModule(attr->device,shader_stage,sr);
@@ -44,7 +44,7 @@ ShaderModule::~ShaderModule()
VertexShaderModule::VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr):ShaderModule(dev,pssci,sr) VertexShaderModule::VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr):ShaderModule(dev,pssci,sr)
{ {
const ShaderStageList &stage_input_list=sr->GetStageInputs(); const ShaderAttributeList &stage_input_list=sr->GetStageInputs();
attr_count=stage_input_list.GetCount(); attr_count=stage_input_list.GetCount();
ssi_list=stage_input_list.GetData(); ssi_list=stage_input_list.GetData();
@@ -80,7 +80,7 @@ VIL *VertexShaderModule::CreateVIL(const VILConfig *cfg)
VkVertexInputBindingDescription *bind=binding_list; VkVertexInputBindingDescription *bind=binding_list;
VkVertexInputAttributeDescription *attr=attribute_list; VkVertexInputAttributeDescription *attr=attribute_list;
ShaderStage **si=ssi_list; ShaderAttribute **si=ssi_list;
VAConfig vac; VAConfig vac;
for(uint i=0;i<attr_count;i++) for(uint i=0;i<attr_count;i++)

View File

@@ -10,7 +10,7 @@ VK_NAMESPACE_BEGIN
{ {
ObjectMap<OSString,ShaderResource> shader_resource_by_filename; ObjectMap<OSString,ShaderResource> shader_resource_by_filename;
const bool LoadShaderStages(ShaderStageList &ss_list,io::ConstBufferReader &cbr) const bool LoadShaderStages(ShaderAttributeList &ss_list,io::ConstBufferReader &cbr)
{ {
uint count; uint count;
@@ -19,11 +19,11 @@ VK_NAMESPACE_BEGIN
if(count<=0) if(count<=0)
return(false); return(false);
ShaderStage *ss; ShaderAttribute *ss;
for(uint i=0;i<count;i++) for(uint i=0;i<count;i++)
{ {
ss=new ShaderStage; ss=new ShaderAttribute;
cbr.Read(ss->location); cbr.Read(ss->location);
cbr.CastRead<uint8>(ss->basetype); cbr.CastRead<uint8>(ss->basetype);
@@ -45,10 +45,10 @@ VK_NAMESPACE_BEGIN
spv_size=size; spv_size=size;
} }
const ShaderStage *ShaderResource::GetStageInput(const AnsiString &name) const const ShaderAttribute *ShaderResource::GetStageInput(const AnsiString &name) const
{ {
const int count=stage_inputs.GetCount(); const int count=stage_io.input.GetCount();
ShaderStage **ss=stage_inputs.GetData(); ShaderAttribute **ss=stage_io.input.GetData();
for(int i=0;i<count;i++) for(int i=0;i<count;i++)
{ {
@@ -63,8 +63,8 @@ VK_NAMESPACE_BEGIN
const int ShaderResource::GetStageInputBinding(const AnsiString &name) const const int ShaderResource::GetStageInputBinding(const AnsiString &name) const
{ {
const int count=stage_inputs.GetCount(); const int count=stage_io.input.GetCount();
ShaderStage **ss=stage_inputs.GetData(); ShaderAttribute **ss=stage_io.input.GetData();
for(int i=0;i<count;i++) for(int i=0;i<count;i++)
{ {

View File

@@ -37,8 +37,8 @@ SET(GLSL_COMPILER_SOURCE GLSLCompiler.h
SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE}) SOURCE_GROUP("GLSL Compiler" FILES ${GLSL_COMPILER_SOURCE})
SOURCE_GROUP("Material Create Info\\Descriptor Manager" FILES ${SHADERGEN_HEADER_FILES} SOURCE_GROUP("Material Create Info\\Descriptor Info" FILES ${SHADERGEN_HEADER_FILES}
${SHADERGEN_SOURCE_FILES}) ${SHADERGEN_SOURCE_FILES})
SET(STANDARD_MATERIAL_SOURCE ${SHADERGEN_INCLUDE_PATH}/StandardMaterial.h SET(STANDARD_MATERIAL_SOURCE ${SHADERGEN_INCLUDE_PATH}/StandardMaterial.h
StandardMaterial.cpp) StandardMaterial.cpp)

View File

@@ -37,7 +37,7 @@ namespace glsl_compiler
constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=32; constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=32;
struct ShaderStage struct ShaderAttribute
{ {
char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; char name[SHADER_RESOURCE_NAME_MAX_LENGTH];
uint8_t location; uint8_t location;
@@ -48,7 +48,7 @@ namespace glsl_compiler
struct ShaderStageData struct ShaderStageData
{ {
uint32_t count; uint32_t count;
ShaderStage *items; ShaderAttribute *items;
}; };
struct Descriptor struct Descriptor

View File

@@ -17,7 +17,7 @@ ShaderCreateInfo::~ShaderCreateInfo()
int ShaderCreateInfo::AddOutput(const VAT &type,const AnsiString &name) int ShaderCreateInfo::AddOutput(const VAT &type,const AnsiString &name)
{ {
ShaderStage *ss=new ShaderStage; ShaderAttribute *ss=new ShaderAttribute;
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str()); hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
@@ -89,7 +89,7 @@ bool ShaderCreateInfo::ProcOutput()
{ {
output_struct.Clear(); output_struct.Clear();
const ShaderStageList &ssl=sdm->GetShaderStageIO().output; const ShaderAttributeList &ssl=sdm->GetShaderStageIO().output;
if(ssl.GetCount()<=0)return(true); if(ssl.GetCount()<=0)return(true);
@@ -99,7 +99,7 @@ bool ShaderCreateInfo::ProcOutput()
for(auto *ss:ssl) for(auto *ss:ssl)
{ {
output_struct+="\t"; output_struct+="\t";
output_struct+=GetShaderStageTypeName(ss); output_struct+=GetShaderAttributeTypename(ss);
output_struct+=" "; output_struct+=" ";
output_struct+=ss->name; output_struct+=ss->name;
output_struct+=";\n"; output_struct+=";\n";

View File

@@ -12,7 +12,7 @@ void ShaderCreateInfoFragment::UseDefaultMain()
const auto &output_list=sdm->GetShaderStageIO().output; const auto &output_list=sdm->GetShaderStageIO().output;
const uint count=output_list.GetCount(); const uint count=output_list.GetCount();
ShaderStage **o=output_list.GetData(); ShaderAttribute **o=output_list.GetData();
for(uint i=0;i<count;i++) for(uint i=0;i<count;i++)
{ {
@@ -33,14 +33,14 @@ bool ShaderCreateInfoFragment::ProcOutput()
const auto &output_list=sdm->GetShaderStageIO().output; const auto &output_list=sdm->GetShaderStageIO().output;
const uint count=output_list.GetCount(); const uint count=output_list.GetCount();
ShaderStage **o=output_list.GetData(); ShaderAttribute **o=output_list.GetData();
for(uint i=0;i<count;i++) for(uint i=0;i<count;i++)
{ {
final_shader+="layout(location="; final_shader+="layout(location=";
final_shader+=AnsiString::numberOf(i); final_shader+=AnsiString::numberOf(i);
final_shader+=") out "; final_shader+=") out ";
final_shader+=GetShaderStageTypeName(*o); final_shader+=GetShaderAttributeTypename(*o);
final_shader+=" "; final_shader+=" ";
final_shader+=(*o)->name; final_shader+=(*o)->name;
final_shader+=";\n"; final_shader+=";\n";

View File

@@ -10,7 +10,7 @@ using namespace hgl::graph;
int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name) int ShaderCreateInfoVertex::AddInput(const VAT &type,const AnsiString &name)
{ {
ShaderStage *ss=new ShaderStage; ShaderAttribute *ss=new ShaderAttribute;
hgl::strcpy(ss->name,sizeof(ss->name),name.c_str()); hgl::strcpy(ss->name,sizeof(ss->name),name.c_str());
@@ -48,10 +48,10 @@ bool ShaderCreateInfoVertex::ProcInput(ShaderCreateInfo *)
for(auto *ss:input) for(auto *ss:input)
{ {
final_shader+="layout(location="; final_shader+="layout(location=";
final_shader+=UTF8String::numberOf(ss->location); final_shader+=AnsiString::numberOf(ss->location);
final_shader+=") in "; final_shader+=") in ";
final_shader+=UTF8String(GetShaderStageTypeName(ss)); final_shader+=GetShaderAttributeTypename(ss);
final_shader+=" "+UTF8String(ss->name); final_shader+=" "+AnsiString(ss->name);
final_shader+=";\n"; final_shader+=";\n";
} }
} }

View File

@@ -3,14 +3,14 @@
SHADERGEN_NAMESPACE_BEGIN SHADERGEN_NAMESPACE_BEGIN
ShaderDescriptorInfo::ShaderDescriptorInfo(VkShaderStageFlagBits flag_bit) ShaderDescriptorInfo::ShaderDescriptorInfo(VkShaderStageFlagBits flag_bit)
{ {
shader_stage=flag_bit; stage_flag=flag_bit;
hgl_zero(push_constant); hgl_zero(push_constant);
} }
namespace namespace
{ {
bool Find(ObjectList<ShaderStage> &ol,const ShaderStage *ss) bool Find(ObjectList<ShaderAttribute> &ol,const ShaderAttribute *ss)
{ {
for(int i=0;i<ol.GetCount();i++) for(int i=0;i<ol.GetCount();i++)
if(hgl::strcmp(ol[i]->name,ss->name)==0) if(hgl::strcmp(ol[i]->name,ss->name)==0)
@@ -20,7 +20,7 @@ namespace
} }
}//namespace }//namespace
bool ShaderDescriptorInfo::AddInput(ShaderStage *ss) bool ShaderDescriptorInfo::AddInput(ShaderAttribute *ss)
{ {
if(!ss)return(false); if(!ss)return(false);
@@ -31,7 +31,7 @@ bool ShaderDescriptorInfo::AddInput(ShaderStage *ss)
return(true); return(true);
} }
bool ShaderDescriptorInfo::AddOutput(ShaderStage *ss) bool ShaderDescriptorInfo::AddOutput(ShaderAttribute *ss)
{ {
if(!ss)return(false); if(!ss)return(false);
@@ -110,7 +110,7 @@ void ShaderDescriptorInfo::DebugOutput(int index)
LOG_INFO("\tStage Input "+UTF8String::numberOf(stage_io.input.GetCount())); LOG_INFO("\tStage Input "+UTF8String::numberOf(stage_io.input.GetCount()));
for(auto *ss:stage_io.input) for(auto *ss:stage_io.input)
LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") in "+UTF8String(GetShaderStageTypeName(ss))+"\t"+UTF8String(ss->name)); LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") in "+GetShaderAttributeTypename(ss)+"\t"+UTF8String(ss->name));
} }
if(stage_io.output.GetCount()>0) if(stage_io.output.GetCount()>0)
@@ -118,7 +118,7 @@ void ShaderDescriptorInfo::DebugOutput(int index)
LOG_INFO("\tStage Output "+UTF8String::numberOf(stage_io.output.GetCount())); LOG_INFO("\tStage Output "+UTF8String::numberOf(stage_io.output.GetCount()));
for(auto *ss:stage_io.output) for(auto *ss:stage_io.output)
LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") out "+UTF8String(GetShaderStageTypeName(ss))+"\t"+UTF8String(ss->name)); LOG_INFO("\t\tlayout(location="+UTF8String::numberOf(ss->location)+") out "+GetShaderAttributeTypename(ss)+"\t"+UTF8String(ss->name));
} }
if(ubo_list.GetCount()>0) if(ubo_list.GetCount()>0)