vulkan中的指令队列的大致原理

发布时间:2024年01月15日

在vulkan中,指令池vkCommandPool分配指令缓冲vkCommandBuffer,而指令缓冲用于记录计算、渲染指令,记录完后,把该指令缓冲提交给指令队列vkQueue,然后等待执行。

实际上就可以简单理解为:

  • 每个指令 <=> 一行有效代码、一个原子操作
  • 指令缓冲vkCommandBuffer <=> 一个函数
  • 指令队列vkQueue <=> 一个队列,每个元素是一个函数指针
class CommandQueue 
{
public:
    // 提交指令到队列
    void Submit(std::function<void()> command) 
    {
        commandQueue.push(command);
    }

    // 处理队列中的指令
    void ExecuteCommands() 
    {
        while (!commandQueue.empty()) 
        {
            auto command = commandQueue.front();
            command();
            commandQueue.pop();
        }
    }

private:
    std::queue<std::function<void()>> commandQueue;
};

int main() 
{
    CommandQueue commandQueue;

    // 提交3个指令缓冲到队列,每个指令缓冲相当于一个函数,这里用lambda表达式
    commandQueue.Submit([]() { std::cout << "Command 1 executed." << std::endl; });
    commandQueue.Submit([]() { std::cout << "Command 2 executed." << std::endl; });
    commandQueue.Submit([]() { std::cout << "Command 3 executed." << std::endl; });

    // 处理队列中的指令
    commandQueue.ExecuteCommands();
    return 0;
}
文章来源:https://blog.csdn.net/Motarookie/article/details/135591934
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。