From d5b69fbe71b2fac2144f3edb477fe0c7bc9f4f2b Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Fri, 12 May 2023 21:36:52 +0800 Subject: [PATCH] removed mi_data from Material --- inc/hgl/graph/VKMaterial.h | 32 +----------------- src/SceneGraph/Vulkan/VKDeviceMaterial.cpp | 39 ---------------------- src/SceneGraph/Vulkan/VKMaterial.cpp | 7 ---- 3 files changed, 1 insertion(+), 77 deletions(-) diff --git a/inc/hgl/graph/VKMaterial.h b/inc/hgl/graph/VKMaterial.h index 70bdd7bc..48f9bd6f 100644 --- a/inc/hgl/graph/VKMaterial.h +++ b/inc/hgl/graph/VKMaterial.h @@ -27,9 +27,6 @@ struct MaterialData MaterialParameterArray mp_array; - uint8 *mi_data; ///<材质实例数据区 - uint32_t mi_size; ///<单个材质实例数据长度 - private: friend class Material; @@ -45,8 +42,6 @@ class Material { MaterialData *data; - uint32_t mi_count; ///<材质数量 - private: friend GPUDevice; @@ -55,7 +50,7 @@ private: public: - Material(MaterialData *); + Material(MaterialData *md):data(md){} virtual ~Material(); const UTF8String & GetName ()const{return data->name;} @@ -68,31 +63,6 @@ public: const VkPipelineLayout GetPipelineLayout ()const; const PipelineLayoutData * GetPipelineLayoutData ()const{return data->pipeline_layout_data;} -public: - - const uint32_t GetMICount ()const{return mi_count;} - const uint32_t GetMISize ()const{return data->mi_size;} - const void * GetMIData ()const{return data->mi_data;} - - template - T * GetMIData (const uint32_t index)const - { - if(!data->mi_data)return(nullptr); - if(index>=mi_count)return(nullptr); - - return data->mi_data+index*mi_size; - } - - template - bool WriteMIData (const uint32_t index,const T *write_data) - { - if(!data->mi_data)return(false); - if(index>=mi_count)return(false); - - memcpy(data->mi_data+index*mi_size,write_data,data->mi_size); - return(true); - } - public: MaterialParameters * GetMP (const DescriptorSetType &type) diff --git a/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp b/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp index 7a2a98ed..1d2b94b7 100644 --- a/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceMaterial.cpp @@ -117,45 +117,6 @@ Material *GPUDevice::CreateMaterial(const UTF8String &mtl_name,ShaderModuleMap * else hgl_zero(data->mp_array); - const VkDeviceSize ubo_range=this->GetUBORange(); - - // ubo_range大致分为三档: - // - // 16k: Mali-T系列或更早、Mali-G71、nVidia GeForce RTX 3070 Laptop为16k - // - // 64k: 大部分手机与PC均为64k - // - // >64k: Intel 核显与 PowerVR 为128MB,AMD显卡为4GB,可视为随显存无上限。 - // - // 我们使用uint8类型在vertex input中保存MaterialInstance ID,表示范围0-255。 - // 所以MaterialInstance结构容量按16k/64k分为两个档次,64字节和256字节 - - // 如果一定要使用超过16K/64K硬件限制的容量,有两种办法 - // 一、分多次渲染,使用UBO Offset偏移UBO数据区。 - // 二、使用SSBO,但这样会导致性能下降,所以不推荐使用。 - - // 但我们不解决这个问题 - // 我们天然要求将材质实例数据分为两个等级,同时要求一次渲染不能超过256种材质实例。 - // 所以 UBO Range为16k时,实例数据不能超过64字节。UBO Range为64k时,实例数据不能超过256字节。 - - if(desc_manager->hasSet(DescriptorSetType::PerMaterial)) - { - uint size; - - if(ubo_range>=64*1024) - size=64*1024; - else - size=ubo_range; - - data->mi_size=0; - data->mi_data=new uint8[size]; - } - else - { - data->mi_size=0; - data->mi_data=nullptr; - } - return(new Material(data)); } VK_NAMESPACE_END diff --git a/src/SceneGraph/Vulkan/VKMaterial.cpp b/src/SceneGraph/Vulkan/VKMaterial.cpp index 10859bed..61100181 100644 --- a/src/SceneGraph/Vulkan/VKMaterial.cpp +++ b/src/SceneGraph/Vulkan/VKMaterial.cpp @@ -16,15 +16,8 @@ MaterialData::~MaterialData() delete vertex_input; } -Material::Material(MaterialData *md):data(md) -{ - mi_count=0; -} - Material::~Material() { - delete[] data->mi_data; - delete data->pipeline_layout_data; delete data; }