ULRE/inc/hgl/graph/VKShaderModule.h

94 lines
4.2 KiB
C
Raw Normal View History

#ifndef HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
#define HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE
2021-09-13 20:39:25 +08:00
#include<hgl/graph/VKShaderResource.h>
2022-02-08 11:12:17 +08:00
#include<hgl/type/SortedSets.h>
VK_NAMESPACE_BEGIN
/**
* Shader模块<br>
* shader数据和信息ShaderModuleManage创建和删除
*/
class ShaderModule
{
VkDevice device;
int ref_count;
private:
VkPipelineShaderStageCreateInfo *stage_create_info;
2020-06-09 19:40:08 +08:00
protected:
ShaderResource *shader_resource;
public:
ShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *);
virtual ~ShaderModule();
const int IncRef(){return ++ref_count;}
const int DecRef(){return --ref_count;}
public:
const VkShaderStageFlagBits GetStage ()const{return stage_create_info->stage;}
const bool IsVertex ()const{return stage_create_info->stage==VK_SHADER_STAGE_VERTEX_BIT;}
const bool IsTessControl ()const{return stage_create_info->stage==VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT;}
const bool IsTessEval ()const{return stage_create_info->stage==VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT;}
const bool IsGeometry ()const{return stage_create_info->stage==VK_SHADER_STAGE_GEOMETRY_BIT;}
const bool IsFragment ()const{return stage_create_info->stage==VK_SHADER_STAGE_FRAGMENT_BIT;}
const bool IsCompute ()const{return stage_create_info->stage==VK_SHADER_STAGE_COMPUTE_BIT;}
const bool IsTask ()const{return stage_create_info->stage==VK_SHADER_STAGE_TASK_BIT_NV;}
const bool IsMesh ()const{return stage_create_info->stage==VK_SHADER_STAGE_MESH_BIT_NV;}
const VkPipelineShaderStageCreateInfo * GetCreateInfo ()const{return stage_create_info;}
};//class ShaderModule
/**
* Shader模块<br>
* shader在最前方执行shader多了VertexInput的数据
*/
class VertexShaderModule:public ShaderModule
{
uint32_t attr_count;
VertexAttribType *type_list;
const AnsiString **name_list;
ShaderStage **ssi_list;
private:
2022-02-08 11:12:17 +08:00
SortedSets<VAB *> vab_sets;
public:
VertexShaderModule(VkDevice dev,VkPipelineShaderStageCreateInfo *pssci,ShaderResource *sr);
virtual ~VertexShaderModule();
/**
* binding并非是shader中的binding/locationvkCmdBindVertexBuffer的缓冲区序列号
*/
2020-07-07 19:16:23 +08:00
const int GetStageInputBinding(const AnsiString &name)const{return shader_resource->GetStageInputBinding(name);}
2020-08-04 01:27:35 +08:00
const ShaderStage * 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 uint32_t GetAttrCount()const{return attr_count;}
//const VkVertexInputBindingDescription * GetDescList ()const{return binding_list;}
//const VkVertexInputAttributeDescription * GetAttrList ()const{return attribute_list;}
//const VkVertexInputBindingDescription * GetDesc (const uint32_t index)const{return (index>=attr_count?nullptr:binding_list+index);}
//const VkVertexInputAttributeDescription * GetAttr (const uint32_t index)const{return (index>=attr_count?nullptr:attribute_list+index);}
public:
VAB * CreateVAB(const VABConfigInfo *format_map=nullptr);
2021-11-29 17:04:55 +08:00
bool Release(VAB *);
const uint32_t GetInstanceCount()const{return vab_sets.GetCount();}
};//class VertexShaderModule:public ShaderModule
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_SHADER_MODULE_INCLUDE