19 OpenGL计算着色器

计算着色器 Compute Shaders

除了面向图形的着色操作,例如顶点着色、曲面细分、几何着色和片段着色之外,OpenGL还可以通过使用计算着色器进行通用计算。计算管线是一种执行通用着色器的单阶段机器形式。计算着色器按照第7.1节描述的方式创建,其类型参数为COMPUTE_SHADER。它们作为程序对象的一部分附加并使用,如第7.3节所述。

计算负载由称为工作组的工作项组成,并通过计算程序的可执行代码处理。工作组是一组执行相同代码的着色器调用,可能以并行方式执行。同一工作组内的某个调用可以通过共享变量与其他成员共享数据(参见OpenGL着色语言规范第4.3.8节“Shared Variables”),并发出内存和控制屏障以与其他同一工作组的成员同步。

通过调用以下函数启动一个或多个工作组:

void glDispatchCompute( uint num_groups_x, uint num_groups_y, uint num_groups_z );

每个工作组将由计算着色器阶段的活动程序对象处理。计算着色器阶段的活动程序与确定其他管线阶段活动程序的方式相同,如第7.3节所述。尽管工作组内部的各个着色器调用作为一个整体执行,但各个工作组是完全独立且按未指定顺序执行的。

num_groups_xnum_groups_ynum_groups_z 分别指定将在X、Y和Z维度调度的工作组数量。内置向量变量gl_NumWorkGroups 将初始化为 num_groups_xnum_groups_ynum_groups_z 参数的内容。一次可以调度的工作组的最大数量可以通过调用GetIntegeri v函数获取,其中target设置为MAX_COMPUTE_WORK_GROUP_COUNT,index设置为0、1或2,分别代表X、Y和Z维度。

如果任一维度的工作组计数为零,则不调度任何工作组。

每个维度的工作组大小在编译时通过输入布局限定符在程序关联的一个或多个计算着色器中指定(参见OpenGL着色语言规范第4.4.1.4节“Compute Shader Inputs”)。程序链接后,可以通过调用GetProgramiv函数并设置pname为COMPUTE_WORK_GROUP_SIZE来查询程序的工作组大小。这将返回一个包含由其输入布局限定符指定的计算程序的工作组大小的三个整数数组。

最大工作组大小可以通过调用GetIntegeri v函数获取,其中target设置为MAX_COMPUTE_WORK_GROUP_SIZE,index设置为0、1或2,分别用于检索X、Y和Z维度的最大工作组大小。

此外,单个工作组内的最大调用次数(即三个维度之积)可以通过调用GetIntegerv函数并设置pname为MAX_COMPUTE_WORK_GROUP_INVOCATIONS来确定。

void glDispatchComputeIndirect( intptr indirect );

等效于调用 glDispatchCompute 函数,但其参数 num_groups_xnum_groups_ynum_groups_z 的值从间接指定的基本机器单元偏移量处当前绑定到 DISPATCH_INDIRECT_BUFFER 绑定点的缓冲区中获取的三个 uint 值初始化。如果 num_groups_xnum_groups_ynum_groups_z 中任意一个大于相应维度的 MAX_COMPUTE_WORK_GROUP_COUNT 值,则结果未定义。

计算着色器变量 Compute Shader Variables

计算着色器可以访问属于当前程序对象的 uniform 变量。关于 uniform 存储的限制以及操作 uniform 的方法在第7.6节中有描述。

在单个程序对象中声明为 shared 的所有变量的总大小存在限制。这个限制以基本机器单位的单位表示,可以通过查询 MAX_COMPUTE_SHARED_MEMORY_SIZE 的值来获取。对于给定程序对象所需的总大小是依赖于实现的。但是,这个总大小不得超过如果所有声明为 shared 的活动变量改为声明为带有 std430 修饰符的着色器存储块的任意排序成员时所获得的最大块大小。

计算着色器查询 Compute Shader Queries

计算着色器查询使用查询对象来跟踪计算着色器调用的数量。

当调用 BeginQuery 并以 COMPUTE_SHADER_INVOCATIONS 作为目标时,由 GL 维护的计算着色器调用计数被设置为零。当计算着色器调用查询处于活动状态时,每次调用计算着色器时计数器都会递增(参见第19章)。

实现允许跳过某些计算着色器调用的执行,并且由于实现相关原因执行额外的计算着色器调用,只要渲染的结果在其他方面保持不变。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/687756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go-zero读取mysql部分字段

读取部分字段,使用函数 QueryRowPartialCtx 。 假设有如下一张表: CREATE TABLE test (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ctime DATETIME);要读取字段 ctime 值。 定义一结构体: type X struct {state int db:"…

电子商务跨境电商大数据的关键技术之—主流电商大数据采集

大数据采集是指通过各种技术手段和工具收集、获取和提取大规模数据的过程。在信息时代,各种互联网、物联网、移动设备等的普及和应用,产生了海量的数据,这些数据被称为大数据。大数据采集就是对这些数据进行收集和抓取,以获得有意…

手把手一起开发SV4E-I3C设备(二)

JEDEC DDR5 SPD Hub Devices例程 DDR5生态系统的核心是SidebandBus Protocol 参考下图,可以将SV4E-I3C的端口1声明为主服务器(模拟主机控制器),并且它可以属于SV4E-I3C上的一个总线。端口2可以作为SPD Hub DUT的Local Bus侧的从站连接。这个从站可以被…

12(S)-HETE ELISA kit--灵敏的ELISA试剂盒

灵敏的ELISA试剂盒,能够检测任何物种的培养上清液和血浆中的12(S)-HETE HETE是由脂氧合酶代谢花生四烯酸产生的副产物。12(S)-HETE是12(S)-氢过氧四烯酸(12(S)-HpETE)还原的立体特异性羟基产物,其本身是花生四烯酸的12-脂氧酶代谢…

23年秋招结束,同学们陆陆续续拿到心仪的offer!24年秋招出发!

续接上次上岸同学的分享:还在担心秋招吗?看看24届已上岸同学的经验分享! 秋招的时间过程相同,但经历却各不相同。学历、专业似乎都影响着同学们的面试经历和感受。校招的面试毫无疑问学历的加持是巨大的优势,学历好会…

精通嵌入式开发:实战与案例分析

精通嵌入式开发需要深入理解嵌入式系统的原理和技术,并通过实战和案例分析来提升实际应用能力。以下是关于精通嵌入式开发的实战与案例分析的小点论述: 1.掌握嵌入式系统原理 需要深入学习嵌入式系统的基本原理,包括处理器架构、嵌入式操作系…

Linux系统管理

任务管理 什么是任务管理 在系统运维过程中,可能需要在某人预设的时间执行特定任务 比如定时发送邮件、备份并清空日志文件等任务 任务的内容可以看作是一系列命令或者一个脚本,我们则需要在特定时间去执行它 任务管理的类型 计划执行,在特定…

票房25亿!《热辣滚烫》的创造性模仿,普通人赚钱的落地方法

最近很火的电影《热辣滚烫》包含了我们很多普通人做点小事儿,赚点小钱非常落地的方法,叫做创造性模仿。 很多人说《热辣滚烫》是翻拍的日本《百元之恋》,知道这个有什么用?就证明贾玲不是那么优秀吗?对我们普通人想赚…

全新超大屏三防加固平板为什么做到Intel core i7的高性能

在小编看来,一款加固三防平板电脑结构规划的思路:一定是要在三防规划中留意取舍的。如果是三防要求高的的商品,则需要将三防规划作为一个主线来做,其他方面环绕三防要求打开,并要有清晰的三防思路和总体思想&#xff0…

java面试微服务篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…

【c++】const引用

Hello everybody!今天给大家讲讲有关const引用部分的知识,因为这部分知识涉及到const与引用直接如何灵活的运用,且不太好理解。所以我认为讲一下这里的知识还是很有必要的! 1.权限可缩小 首先,当我们定义了a,在给a取别…

人工智能学习与实训笔记(二):神经网络之图像分类问题

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 目录 二、图像分类问题 2.1 尝试使用全连接神经网络 2.2 引入卷积神经网络 2.3 分类函数Softmax 2.4 交叉熵损失函数 2.5 学习率优化算法 2.6 图像预处理算法 2.6.1 随机改变亮暗、对比度和颜色等 …

这才是大学生该做的副业,别再痴迷于游戏了!

感谢大家一直以来的支持和关注,尤其是在我的上一个公众号被关闭后,仍然选择跟随我的老粉丝们,你们的支持是我继续前行的动力。为了回馈大家长期以来的陪伴,我决定分享一些实用的干货,这些都是我亲身实践并且取得成功的…

将QStringList按指定分隔符连接为一个字符串

通过使用QStringList类提供的**join()**函数&#xff0c;我们可以直接将字符串列表strList按照指定的separator分隔符连接起来&#xff0c;无需手动遍历和拼接字符串。 QStringList strList{“hello”,“world”,“c”,“c#”}; qDebug()<< strList.join(“\”); 输出&am…

Codeforces Round 924 (Div. 2) 题解 A~D | JorbanS

A - Recovering a Small String string solve() {cin >> n >> m;if (n < m) swap(n, m);if (n & 1 && m & 1) return no;if (m & 1 && n m << 1) return no;return yes; }B - Make Equal 由于排列 1 ∼ n 1\sim n 1∼n 均…

scoped实现原理

scoped实现原理 为组件实例生成一个唯一标识&#xff0c;给组件中的每个标签对应的dom元素添加一个标签属性&#xff0c;data-v-xxxx给<style scoped>中的每个选择器的最后一个选择器添加一个属性选择器&#xff0c;原选择器[data-v-xxxx]&#xff0c;如&#xff1a;原选…

Typora的下载安装(文末有安装包,2024亲测可用)

一、安装步骤 1、首先下载安装包&#xff0c;解压到你的目录下面 2、进入到解压后的文件夹下面&#xff0c;看到如下的内容&#xff1a; 3、双击exe文件开始安装&#xff0c;选择安装目录&#xff0c;并记下安装地址&#xff01;&#xff01;&#xff01; 选择创建桌面快捷方…

2024年腾讯云4核8G12M轻量应用服务器测评,2月更新

4核8G服务器支持多少人同时在线访问&#xff1f;阿腾云的4核8G服务器可以支持20个访客同时访问&#xff0c;关于4核8G服务器承载量并发数qps计算测评&#xff0c;云服务器上运行程序效率不同支持人数在线人数不同&#xff0c;公网带宽也是影响4核8G服务器并发数的一大因素&…

树和二叉树的基本知识

一、树的概念及结构 1.树的概念 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的 。 有一个 特殊…

2024春节过后,抖店爆款出单类目产品,应季产品需要提前布局

我是王路飞。 之前给你们强调过&#xff0c;“应季品”是最容易爆单的产品类型&#xff0c;没有之一。 那么在2024年春节刚过的现在&#xff0c;当别人还沉浸在过年的氛围中时&#xff0c;有心的商家早就开始布局未来三个月的爆款类目和产品了。 今天的内容&#xff0c;就给…