diff --git a/CMUtil b/CMUtil index c3addef6..13b5a734 160000 --- a/CMUtil +++ b/CMUtil @@ -1 +1 @@ -Subproject commit c3addef6b7f2fc38737ea5bfe01e55b7c35b3a7a +Subproject commit 13b5a7347ea6a2b44f728847c2ce131e844f6d7c diff --git a/example/Vulkan/DeferredRender.cpp b/example/Vulkan/DeferredRender.cpp index f4adc5e6..b2a5be25 100644 --- a/example/Vulkan/DeferredRender.cpp +++ b/example/Vulkan/DeferredRender.cpp @@ -176,7 +176,6 @@ private: sp->pipeline_fan =gbuffer.rp->CreatePipeline(sp->material_instance,InlinePipeline::Solid3D,Prim::Fan); - return sp->pipeline_fan; } diff --git a/inc/hgl/graph/VKDebugUtils.h b/inc/hgl/graph/VKDebugUtils.h new file mode 100644 index 00000000..852bfd5f --- /dev/null +++ b/inc/hgl/graph/VKDebugUtils.h @@ -0,0 +1,57 @@ +#ifndef HGL_GRAPH_VULKAN_DEBUG_UTILS_INCLUDE +#define HGL_GRAPH_VULKAN_DEBUG_UTILS_INCLUDE + +#include +#include + +VK_NAMESPACE_BEGIN +class VKDebugUtils +{ + VkDevice device; + + PFN_vkSetDebugUtilsObjectNameEXT s_vkSetDebugUtilsObjectName; + PFN_vkCmdBeginDebugUtilsLabelEXT s_vkCmdBeginDebugUtilsLabel; + PFN_vkCmdEndDebugUtilsLabelEXT s_vkCmdEndDebugUtilsLabel; + +public: + + VKDebugUtils(VkDevice dev); + ~VKDebugUtils()=default; + + void SetName(VkObjectType,uint64_t,const char *); + + void SetInstance (VkInstance inst, const char *name){SetName(VK_OBJECT_TYPE_INSTANCE, (uint64_t)inst, name);} + void SetPhysicsDevice (VkPhysicalDevice pd, const char *name){SetName(VK_OBJECT_TYPE_PHYSICAL_DEVICE, (uint64_t)pd, name);} + void SetDevice (VkDevice dev, const char *name){SetName(VK_OBJECT_TYPE_DEVICE, (uint64_t)dev, name);} + void SetQueue (VkQueue queue, const char *name){SetName(VK_OBJECT_TYPE_QUEUE, (uint64_t)queue, name);} + void SetSemaphore (VkSemaphore sema, const char *name){SetName(VK_OBJECT_TYPE_SEMAPHORE, (uint64_t)sema, name);} + void SetCommandBuffer (VkCommandBuffer cb, const char *name){SetName(VK_OBJECT_TYPE_COMMAND_BUFFER, (uint64_t)cb, name);} + void SetFence (VkFence fence, const char *name){SetName(VK_OBJECT_TYPE_FENCE, (uint64_t)fence, name);} + void SetDeviceMemory (VkDeviceMemory mem, const char *name){SetName(VK_OBJECT_TYPE_DEVICE_MEMORY, (uint64_t)mem, name);} + void SetBuffer (VkBuffer buf, const char *name){SetName(VK_OBJECT_TYPE_BUFFER, (uint64_t)buf, name);} + void SetImage (VkImage img, const char *name){SetName(VK_OBJECT_TYPE_IMAGE, (uint64_t)img, name);} + void SetEvent (VkEvent event, const char *name){SetName(VK_OBJECT_TYPE_EVENT, (uint64_t)event, name);} + void SetQueryPool (VkQueryPool qpool, const char *name){SetName(VK_OBJECT_TYPE_QUERY_POOL, (uint64_t)qpool, name);} + void SetBufferView (VkBufferView bview, const char *name){SetName(VK_OBJECT_TYPE_BUFFER_VIEW, (uint64_t)bview, name);} + void SetImageView (VkImageView iview, const char *name){SetName(VK_OBJECT_TYPE_IMAGE_VIEW, (uint64_t)iview, name);} + void SetShaderModule (VkShaderModule smod, const char *name){SetName(VK_OBJECT_TYPE_SHADER_MODULE, (uint64_t)smod, name);} + void SetPipelineCache (VkPipelineCache pcache, const char *name){SetName(VK_OBJECT_TYPE_PIPELINE_CACHE, (uint64_t)pcache, name);} + void SetPipelineLayout (VkPipelineLayout playout,const char *name){SetName(VK_OBJECT_TYPE_PIPELINE_LAYOUT, (uint64_t)playout, name);} + void SetRenderPass (VkRenderPass rpass, const char *name){SetName(VK_OBJECT_TYPE_RENDER_PASS, (uint64_t)rpass, name);} + void SetPipeline (VkPipeline pipe, const char *name){SetName(VK_OBJECT_TYPE_PIPELINE, (uint64_t)pipe, name);} + void SetDescriptorSetLayout (VkDescriptorSetLayout dsl, const char *name){SetName(VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, (uint64_t)dsl, name);} + void SetSampler (VkSampler s, const char *name){SetName(VK_OBJECT_TYPE_SAMPLER, (uint64_t)s, name);} + void SetDescriptorPool (VkDescriptorPool dp, const char *name){SetName(VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)dp, name);} + void SetDescriptorSet (VkDescriptorSet ds, const char *name){SetName(VK_OBJECT_TYPE_DESCRIPTOR_SET, (uint64_t)ds, name);} + void SetFrameBuffer (VkFramebuffer fbo, const char *name){SetName(VK_OBJECT_TYPE_FRAMEBUFFER, (uint64_t)fbo, name);} + void SetCommandPool (VkCommandPool cp, const char *name){SetName(VK_OBJECT_TYPE_COMMAND_POOL, (uint64_t)cp, name);} + + void Begin(VkCommandBuffer,const char *,const Color4f &color=Color4f(1,1,1,1)); + void End(VkCommandBuffer cmd_buf) + { + if(s_vkCmdEndDebugUtilsLabel) + s_vkCmdEndDebugUtilsLabel(cmd_buf); + } +};//class VKDebugUtils +VK_NAMESPACE_END +#endif//HGL_GRAPH_VULKAN_DEBUG_UTILS_INCLUDE diff --git a/src/SceneGraph/CMakeLists.txt b/src/SceneGraph/CMakeLists.txt index 73286835..0ad3f227 100644 --- a/src/SceneGraph/CMakeLists.txt +++ b/src/SceneGraph/CMakeLists.txt @@ -103,8 +103,10 @@ SET(VK_INST_SOURCE ${SG_INCLUDE_PATH}/VKInstance.h SET(VK_DEBUG_SOURCE ${SG_INCLUDE_PATH}/VKDebugOut.h ${SG_INCLUDE_PATH}/VKDebugMaker.h - Vulkan/VKDebugOut.cpp - Vulkan/VKDebugMaker.cpp) + ${SG_INCLUDE_PATH}/VKDebugUtils.h + Vulkan/Debug/VKDebugOut.cpp + Vulkan/Debug/VKDebugMaker.cpp + Vulkan/Debug/VKDebugUtils.cpp) SET(VK_MEMORY_SOURCE ${SG_INCLUDE_PATH}/VKMemory.h ${SG_INCLUDE_PATH}/VKMemoryAllocator.h diff --git a/src/SceneGraph/Vulkan/VKDebugMaker.cpp b/src/SceneGraph/Vulkan/Debug/VKDebugMaker.cpp similarity index 100% rename from src/SceneGraph/Vulkan/VKDebugMaker.cpp rename to src/SceneGraph/Vulkan/Debug/VKDebugMaker.cpp diff --git a/src/SceneGraph/Vulkan/VKDebugOut.cpp b/src/SceneGraph/Vulkan/Debug/VKDebugOut.cpp similarity index 100% rename from src/SceneGraph/Vulkan/VKDebugOut.cpp rename to src/SceneGraph/Vulkan/Debug/VKDebugOut.cpp diff --git a/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp b/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp new file mode 100644 index 00000000..d3108139 --- /dev/null +++ b/src/SceneGraph/Vulkan/Debug/VKDebugUtils.cpp @@ -0,0 +1,39 @@ +#include + +VK_NAMESPACE_BEGIN +VKDebugUtils::VKDebugUtils(VkDevice dev) +{ + device=dev; + + s_vkSetDebugUtilsObjectName=(PFN_vkSetDebugUtilsObjectNameEXT)vkGetDeviceProcAddr(device,"vkSetDebugUtilsObjectNameEXT"); + s_vkCmdBeginDebugUtilsLabel=(PFN_vkCmdBeginDebugUtilsLabelEXT)vkGetDeviceProcAddr(device,"vkCmdBeginDebugUtilsLabelEXT"); + s_vkCmdEndDebugUtilsLabel=(PFN_vkCmdEndDebugUtilsLabelEXT)vkGetDeviceProcAddr(device,"vkCmdEndDebugUtilsLabelEXT"); +} + +void VKDebugUtils::SetName(VkObjectType type,uint64_t handle,const char *name) +{ + if(!s_vkSetDebugUtilsObjectName)return; + + VkDebugUtilsObjectNameInfoEXT name_info={}; + + name_info.sType=VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT; + name_info.objectType=type; + name_info.objectHandle=handle; + name_info.pObjectName=name; + + s_vkSetDebugUtilsObjectName(device,&name_info); +} + +void VKDebugUtils::Begin(VkCommandBuffer cmd_buf,const char *name,const Color4f &color) +{ + if(!s_vkCmdBeginDebugUtilsLabel)return; + + VkDebugUtilsLabelEXT label={}; + + label.sType=VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT; + label.pLabelName=name; + memcpy(label.color,&color,sizeof(float)*4); + + s_vkCmdBeginDebugUtilsLabel(cmd_buf,&label); +} +VK_NAMESPACE_END diff --git a/src/SceneGraph/Vulkan/VKShaderModule.cpp b/src/SceneGraph/Vulkan/VKShaderModule.cpp index fc3885d4..27c10486 100644 --- a/src/SceneGraph/Vulkan/VKShaderModule.cpp +++ b/src/SceneGraph/Vulkan/VKShaderModule.cpp @@ -114,6 +114,10 @@ VAB *VertexShaderModule::CreateVAB(const VABConfigInfo *cfg) bind->inputRate =vac.instance?VK_VERTEX_INPUT_RATE_INSTANCE:VK_VERTEX_INPUT_RATE_VERTEX; } + // + { + } + bind->stride =GetStrideByFormat(attr->format); ++attr;