From 62c1ed785d3a80906378fc594a6ffa1059f4a127 Mon Sep 17 00:00:00 2001 From: hyzboy Date: Fri, 12 Jul 2019 20:51:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=B9=E5=8A=A8swap=20chain=E5=88=87?= =?UTF-8?q?=E6=8D=A2API(=E6=94=B9=E5=8A=A8=E5=AE=8C=E6=88=90=E5=89=8D?= =?UTF-8?q?=E5=BC=95=E6=93=8E=E5=B0=86=E6=9A=82=E4=B8=8D=E5=8F=AF=E7=94=A8?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- inc/hgl/graph/vulkan/VKDevice.h | 17 +++++++++++++++-- src/RenderDevice/Vulkan/VKDevice.cpp | 18 +++++++++++------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/inc/hgl/graph/vulkan/VKDevice.h b/inc/hgl/graph/vulkan/VKDevice.h index 63918266..d08b8af4 100644 --- a/inc/hgl/graph/vulkan/VKDevice.h +++ b/inc/hgl/graph/vulkan/VKDevice.h @@ -198,9 +198,22 @@ public: //Command Buffer 相关 public: //提交相关 bool Wait (bool wait_all=VK_TRUE,uint64_t time_out=HGL_NANO_SEC_PER_SEC*0.1); ///<等待队列完成 - bool AcquireNextImage (); ///<请求获得下一帧的索引 - bool SubmitDraw (const VkCommandBuffer *,const uint32_t count=1); ///<提交绘制指令 + + /** + * 请求获得下一帧的索引,并将确认信息发送到指定信号 + */ + bool AcquireNextImage (VkSemaphore); ///<请求获得下一帧的索引 + + /** + * 提交一批绘制指令 + * @param cmd_list 绘制指令 + * @param wait_sems 指令开始前要等待的确认的信号 + * @param complete_semaphores 绘制完成后发送的信号 + */ + bool SubmitDraw (List &cmd_list,List &wait_sems,List &complete_semaphores); ///<提交绘制指令 + bool SubmitTexture (const VkCommandBuffer *cmd_bufs,const uint32_t count=1); ///<提交纹理处理到队列 + bool PresentBackbuffer (); ///<等待绘制队列完成,并将后台缓冲区呈现到前台 };//class Device VK_NAMESPACE_END diff --git a/src/RenderDevice/Vulkan/VKDevice.cpp b/src/RenderDevice/Vulkan/VKDevice.cpp index 51e50b00..a2b88d8f 100644 --- a/src/RenderDevice/Vulkan/VKDevice.cpp +++ b/src/RenderDevice/Vulkan/VKDevice.cpp @@ -172,18 +172,22 @@ bool Device::Wait(bool wait_all,uint64_t time_out) return(true); } -bool Device::AcquireNextImage() +bool Device::AcquireNextImage(VkSemaphore present_complete_semaphore) { - return(vkAcquireNextImageKHR(attr->device,attr->swap_chain,UINT64_MAX,*present_complete_semaphore,VK_NULL_HANDLE,¤t_frame)==VK_SUCCESS); + return(vkAcquireNextImageKHR(attr->device,attr->swap_chain,UINT64_MAX,present_complete_semaphore,VK_NULL_HANDLE,¤t_frame)==VK_SUCCESS); } -bool Device::SubmitDraw(const VkCommandBuffer *cmd_bufs,const uint32_t count) +bool Device::SubmitDraw(List &cmd_lists,List &wait_sems,List &complete_sems) { - if(!cmd_bufs||count<=0) + if(cmd_lists.GetCount()<=0) return(false); - - submit_info.commandBufferCount = count; - submit_info.pCommandBuffers = cmd_bufs; + + submit_info.waitSemaphoreCount =wait_sems.GetCount(); + submit_info.pWaitSemaphores =wait_sems.GetData(); + submit_info.commandBufferCount =cmd_lists.GetCount(); + submit_info.pCommandBuffers =cmd_lists.GetData(); + submit_info.signalSemaphoreCount=complete_sems.GetCount(); + submit_info.pSignalSemaphores =complete_sems.GetData(); VkFence fence=*fence_list[current_fence];