From 240b6fb0e372b59cabd81b35f31c6429085a5bf7 Mon Sep 17 00:00:00 2001 From: "HuYingzhuo(hugo/hyzboy)" Date: Fri, 13 Oct 2023 10:42:21 +0800 Subject: [PATCH] added UBO/SSBO/INBO debug output. --- example/common/VulkanAppFramework.h | 4 +-- inc/hgl/graph/VKRenderResource.h | 8 ++++-- src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp | 2 ++ src/SceneGraph/Vulkan/VKDeviceSwapchain.cpp | 1 - src/SceneGraph/Vulkan/VKRenderResource.cpp | 30 +++++++++++++------- 5 files changed, 29 insertions(+), 16 deletions(-) diff --git a/example/common/VulkanAppFramework.h b/example/common/VulkanAppFramework.h index 7d0a3026..c0b2f9c3 100644 --- a/example/common/VulkanAppFramework.h +++ b/example/common/VulkanAppFramework.h @@ -145,7 +145,7 @@ public: { vp_info.Set(w,h); - ubo_vp_info=db->CreateUBO(sizeof(ViewportInfo),&vp_info); + ubo_vp_info=db->CreateUBO("Viewport",sizeof(ViewportInfo),&vp_info); db->global_descriptor.AddUBO(mtl::SBS_ViewportInfo.name,ubo_vp_info); } @@ -515,7 +515,7 @@ public: RefreshCameraInfo(&camera_control->GetCameraInfo(),&vp_info,camera); - ubo_camera_info=db->CreateUBO(sizeof(CameraInfo),&camera_control->GetCameraInfo()); + ubo_camera_info=db->CreateUBO("CameraInfo",sizeof(CameraInfo),&camera_control->GetCameraInfo()); db->global_descriptor.AddUBO(mtl::SBS_CameraInfo.name,ubo_camera_info); } diff --git a/inc/hgl/graph/VKRenderResource.h b/inc/hgl/graph/VKRenderResource.h index ea9a5ad3..6cc0cb62 100644 --- a/inc/hgl/graph/VKRenderResource.h +++ b/inc/hgl/graph/VKRenderResource.h @@ -59,6 +59,10 @@ class RenderResource IDObjectManage rm_textures; ///<纹理合集 IDObjectManage rm_renderables; ///<渲染实例集合集 +private: + + void AddBuffer(const AnsiString &buf_name,DeviceBuffer *buf); + public: //注:并非一定要走这里,这里只是提供一个注册和自动绑定的机制 @@ -86,8 +90,8 @@ public: // VBO/VAO VBO *CreateVBO(VkFormat format,uint32_t count,SharingMode sm=SharingMode::Exclusive){return CreateVBO(format,count,nullptr,sm);} VBO *CreateVBO(const VAD *vad,SharingMode sm=SharingMode::Exclusive){return CreateVBO(vad->GetFormat(),vad->GetCount(),vad->GetData(),sm);} - #define SCENE_DB_CREATE_FUNC(name) DeviceBuffer *Create##name(VkDeviceSize size,void *data,SharingMode sm=SharingMode::Exclusive); \ - DeviceBuffer *Create##name(VkDeviceSize size,SharingMode sm=SharingMode::Exclusive); + #define SCENE_DB_CREATE_FUNC(name) DeviceBuffer *Create##name(const AnsiString &buf_name,VkDeviceSize size,void *data,SharingMode sm=SharingMode::Exclusive); \ + DeviceBuffer *Create##name(const AnsiString &buf_name,VkDeviceSize size,SharingMode sm=SharingMode::Exclusive){return Create##name(buf_name,size,nullptr,sm);} SCENE_DB_CREATE_FUNC(UBO) SCENE_DB_CREATE_FUNC(SSBO) diff --git a/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp b/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp index a72bdbf0..95c19d11 100644 --- a/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp +++ b/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp @@ -23,6 +23,8 @@ DebugUtils *CreateDebugUtils(VkDevice device) void DebugUtils::SetName(VkObjectType type,uint64_t handle,const char *name) { + if(!handle||!name||!*name)return; + VkDebugUtilsObjectNameInfoEXT name_info={}; name_info.sType =VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; diff --git a/src/SceneGraph/Vulkan/VKDeviceSwapchain.cpp b/src/SceneGraph/Vulkan/VKDeviceSwapchain.cpp index b5bb5b9e..c0686a23 100644 --- a/src/SceneGraph/Vulkan/VKDeviceSwapchain.cpp +++ b/src/SceneGraph/Vulkan/VKDeviceSwapchain.cpp @@ -125,7 +125,6 @@ bool GPUDevice::CreateSwapchainFBO(Swapchain *swapchain) { attr->debug_utils->SetImage(swapchain->sc_color[i]->GetImage(),"SwapchainColorImage_"+AnsiString::numberOf(i)); attr->debug_utils->SetImageView(swapchain->sc_color[i]->GetVulkanImageView(),"SwapchainColorImageView_"+AnsiString::numberOf(i)); - attr->debug_utils->SetDeviceMemory(swapchain->sc_color[i]->GetDeviceMemory(),"SwapchainColorMemory_"+AnsiString::numberOf(i)); attr->debug_utils->SetFramebuffer(swapchain->sc_fbo[i]->GetFramebuffer(),"SwapchainFBO_"+AnsiString::numberOf(i)); } diff --git a/src/SceneGraph/Vulkan/VKRenderResource.cpp b/src/SceneGraph/Vulkan/VKRenderResource.cpp index d4541cc5..f82912fd 100644 --- a/src/SceneGraph/Vulkan/VKRenderResource.cpp +++ b/src/SceneGraph/Vulkan/VKRenderResource.cpp @@ -17,21 +17,29 @@ VBO *RenderResource::CreateVBO(VkFormat format,uint32_t count,const void *data,S return vb; } -#define SCENE_DB_CREATE_BUFFER(name) DeviceBuffer *RenderResource::Create##name(VkDeviceSize size,void *data,SharingMode sharing_mode) \ +void RenderResource::AddBuffer(const AnsiString &buf_name,DeviceBuffer *buf) +{ + if(!buf)return; + + rm_buffers.Add(buf); + +#ifdef _DEBUG + DebugUtils *du=device->GetDebugUtils(); + + if(du) + { + du->SetBuffer(buf->GetBuffer(),buf_name+":Buffer"); + du->SetDeviceMemory(buf->GetVkMemory(),buf_name+":Memory"); + } +#endif//_DEBUG +} + +#define SCENE_DB_CREATE_BUFFER(name) DeviceBuffer *RenderResource::Create##name(const AnsiString &buf_name,VkDeviceSize size,void *data,SharingMode sharing_mode) \ { \ DeviceBuffer *buf=device->Create##name(size,data,sharing_mode); \ \ if(!buf)return(nullptr); \ - rm_buffers.Add(buf); \ - return(buf); \ - } \ - \ - DeviceBuffer *RenderResource::Create##name(VkDeviceSize size,SharingMode sharing_mode) \ - { \ - DeviceBuffer *buf=device->Create##name(size,sharing_mode); \ - \ - if(!buf)return(nullptr); \ - rm_buffers.Add(buf); \ + AddBuffer(#name ":"+buf_name,buf); \ return(buf); \ }