ULRE/inc/hgl/graph/VKShaderResource.h

68 lines
2.1 KiB
C
Raw Normal View History

2021-09-13 20:39:25 +08:00
#ifndef HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE
#define HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE
#include<hgl/type/String.h>
#include<hgl/type/List.h>
#include<hgl/type/StringList.h>
#include<hgl/graph/VK.h>
2023-02-23 19:01:01 +08:00
#include<hgl/io/ConstBufferReader.h>
2021-09-13 20:39:25 +08:00
VK_NAMESPACE_BEGIN
struct ShaderStage
{
AnsiString name;
2023-02-23 19:01:01 +08:00
uint8 location;
2021-09-13 20:39:25 +08:00
VertexAttribType type; ///<成份数量(如vec4中的4)
bool dynamic; ///<是否动态数据
2021-09-13 20:39:25 +08:00
};//struct ShaderStage
using ShaderStageList =ObjectList<ShaderStage>;
class ShaderResource
{
VkShaderStageFlagBits stage_flag;
const void *spv_data;
uint32 spv_size;
ShaderStageList stage_inputs;
// ShaderStageList stage_outputs;
2021-09-13 20:39:25 +08:00
public:
ShaderResource(const VkShaderStageFlagBits &,const void *,const uint32);
virtual ~ShaderResource()=default;
const VkShaderStageFlagBits GetStage ()const {return stage_flag;}
const os_char * GetStageName ()const;
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;}
2021-09-13 20:39:25 +08:00
const uint GetStageInputCount ()const {return stage_inputs.GetCount();}
// const uint GetStageOutputCount ()const {return stage_outputs.GetCount();}
2021-09-13 20:39:25 +08:00
const ShaderStage * GetStageInput (const AnsiString &)const;
const int GetStageInputBinding(const AnsiString &)const;
};//class ShaderResource
2023-02-23 19:01:01 +08:00
ShaderResource *LoadShaderResource(io::ConstBufferReader &);
2021-09-13 20:39:25 +08:00
struct ShaderModuleCreateInfo:public vkstruct_flag<VkShaderModuleCreateInfo,VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO>
{
public:
ShaderModuleCreateInfo(ShaderResource *sr)
{
codeSize=sr->GetCodeSize();
pCode =sr->GetCode();
}
};//struct ShaderModuleCreateInfo
VK_NAMESPACE_END
#endif//HGL_GRAPH_VULKAN_SHADER_RESOURCE_INCLUDE