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;
class DescriptorSet;
struct ShaderStage;
struct ShaderAttribute;
class ShaderResource;
class ShaderModule;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -10,7 +10,7 @@ VK_NAMESPACE_BEGIN
{
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;
@@ -19,11 +19,11 @@ VK_NAMESPACE_BEGIN
if(count<=0)
return(false);
ShaderStage *ss;
ShaderAttribute *ss;
for(uint i=0;i<count;i++)
{
ss=new ShaderStage;
ss=new ShaderAttribute;
cbr.Read(ss->location);
cbr.CastRead<uint8>(ss->basetype);
@@ -45,10 +45,10 @@ VK_NAMESPACE_BEGIN
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();
ShaderStage **ss=stage_inputs.GetData();
const int count=stage_io.input.GetCount();
ShaderAttribute **ss=stage_io.input.GetData();
for(int i=0;i<count;i++)
{
@@ -63,8 +63,8 @@ VK_NAMESPACE_BEGIN
const int ShaderResource::GetStageInputBinding(const AnsiString &name) const
{
const int count=stage_inputs.GetCount();
ShaderStage **ss=stage_inputs.GetData();
const int count=stage_io.input.GetCount();
ShaderAttribute **ss=stage_io.input.GetData();
for(int i=0;i<count;i++)
{

View File

@@ -37,7 +37,7 @@ SET(GLSL_COMPILER_SOURCE GLSLCompiler.h
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})
SET(STANDARD_MATERIAL_SOURCE ${SHADERGEN_INCLUDE_PATH}/StandardMaterial.h

View File

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

View File

@@ -17,7 +17,7 @@ ShaderCreateInfo::~ShaderCreateInfo()
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());
@@ -89,7 +89,7 @@ bool ShaderCreateInfo::ProcOutput()
{
output_struct.Clear();
const ShaderStageList &ssl=sdm->GetShaderStageIO().output;
const ShaderAttributeList &ssl=sdm->GetShaderStageIO().output;
if(ssl.GetCount()<=0)return(true);
@@ -99,7 +99,7 @@ bool ShaderCreateInfo::ProcOutput()
for(auto *ss:ssl)
{
output_struct+="\t";
output_struct+=GetShaderStageTypeName(ss);
output_struct+=GetShaderAttributeTypename(ss);
output_struct+=" ";
output_struct+=ss->name;
output_struct+=";\n";

View File

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

View File

@@ -10,7 +10,7 @@ using namespace hgl::graph;
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());
@@ -48,10 +48,10 @@ bool ShaderCreateInfoVertex::ProcInput(ShaderCreateInfo *)
for(auto *ss:input)
{
final_shader+="layout(location=";
final_shader+=UTF8String::numberOf(ss->location);
final_shader+=AnsiString::numberOf(ss->location);
final_shader+=") in ";
final_shader+=UTF8String(GetShaderStageTypeName(ss));
final_shader+=" "+UTF8String(ss->name);
final_shader+=GetShaderAttributeTypename(ss);
final_shader+=" "+AnsiString(ss->name);
final_shader+=";\n";
}
}

View File

@@ -3,14 +3,14 @@
SHADERGEN_NAMESPACE_BEGIN
ShaderDescriptorInfo::ShaderDescriptorInfo(VkShaderStageFlagBits flag_bit)
{
shader_stage=flag_bit;
stage_flag=flag_bit;
hgl_zero(push_constant);
}
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++)
if(hgl::strcmp(ol[i]->name,ss->name)==0)
@@ -20,7 +20,7 @@ namespace
}
}//namespace
bool ShaderDescriptorInfo::AddInput(ShaderStage *ss)
bool ShaderDescriptorInfo::AddInput(ShaderAttribute *ss)
{
if(!ss)return(false);
@@ -31,7 +31,7 @@ bool ShaderDescriptorInfo::AddInput(ShaderStage *ss)
return(true);
}
bool ShaderDescriptorInfo::AddOutput(ShaderStage *ss)
bool ShaderDescriptorInfo::AddOutput(ShaderAttribute *ss)
{
if(!ss)return(false);
@@ -110,7 +110,7 @@ void ShaderDescriptorInfo::DebugOutput(int index)
LOG_INFO("\tStage Input "+UTF8String::numberOf(stage_io.input.GetCount()));
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)
@@ -118,7 +118,7 @@ void ShaderDescriptorInfo::DebugOutput(int index)
LOG_INFO("\tStage Output "+UTF8String::numberOf(stage_io.output.GetCount()));
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)