可以从主线程分配`vkCommandPool`并移动到其他线程吗?

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是线程中创建的,而不是在主线程中创建的,但我在规范中找不到这个要求.

rat*_*eak 8

vulkan中的任何内容都不会绑定到特定的线程.

只要您遵守外部同步的要求,您就可以从任何线程调用任何vulkan函数.

如果两个命令对同一个对象进行操作,并且至少有一个命令声明该对象是外部同步的,则调用者不仅要保证命令不会同时执行,还要保证两个命令由适当的内存分隔障碍(如果需要).

在其他API中,当一个对象绑定到一个线程时,它就会被清楚地记录下来.

在这种情况下,一次只有一个线程可以访问command_pool,但是对同一命令池的连续命令可以来自不同的线程.