improvement the ShaderResource module
This commit is contained in:
parent
ca44bf2cf7
commit
30b5639acc
@ -8,10 +8,17 @@ namespace hgl
|
|||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
constexpr char SHADER_FILE_HEADER[]="Shader\x1A";
|
constexpr char SHADER_FILE_HEADER[] ="Shader\x1A";
|
||||||
constexpr uint SHADER_FILE_HEADER_BYTES=sizeof(SHADER_FILE_HEADER)-1;
|
constexpr uint SHADER_FILE_HEADER_BYTES=sizeof(SHADER_FILE_HEADER)-1;
|
||||||
|
|
||||||
uint8 *LoadShaderStages(ShaderStageList &ss_list,uint8 *data)
|
constexpr uint32 SHADER_FILE_MIN_SIZE =SHADER_FILE_HEADER_BYTES
|
||||||
|
+1 //version
|
||||||
|
+sizeof(uint32) //shader flag
|
||||||
|
+sizeof(uint32) //spv_size
|
||||||
|
+1 //input states count
|
||||||
|
+1; //output states count
|
||||||
|
|
||||||
|
const uint8 *LoadShaderStages(ShaderStageList &ss_list,const uint8 *data)
|
||||||
{
|
{
|
||||||
const uint count=*data++;
|
const uint count=*data++;
|
||||||
|
|
||||||
@ -47,7 +54,7 @@ namespace hgl
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 *LoadShaderDescriptor(ShaderDescriptorList &sd_list,uint8 *data)
|
const uint8 *LoadShaderDescriptor(ShaderDescriptorList &sd_list,const uint8 *data)
|
||||||
{
|
{
|
||||||
const uint32 total_bytes=*(uint32 *)data;
|
const uint32 total_bytes=*(uint32 *)data;
|
||||||
data+=sizeof(uint32);
|
data+=sizeof(uint32);
|
||||||
@ -72,19 +79,34 @@ namespace hgl
|
|||||||
}
|
}
|
||||||
}//namespcae
|
}//namespcae
|
||||||
|
|
||||||
|
ShaderResource::ShaderResource(const void *fd,const void *sd,const uint32 size)
|
||||||
|
{
|
||||||
|
data=fd;
|
||||||
|
spv_data=sd;
|
||||||
|
spv_size=size;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderResource::~ShaderResource()
|
||||||
|
{
|
||||||
|
delete[] data;
|
||||||
|
}
|
||||||
|
|
||||||
ShaderResource *LoadShaderResoruce(const OSString &filename)
|
ShaderResource *LoadShaderResoruce(const OSString &filename)
|
||||||
{
|
{
|
||||||
int64 filesize;
|
int64 filesize;
|
||||||
AutoDeleteArray<uint8> origin_filedata=(uint8 *)filesystem::LoadFileToMemory(filename,filesize);
|
uint8 *origin_filedata=(uint8 *)filesystem::LoadFileToMemory(filename,filesize);
|
||||||
|
|
||||||
uint8 *filedata=origin_filedata;
|
if(!origin_filedata)return(nullptr);
|
||||||
|
|
||||||
if(!filedata)return(nullptr);
|
if(filesize<SHADER_FILE_MIN_SIZE
|
||||||
|
||memcmp(origin_filedata,SHADER_FILE_HEADER,SHADER_FILE_HEADER_BYTES))
|
||||||
const uint8 *file_end=filedata+filesize;
|
{
|
||||||
|
delete[] origin_filedata;
|
||||||
if(memcmp(filedata,SHADER_FILE_HEADER,SHADER_FILE_HEADER_BYTES))
|
|
||||||
return(false);
|
return(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint8 *filedata=origin_filedata;
|
||||||
|
const uint8 *file_end=filedata+filesize;
|
||||||
|
|
||||||
filedata+=SHADER_FILE_HEADER_BYTES;
|
filedata+=SHADER_FILE_HEADER_BYTES;
|
||||||
|
|
||||||
@ -97,10 +119,9 @@ namespace hgl
|
|||||||
const uint32 spv_size=*(uint32 *)filedata;
|
const uint32 spv_size=*(uint32 *)filedata;
|
||||||
filedata+=sizeof(uint32);
|
filedata+=sizeof(uint32);
|
||||||
|
|
||||||
const void *spv_data=filedata;
|
ShaderResource *sr=new ShaderResource(origin_filedata,filedata,spv_size);
|
||||||
filedata+=spv_size;
|
|
||||||
|
|
||||||
ShaderResource *sr=new ShaderResource;
|
filedata+=spv_size;
|
||||||
|
|
||||||
filedata=LoadShaderStages(sr->GetInputStages(),filedata);
|
filedata=LoadShaderStages(sr->GetInputStages(),filedata);
|
||||||
filedata=LoadShaderStages(sr->GetOutputStages(),filedata);
|
filedata=LoadShaderStages(sr->GetOutputStages(),filedata);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user