当前位置: 首页 > news >正文

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

在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;
}

相关文章:

  • Elasticsearch:Search tutorial - 使用 Python 进行搜索 (三)
  • MySQL:ERROR 1067 - Invalid default value for ‘end_time‘【解决办法】
  • Veeam Backup12安装备份恢复ESXI7.0 U3虚拟机
  • Centos创建一个Python虚拟环境
  • 【书生·浦语大模型实战营04】《(4)XTuner 大模型单卡低成本微调实战》学习笔记
  • ES自动补全
  • Rust 宏的使用
  • 把项目转换为md知识库,提供给gpts使用
  • ffmpeg 视频分辨率修改 质量压缩
  • mysql进阶-索引基础
  • 视频转为序列图的软件,让视频批量转为序列图
  • Linux Capabilities 进阶实战
  • 单因素方差分析--R
  • docker容器互通方式
  • k8s的node亲和性和pod亲和性和反亲和性 污点 cordon drain
  • prometheus常用exporter
  • [含完整代码]Linux使用.sh脚本自动部署(启动|停止|状态|日志)项目[超详细]
  • Unity URP下阴影锯齿
  • 数据结构:堆和堆排序
  • 基于elementUI的el-table组件实现按住某一行数据上下滑动选中/选择或取消选中/选择鼠标经过的行
  • 李强:把做强国内大循环作为推动经济行稳致远的战略之举
  • 北京13日冰雹过后,已受理各险种报案近3万件
  • 我的科学观|梅彦昌:科技创新关键在于能否跑得快,而不是有没有钱
  • 孙简任吉林省副省长
  • “11+2”复式票,宝山购彩者领走大乐透1170万头奖
  • 俄乌释放停火和谈信号,克宫:将组建“相应级别”谈判代表团