diff --git a/example/Vulkan/DeferredRender.cpp b/example/Vulkan/DeferredRender.cpp index be0328b3..6e47113a 100644 --- a/example/Vulkan/DeferredRender.cpp +++ b/example/Vulkan/DeferredRender.cpp @@ -154,6 +154,39 @@ private: CreateGBufferSampler(); + #ifdef _DEBUG + { + auto da=device->GetDeviceAttribute(); + + VkQueue q=*(gbuffer.rt->GetQueue()); + VkFramebuffer fbo= gbuffer.rt->GetFramebuffer()->GetFramebuffer(); + VkRenderPass rp= gbuffer.rp->GetVkRenderPass(); + VkSemaphore sem=*(gbuffer.rt->GetRenderCompleteSemaphore()); + VkCommandBuffer cb=*(gbuffer.cmd); + VkSampler s=*(gbuffer.sampler); + + if(da->debug_maker) + { + da->debug_maker->SetQueue( q, "[debug maker] GBufferQueue"); + da->debug_maker->SetFramebuffer( fbo,"[debug maker] GBufferFBO"); + da->debug_maker->SetRenderPass( rp, "[debug maker] GBufferRenderpass"); + da->debug_maker->SetCommandBuffer( cb, "[debug maker] GBufferCommandBuffer"); + da->debug_maker->SetSampler( s, "[debug maker] GBufferSampler"); + da->debug_maker->SetSemaphore( sem,"[debug maker] GBufferSemaphore"); + } + + if(da->debug_utils) + { + da->debug_utils->SetQueue( q, "[debug utils] GBufferQueue"); + da->debug_utils->SetFramebuffer( fbo,"[debug utils] GBufferFBO"); + da->debug_utils->SetRenderPass( rp, "[debug utils] GBufferRenderpass"); + da->debug_utils->SetCommandBuffer( cb, "[debug utils] GBufferCommandBuffer"); + da->debug_utils->SetSampler( s, "[debug utils] GBufferSampler"); + da->debug_utils->SetSemaphore( sem,"[debug utils] GBufferSemaphore"); + } + } + #endif//_DEBUG + return(gbuffer.rt); } @@ -361,7 +394,7 @@ private: if(!gbuffer.cmd->BindFramebuffer(gbuffer.rt->GetRenderPass(),gbuffer.rt->GetFramebuffer())) return(false); - gbuffer.cmd->BeginRegion("GBuffer",Color4f(1,0,0,1)); + gbuffer.cmd->BeginRegion("GBuffer Begin",Color4f(1,0,0,1)); if(!gbuffer.cmd->BeginRenderPass()) return(false); @@ -405,13 +438,13 @@ public: { const double timer=GetDoubleTime(); - // White - lights.position = Vector4f(0.0f, 0.0f, 25.0f, 0.0f); - lights.color = Vector4f(15.0f); - lights.radius = 155.0f; + // White + lights.position = Vector4f(0.0f, 0.0f, 25.0f, 0.0f); + lights.color = Vector4f(15.0f); + lights.radius = 155.0f; - lights.position.x = sin(rad2deg(timer/100)) * 100.0f; - lights.position.y = cos(rad2deg(timer/100)) * 100.0f; + lights.position.x = sin(rad2deg(timer/100)) * 100.0f; + lights.position.y = cos(rad2deg(timer/100)) * 100.0f; ubo_lights->Write(&lights); } diff --git a/inc/hgl/graph/VKCommandBuffer.h b/inc/hgl/graph/VKCommandBuffer.h index 4a816c05..1a62ca8e 100644 --- a/inc/hgl/graph/VKCommandBuffer.h +++ b/inc/hgl/graph/VKCommandBuffer.h @@ -27,11 +27,11 @@ public: bool End(){return(vkEndCommandBuffer(cmd_buf)==VK_SUCCESS);} #ifdef _DEBUG - void SetDebugName(const char *); - void BeginRegion(const char *,const Color4f &); + void SetDebugName(const UTF8String &); + void BeginRegion(const UTF8String &,const Color4f &); void EndRegion(); #else - void BeginRegion(const char *,const Color4f &){} + void BeginRegion(const UTF8String &,const Color4f &){} void EndRegion(){} #endif//_DEBUG };//class GPUCmdBuffer diff --git a/inc/hgl/graph/VKDebugUtils.h b/inc/hgl/graph/VKDebugUtils.h index 3e2ac3ed..bea06f25 100644 --- a/inc/hgl/graph/VKDebugUtils.h +++ b/inc/hgl/graph/VKDebugUtils.h @@ -90,6 +90,8 @@ public: DU_FUNC(DeferredOperationKHR, DEFERRED_OPERATION_KHR) DU_FUNC(IndirectCommandsLayoutNV, INDIRECT_COMMANDS_LAYOUT_NV) // DU_FUNC(BufferCollectionFuchsia, BUFFER_COLLECTION_FUCHSIA) + +#undef DU_FUNC void QueueBegin (VkQueue,const char *,const Color4f &color=Color4f(1,1,1,1)); void QueueEnd (VkQueue q){duf.QueueEnd(q);} diff --git a/inc/hgl/graph/VKPhysicalDevice.h b/inc/hgl/graph/VKPhysicalDevice.h index e9fbec1d..aecf505c 100644 --- a/inc/hgl/graph/VKPhysicalDevice.h +++ b/inc/hgl/graph/VKPhysicalDevice.h @@ -83,6 +83,23 @@ public: const bool isIntegratedGPU ()const{return(properties.deviceType==VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU);} ///<是否是集成显卡 const bool isVirtualGPU ()const{return(properties.deviceType==VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU);} ///<是否是虚拟显卡 +#define HGL_VK_IS_BRAND(name) (hgl::stricmp(properties.deviceName,#name,sizeof(#name))==0) + + const bool isMicrosoft ()const{return HGL_VK_IS_BRAND(Microsoft);} + const bool isMesa ()const{return HGL_VK_IS_BRAND(Mesa );} + const bool isAMD ()const{return HGL_VK_IS_BRAND(AMD ) + ||HGL_VK_IS_BRAND(ATI );} + const bool isNvidia ()const{return HGL_VK_IS_BRAND(nVidia );} + const bool isIntel ()const{return HGL_VK_IS_BRAND(Intel );} + const bool isQualcomm ()const{return HGL_VK_IS_BRAND(Adreno );} + const bool isApple ()const{return HGL_VK_IS_BRAND(Apple );} + const bool isImgTec ()const{return HGL_VK_IS_BRAND(ImgTec ) + ||HGL_VK_IS_BRAND(PowerVR );} + const bool isARM ()const{return HGL_VK_IS_BRAND(Arm ) + ||HGL_VK_IS_BRAND(Mali );} + +#undef HGL_VK_IS_BRAND + public: VkFormatProperties GetFormatProperties(const VkFormat format)const diff --git a/inc/hgl/graph/VKQueue.h b/inc/hgl/graph/VKQueue.h index c2f2238c..1dc571f3 100644 --- a/inc/hgl/graph/VKQueue.h +++ b/inc/hgl/graph/VKQueue.h @@ -26,6 +26,8 @@ private: public: virtual ~GPUQueue(); + + operator VkQueue(){return queue;} VkResult Present(const VkPresentInfoKHR *pi){return vkQueuePresentKHR(queue,pi);} diff --git a/inc/hgl/graph/VKRenderTarget.h b/inc/hgl/graph/VKRenderTarget.h index 580e620a..634700cd 100644 --- a/inc/hgl/graph/VKRenderTarget.h +++ b/inc/hgl/graph/VKRenderTarget.h @@ -41,6 +41,7 @@ public: virtual ~RenderTarget(); + GPUQueue * GetQueue () {return queue;} const VkExtent2D & GetExtent ()const {return extent;} virtual RenderPass * GetRenderPass () {return render_pass;} virtual const VkRenderPass GetVkRenderPass ()const {return render_pass->GetVkRenderPass();} diff --git a/src/SceneGraph/Vulkan/VKCommandBuffer.cpp b/src/SceneGraph/Vulkan/VKCommandBuffer.cpp index e231cba2..2a1c2d94 100644 --- a/src/SceneGraph/Vulkan/VKCommandBuffer.cpp +++ b/src/SceneGraph/Vulkan/VKCommandBuffer.cpp @@ -26,22 +26,22 @@ bool GPUCmdBuffer::Begin() } #ifdef _DEBUG -void GPUCmdBuffer::SetDebugName(const char *object_name) +void GPUCmdBuffer::SetDebugName(const UTF8String &object_name) { if(dev_attr->debug_maker) - dev_attr->debug_maker->SetCommandBuffer(cmd_buf,object_name); + dev_attr->debug_maker->SetCommandBuffer(cmd_buf,"[debug_maker]"+object_name); if(dev_attr->debug_utils) - dev_attr->debug_utils->SetCommandBuffer(cmd_buf,object_name); + dev_attr->debug_utils->SetCommandBuffer(cmd_buf,"[debug_utils]"+object_name); } -void GPUCmdBuffer::BeginRegion(const char *region_name,const Color4f &color) +void GPUCmdBuffer::BeginRegion(const UTF8String ®ion_name,const Color4f &color) { if(dev_attr->debug_maker) - dev_attr->debug_maker->Begin(cmd_buf,region_name,color); + dev_attr->debug_maker->Begin(cmd_buf,"[debug_maker]"+region_name,color); if(dev_attr->debug_utils) - dev_attr->debug_utils->CmdBegin(cmd_buf,region_name,color); + dev_attr->debug_utils->CmdBegin(cmd_buf,"[debug_utils]"+region_name,color); } void GPUCmdBuffer::EndRegion()