Tim*_*ann 2 multithreading vulkan
是否有可能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
Run Code Online (Sandbox Code Playgroud)
在我发现的所有示例和演示中,command_pool是在线程中创建的,而不是在主线程中创建的,但我在规范中找不到这个要求.
vulkan中的任何内容都不会绑定到特定的线程.
只要您遵守外部同步的要求,您就可以从任何线程调用任何vulkan函数.
如果两个命令对同一个对象进行操作,并且至少有一个命令声明该对象是外部同步的,则调用者不仅要保证命令不会同时执行,还要保证两个命令由适当的内存分隔障碍(如果需要).
在其他API中,当一个对象绑定到一个线程时,它就会被清楚地记录下来.
在这种情况下,一次只有一个线程可以访问command_pool,但是对同一命令池的连续命令可以来自不同的线程.