metal2 里 programmable blending 和image block的区别 语法以及persistent thread group的语法
programmable blending
刚接触这个概念的时候 挺激动的 因为能解决很多管线里面的问题 比如
切一次rt再切回来
为了做read write same rt
有了这个 就不用切啦 可以在一个pass里 read write同一块rt啦
还能解决画了opque 切出去做后处理 再切回来画transparent 本质上不用pb无法用一个pass解决还是因为这里为了给transparent做softedge时要读原来的depth所以和上面是一样的
这个的核心就是用attachment 来comebine rts(就像mrt所以这就是framebuffer fetch -ogl那个扩展的功能)
理解到这层 我之前把它pb和image block弄混了
image block能做的是 控制tile的那个layout
它的语法是这样
FragData是个数据结构
像这样
struct FragData
{
half4 color;
}
Imageblock的存在可以在中途改变这种layout
像这样或者这样
所以这货 image block本质上就是个pixel local storage呀
对比看 programmable blending它的语法和数据是这样
把input gBuffers output了
也就是说 输入输出都是一块buffer的时候 programmable blending就会被开启
而image block 允许你在shader里定义一个结构体来处理tile memory,不需要attachement的参与了(rtv,dsv)
你可以用ib在shader change这些layout以合并pass
可以用它来做msaa 下的transparent
说回deferred lighting那个案例
如果用programmable blending来做 因为attachement参与的缘故 需要你把它设置为memoryless
也可以用image block来做这样 就没有attachment什么事情了 也就不需要处理它了
要用image block change layout
需要tile shading
这货 dispatch a configuable thread group per tile 也可以per pixel
看着像用compute shader的实现 就是作用在一块tile上的cs
在tileshader操作 image block
然后可以让这部分数据在tile memory了
生成的数据和fragment共享时通过 threadgroup
也能让这部分数据在tile memory上
语法如下
上面的是tileshader下面是fragmentshader
他们有一个共同的参数 active_light_mask用threadgroup 声明成共用在tilemem上
===================
总体来说因为 imageblock和programmable blending的功能很类似 所以语法也很类似
首先声明在 params里面的 imageblock需要和rt的结构一致
然后 你就可以在tile shader里用它啦 和programmable blending的用起来是一样的
给fragment那步也是用imageblock 声明在params里面
frag_data.read(thread_local_position);
frag_data.write(thread_local_position);
apple挺坑的 他在ppt里给的这段代码编译不过 要改改才能跑。。。还可以这样吗
==================================
persistent thread group
这个 在初始化那里用
[cmd setTheradgroupMemoryLength: size offset:0 atIndex:0]
声明 多了的往下排排坐
metal2 里 programmable blending 和image block的区别 语法以及persistent thread group的语法的更多相关文章
- display:inline 和display:inline-block和display:block的区别
之前讲过块级元素使用display:block 行内元素使用display:inline 那么今天我们就来区分一下display:inline,display:inline-block和display ...
- css学习--inline-block详解及dispaly:inline inline-block block 三者区别精要概括
*知识储备: 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行. 块级元素:是可以控制宽和高.margin等,并且会换行. 1.inline-block 详解 (1)一句话就是在 ...
- 转:c++里关于cerr,clog,cout三者的区别
c++里关于cerr,clog,cout三者的区别: cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出 clog(缓冲标准错误)--------有缓冲,缓冲区满时输出 cout- ...
- 解决在HTTPS页面里嵌套HTTP页面浏览器block的问题
问题描述: 浏览器默认是不允许在HTTPS里面引用HTTP页面的,ie下面会弹出提示框提示是否显示不安全的内容,一般都会弹出提示框,用户确认后才会继续加载,但是chrome下面直接被block掉,只在 ...
- order-independent transparency & programmable blending
Yang, McKee - OIT and Indirect Shadows(SIGGRAPH 2010 Advanced RealTime Rendering Course).pptx 最近又发现了 ...
- java里getPath、 getAbsolutePath、getCanonicalPath的区别
本文链接:https://blog.csdn.net/wh_19910525/article/details/9314675 File的这三个方法在api中都有说明,仅以程序为例说明. package ...
- JSP页面的隐含对象和Servlet程序里的对象之间的关联和区别
首先,有两个概念: 1.JSP页面的域对象:pageContext,request,session,application对象(四个) void setAttribute(String name,Ob ...
- inline-block和block的区别
<html> <head> <style> body,ul,li,span{padding:0px;margin:0px;} </style> < ...
- body里面的onload和window.onload的区别
区别:body里面的onload是在“页面加载完成后执行的动作” window里面的onload是在“页面加载时执行的动作” 例子:在html页面中有一个大图片,想要在图片显示出来后提示一个消息框“图 ...
随机推荐
- 转换函数conversion function
类转换分为两个角度 转换自身为其他类型 把其他类型转换为自身 Example: 这里我们可以将b转换为class xxx 的类型(方式2),也可以将me转换为double,然后再讲结果转换为doubl ...
- 使用JQuery获取被选中的checkbox的value值
上网查了一下,感觉一些人回答得真的是不知所云,要么代码不够简便.或者是有些想装逼成分等. 以下为使用JQuery获取input checkbox被选中的值代码: <html> & ...
- 运算符优先级 以及 && (逻辑与) 和||(逻辑或)的优先级:
运算符优先级(从高到低列出) 运算符 描述 . [] () 字段访问.数组下标.函数调用以及表达式分组 ++ -- - ~ ! delete new typeof void 一元运算符.返回数据类型. ...
- [转]Life of a binary
发现一篇讲程序生命周期的文章,感觉蛮不错.
- Ubuntu 下开发ARM
1. 准备工作 linux下自带虚拟串口的驱动,不需要手动安装.CP2102之类的USB转串口,是ttyUSBx. 所有的设备都在/dev目录下,简单扫描串口的办法: ls /dev > bef ...
- WPF DataGrid控件中某一列根据另一个文本列的值显示相应的模板控件
之前做项目的时候需要实现这样一个功能.WPF DataGrid有两列,一列为"更新状态”列,一列为"值"列,如果"更新状态"列的值为“固定值更新”,则 ...
- JWT与Session比较和作用
1. JSON Web Token是什么 JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的.自包含的方式,用于作为JSON对象在各方之间安全地传输信息.该 ...
- 编写并提取简易 ShellCode
ShellCode 通常是指一个原始的可执行代码的有效载荷,ShellCode 这个名字来源于攻击者通常会使用这段代码来获得被攻陷系统上的交互 Shell 的访问权限,而现在通常用于描述一段自包含的独 ...
- k8s之资源指标API部署metrics-server
1.部署metrics-server 从v1.8开始,引入了新的功能,即把资源指标引入api,资源指标:metrics-server,自定义指标:prometheus,k8s-prometheus-a ...
- Java String类源码
String类的签名(JDK 8): public final class String implements java.io.Serializable, Comparable<String&g ...