support new VertexAttribType instead spirv_cross::SPIRType::BaseType

This commit is contained in:
hyzboy 2020-08-25 18:12:42 +08:00
parent 54e5531fc4
commit b4ca17e44b
9 changed files with 29 additions and 29 deletions

@ -1 +1 @@
Subproject commit c4343466aac0bb49f36ea5a4c568baf95a3ee006
Subproject commit 0cb791614f905ecaaa26b251f01b4c9f4ea5e274

2
CMCore

@ -1 +1 @@
Subproject commit 73b9fc265c3ab70b47fe1def8a34b66ac6c5e090
Subproject commit 80d1e17dcb28bba754a826044462bf08ab81de32

@ -1 +1 @@
Subproject commit f5117f0a84958defd11c337e512bd0a32bc9efca
Subproject commit 12590b9c6420114154696d23dab0ca14e0baae21

@ -1 +1 @@
Subproject commit 81c18490a375fbeaa1ea99340916e44833ef6a74
Subproject commit 762124c15723d71fd9d2b056d91ff4bf7737fd59

View File

@ -36,7 +36,7 @@ namespace hgl
protected:
const uint32_t dc_num; ///<每个数据成员数(比如二维坐标为2、三维坐标为3)
const uint32_t vec_size; ///<每个数据成员数(比如二维坐标为2、三维坐标为3)
uint32_t count; ///<数据个数
const uint32_t stride; ///<每组数据字节数
@ -46,7 +46,7 @@ namespace hgl
public:
VertexAttribData(uint32_t c,uint32_t dc,uint32_t cs,VkFormat fmt):count(c),dc_num(dc),stride(cs),total_bytes(cs*c),vk_format(fmt)
VertexAttribData(uint32_t c,uint32_t dc,uint32_t cs,VkFormat fmt):count(c),vec_size(dc),stride(cs),total_bytes(cs*c),vk_format(fmt)
{
mem_data = hgl_malloc(total_bytes); //在很多情况下hgl_malloc分配的内存是对齐的这样有效率上的提升
}
@ -58,7 +58,7 @@ namespace hgl
}
const VkFormat GetVulkanFormat ()const{return vk_format;} ///<取得数据类型
const uint32_t GetComponent ()const{return dc_num;} ///<取数缓冲区元数据数量
const uint32_t GetVecSize ()const{return vec_size;} ///<取数缓冲区元数据成份数量
const uint32_t GetCount ()const{return count;} ///<取得数据数量
const uint32_t GetStride ()const{return stride;} ///<取得每一组数据字节数
void * GetData ()const{return mem_data;} ///<取得数据指针
@ -73,7 +73,7 @@ namespace hgl
* @param vecsize vec数量
* @param vertex_count
*/
VAD *CreateVertexAttribData(const vulkan::BaseType base_type,const uint32_t vecsize,const uint32_t vertex_count);
VAD *CreateVertexAttribData(const VertexAttribType *,const uint32_t vertex_count);
//这个函数比较重要就不搞成CreateVAD的简写了
}//namespace graph
}//namespace hgl

View File

@ -10,13 +10,9 @@ VK_NAMESPACE_BEGIN
AnsiString name;
uint location;
BaseType base_type; ///<基本类型(如vec4中的vec)
uint component; ///<成份数量(如vec4中的4)
VertexAttribType type; ///<成份数量(如vec4中的4)
VkFormat format; ///<对应的Vulkan格式(如vec4对应的FMT_RGBA32F)
uint32_t stride; ///<对应Vulkan格式的每数据字节数
uint binding;
};//struct ShaderStage

View File

@ -35,7 +35,7 @@ namespace hgl
ssb=new ShaderStageBind;
ssb->data =hgl::graph::CreateVertexAttribData(ss->base_type,ss->component,vertices_number);
ssb->data =hgl::graph::CreateVertexAttribData(&(ss->type),vertices_number);
ssb->name =name;
ssb->binding=ss->binding;
@ -76,7 +76,7 @@ namespace hgl
if(!ss)
return(nullptr);
if(ss->stride*vertices_number!=bytes)
if(ss->type.GetStride()*vertices_number!=bytes)
return(nullptr);
ssb=new ShaderStageBind;

View File

@ -4,15 +4,14 @@ namespace hgl
{
namespace graph
{
VAD *CreateVertexAttribData(const vulkan::BaseType base_type,const uint32_t vecsize,const uint32_t vertex_count)
VAD *CreateVertexAttribData(const VertexAttribType *type,const uint32_t vertex_count)
{
VkFormat fmt;
uint32_t stride;
if(!vulkan::GetVulkanFormatStride(fmt,stride,base_type,vecsize))
if(!type||!type->Check())
return(nullptr);
return(new VertexAttribData(vertex_count,vecsize,stride,fmt));
VkFormat fmt=vulkan::GetVulkanFormat(type);
return(new VertexAttribData(vertex_count,type->vec_size,type->GetStride(),fmt));
}
}//namespace graph
}//namespace hgl

View File

@ -36,10 +36,10 @@ VK_NAMESPACE_BEGIN
ss=new ShaderStage;
ss->location=*data++;
ss->base_type=(VK_NAMESPACE::BaseType)*data++;
ss->component=*data++;
ss->type.basetype=(VertexAttribBaseType)*data++;
ss->type.vec_size=*data++;
VK_NAMESPACE::GetVulkanFormatStride(ss->format,ss->stride,ss->base_type,ss->component);
ss->format=VK_NAMESPACE::GetVulkanFormat(&(ss->type));
str_len=*data++;
ss->name.SetString((char *)data,str_len);
@ -61,10 +61,15 @@ VK_NAMESPACE_BEGIN
uint str_len;
sd_list->binding_list.PreMalloc(count);
sd_list->set_list.PreMalloc(count);
for(uint i=0;i<count;i++)
{
if(version>=1)
sd_list->set_list.Add(*data++);
else
sd_list->set_list.Add(0);
sd_list->binding_list.Add(*data++);
str_len=*data++;