是否有可能从主线程中分配vkCommandPool
然后将它们移动到一个新的线程中,在那里它是专门使用的?
伪代码:
// Pool for creating secondary buffers
threaded_command_pool = new CommandPool();
// Thread for filling secondary buffers
// threaded_command_poolzd is used only here
thread_handle = new Thread(move(command_pool))
thread_handle.join()
// Pool for merging secondary buffers
command_pool = new CommandPool()
primary_command_buffer = command_pool.create_buffer()
// fill primary_command_buffer with secondary buffers from thread
在我发现的所有示例和演示文稿中,command_pool在线程中创建 ,而不是在主线程中创建,但我在specs中找不到此要求。 / p>
答案 0 :(得分:7)
vulkan中的任何内容都不会绑定到特定的帖子。
只要您遵守外部同步的要求,您就可以从任何线程调用任何vulkan函数。
如果两个命令对同一个对象进行操作,并且至少有一个命令声明该对象是外部同步的,则调用者不仅要保证命令不会同时执行,还要保证这两个命令是由适当的记忆障碍(如果需要)。
在其他API中,当一个对象绑定到一个线程时,它就会被清楚地记录下来。
在这种情况下,一次只有一个线程可以访问command_pool,但是对同一命令池的连续命令可以来自不同的线程。