From 21a63f4a9be16736966e96e66e1a0a75bac8c598 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Sat, 27 Apr 2024 02:19:01 +0800 Subject: [PATCH] improved PrimitiveData --- CMSceneGraph | 2 +- inc/hgl/graph/VKPrimitive.h | 3 ++- inc/hgl/graph/VKPrimitiveData.h | 34 +++++++++++++++++++++++++++----- src/ShaderGen/MaterialFileData.h | 4 +++- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/CMSceneGraph b/CMSceneGraph index 509273e4..c330c635 160000 --- a/CMSceneGraph +++ b/CMSceneGraph @@ -1 +1 @@ -Subproject commit 509273e44937426ecc51116f5094564b96ea8b87 +Subproject commit c330c635b226079f29664541b6c766959c244769 diff --git a/inc/hgl/graph/VKPrimitive.h b/inc/hgl/graph/VKPrimitive.h index 16c35ce6..b3745783 100644 --- a/inc/hgl/graph/VKPrimitive.h +++ b/inc/hgl/graph/VKPrimitive.h @@ -50,9 +50,10 @@ public: const VkDeviceSize GetVertexCount ()const {return vertex_count;} - bool GetVABAccess (const AnsiString &,VABAccess *); const int GetBufferCount ()const {return buffer_list.GetCount();} + bool GetVABAccess (const AnsiString &,VABAccess *); + const IBAccess * GetIBAccess ()const {return ib_access.buffer?&ib_access:nullptr;} };//class Primitive VK_NAMESPACE_END diff --git a/inc/hgl/graph/VKPrimitiveData.h b/inc/hgl/graph/VKPrimitiveData.h index da54c0a5..f31c3f5e 100644 --- a/inc/hgl/graph/VKPrimitiveData.h +++ b/inc/hgl/graph/VKPrimitiveData.h @@ -6,17 +6,41 @@ VK_NAMESPACE_BEGIN +/* + 1.截止2024.4.27,根据vulkan.gpuinfo.org统计,只有9%的设备maxVertexInputAttributes为16,不存在低于16的设备。 + 9.0%的设备为28 - 31 + 70.7%的设备为32 + 9.6%的设备为64 + + 由于我们暂时没有发现需要使用16个以上属性的情况,所以这里暂定使用16。 + (如果时间过去久远,可再次查询此值是否可改成更高的值,以及是否需要) + + 2.为何va_name使用char[][]而不是String以及动态分配内存? + + 就是为了必避动态分配内存,以及可以直接memcpy处理,所以此处这样定义。 +*/ + +struct VABAccessInfo +{ + char va_name[VERTEX_ATTRIB_NAME_MAX_LENGTH+1]; + VABAccess vab_access; +}; + +constexpr const uint HGL_MAX_VERTEX_ATTRIB_COUNT=16; ///<最大顶点属性数量 + struct PrimitiveData { - VkDeviceSize vertex_count; + VkDeviceSize vertex_count; - uint32_t va_count; + uint32_t va_count; - VABAccess *vab_list; + VABAccessInfo vab_list[HGL_MAX_VERTEX_ATTRIB_COUNT]; - IBAccess ib_access; + IBAccess ib_access; - AABB BoundingBox; + AABB BoundingBox; };//struct PrimitiveData +constexpr const uint PRIMITIVE_DATA_SIZE=sizeof(PrimitiveData); + VK_NAMESPACE_END diff --git a/src/ShaderGen/MaterialFileData.h b/src/ShaderGen/MaterialFileData.h index c31ada42..a5f92d2e 100644 --- a/src/ShaderGen/MaterialFileData.h +++ b/src/ShaderGen/MaterialFileData.h @@ -12,11 +12,13 @@ namespace material_file using namespace hgl; using namespace hgl::graph; + constexpr size_t SHADER_RESOURCE_NAME_MAX_LENGTH=VERTEX_ATTRIB_NAME_MAX_LENGTH; + struct ShaderIOAttrib { VAT vat; - char name[SHADER_RESOURCE_NAME_MAX_LENGTH]; + char name[VERTEX_ATTRIB_NAME_MAX_LENGTH]; }; struct MaterialInstanceData