diff --git a/example/Vulkan/indices_rect.cpp b/example/Vulkan/indices_rect.cpp index e45fa95e..43aaf4a8 100644 --- a/example/Vulkan/indices_rect.cpp +++ b/example/Vulkan/indices_rect.cpp @@ -74,7 +74,6 @@ private: return(false); if(!mp_global->BindUBO("g_camera",ubo_camera_info))return(false); - if(!mp_global->BindUBO("g_frag_camera",ubo_camera_info))return(false); mp_global->Update(); } diff --git a/inc/hgl/graph/VKMaterialDescriptorSets.h b/inc/hgl/graph/VKMaterialDescriptorSets.h index 79284092..f4997bcc 100644 --- a/inc/hgl/graph/VKMaterialDescriptorSets.h +++ b/inc/hgl/graph/VKMaterialDescriptorSets.h @@ -32,13 +32,7 @@ class MaterialDescriptorSets private: - struct ShaderDescriptorSet - { - uint32_t count; - VkDescriptorSetLayoutBinding *binding_list; - }; - - ShaderDescriptorSet sds[size_t(DescriptorSetType::RANGE_SIZE)]; + DescriptorSetLayoutCreateInfo sds[size_t(DescriptorSetType::RANGE_SIZE)]; public: @@ -51,8 +45,7 @@ public: const int GetSSBO (const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, name);} const int GetSampler(const AnsiString &name)const{return GetBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, name);} - const int GetBindingCount (const DescriptorSetType &type)const{return sds[(size_t)type].count;} - const VkDescriptorSetLayoutBinding *GetBindingList (const DescriptorSetType &type)const{return sds[(size_t)type].binding_list;} + const DescriptorSetLayoutCreateInfo *GetBinding(const DescriptorSetType &type)const{return sds+size_t(type);} };//class MaterialDescriptorSets VK_NAMESPACE_END #endif//HGL_GRAPH_VULKAN_MATERIAL_DESCRIPTOR_SETS_INCLUDE diff --git a/res b/res index a0c84d12..404938c1 160000 --- a/res +++ b/res @@ -1 +1 @@ -Subproject commit a0c84d12663e1d0ce0ad22faa5cd89ede26af90f +Subproject commit 404938c1f73f3eaa0554e47c6ff5ff0979c1a281 diff --git a/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp b/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp index 2d05cc4b..db0fccfa 100644 --- a/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp +++ b/src/SceneGraph/Vulkan/VKCommandBufferRender.cpp @@ -130,7 +130,7 @@ bool RenderCmdBuffer::BindDescriptorSets(RenderableInstance *ri) } } - return(false); + return(true); } bool RenderCmdBuffer::BindVAB(RenderableInstance *ri) diff --git a/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp b/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp index 200ddb23..395589a4 100644 --- a/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp +++ b/src/SceneGraph/Vulkan/VKMaterialDescriptorSets.cpp @@ -19,7 +19,11 @@ MaterialDescriptorSets::MaterialDescriptorSets(ShaderDescriptor *sd,const uint c if(sd_count<=0)return; { - hgl_zero(sds,size_t(DescriptorSetType::RANGE_SIZE)); + ENUM_CLASS_FOR(DescriptorSetType,int,i) + { + sds[i].bindingCount=0; + sds[i].pBindings=nullptr; + } { ShaderDescriptor *sp=sd_list; @@ -33,7 +37,7 @@ MaterialDescriptorSets::MaterialDescriptorSets(ShaderDescriptor *sd,const uint c sd_by_name.Add(sp->name,sp); binding_map[size_t(sp->desc_type)].Add(sp->name,sp->binding); - ++sds[sp->set].count; + ++sds[sp->set].bindingCount; ++sp; } @@ -43,10 +47,10 @@ MaterialDescriptorSets::MaterialDescriptorSets(ShaderDescriptor *sd,const uint c { ENUM_CLASS_FOR(DescriptorSetType,int,i) - if(sds[i].count>0) + if(sds[i].bindingCount>0) { - sds[i].binding_list=new VkDescriptorSetLayoutBinding[sds[i].count]; - sds_ptr[i]=sds[i].binding_list; + sds[i].pBindings=new VkDescriptorSetLayoutBinding[sds[i].bindingCount]; + sds_ptr[i]=(VkDescriptorSetLayoutBinding *)sds[i].pBindings; } } @@ -88,8 +92,8 @@ MaterialDescriptorSets::MaterialDescriptorSets(ShaderDescriptor *sd,const uint c MaterialDescriptorSets::~MaterialDescriptorSets() { ENUM_CLASS_FOR(DescriptorSetType,int,i) - if(sds[i].count) - delete[] sds[i].binding_list; + if(sds[i].bindingCount) + delete[] sds[i].pBindings; delete[] sd_list; //"delete[] nullptr" isn't bug. } diff --git a/src/SceneGraph/Vulkan/VKPipelineLayoutData.cpp b/src/SceneGraph/Vulkan/VKPipelineLayoutData.cpp index a96d7bd0..161aee39 100644 --- a/src/SceneGraph/Vulkan/VKPipelineLayoutData.cpp +++ b/src/SceneGraph/Vulkan/VKPipelineLayoutData.cpp @@ -10,26 +10,21 @@ PipelineLayoutData *GPUDevice::CreatePipelineLayoutData(const MaterialDescriptor ENUM_CLASS_FOR(DescriptorSetType,int,i) { - const int binding_count=mds->GetBindingCount((DescriptorSetType)i); + const DescriptorSetLayoutCreateInfo *dslci=mds->GetBinding((DescriptorSetType)i); - if(binding_count<=0) + if(!dslci) continue; - DescriptorSetLayoutCreateInfo descriptor_layout; - - descriptor_layout.bindingCount = binding_count; - descriptor_layout.pBindings = mds->GetBindingList((DescriptorSetType)i); - if(pld->layouts[i]) vkDestroyDescriptorSetLayout(attr->device,pld->layouts[i],nullptr); - if(vkCreateDescriptorSetLayout(attr->device,&descriptor_layout,nullptr,pld->layouts+i)!=VK_SUCCESS) + if(vkCreateDescriptorSetLayout(attr->device,dslci,nullptr,pld->layouts+i)!=VK_SUCCESS) { delete pld; return(nullptr); } - pld->binding_count[i]=binding_count; + pld->binding_count[i]=dslci->bindingCount; pld->fin_dsl[pld->fin_dsl_count]=pld->layouts[i]; ++pld->fin_dsl_count;