1. 程式人生 > >Vulkan Cookbook 第三章 19 銷燬命令池

Vulkan Cookbook 第三章 19 銷燬命令池

銷燬命令池

譯者注:示例程式碼點選此處

當從給定池分配的所有命令緩衝區不在使用,並且我們也不需要該池時,可以安全的銷燬它。

怎麼做...

1.獲取邏輯裝置控制代碼並將其儲存在名為logical_device的VkDevice型別變數中。
2.使用應銷燬的池的控制代碼來初始化名為command_pool的VkCommandPool型別變數。
3.呼叫vkDestroyCommandPool( logical_device, command_pool, nullptr ),為其提供邏輯裝置和命令池的控制代碼,以及nullptr值。
4.處於安全原因,將VK_NULL_HANDLE值分配給command_pool變數。

這個怎麼運作...

使用以下程式碼銷燬命令池:

if( VK_NULL_HANDLE != command_pool ) { 
  vkDestroyCommandPool( logical_device, command_pool,
  command_pool = VK_NULL_HANDLE; 
}

但是我們不能銷燬池,直到從它分配的所有命令緩衝區都沒有等待在裝置上執行,為此可以等待圍欄或用導致應用程式等待所選佇列停止的處理命令的功能之一。或者在整個裝置繁忙時(從給定裝置提交給所有佇列的工作仍在處理中)。只有這樣我們才能安全的銷燬命令池。

譯者注:或者在整個裝置繁忙時(從給定裝置提交給所有佇列的工作仍在處理中)

原文 or while the whole device is busy (the work submitted to all queues from a given device is still being processed). 我想這句的意思是說當緩衝區的命令正在被佇列處理時緩衝區的命令已經被拷貝到了裝置佇列的特定高速記憶體塊中。而且沒有其他命令緩衝區等待在裝置上執行,所以我們可以銷燬命令池,因為目前這個池沒有誰在用。