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的语法的更多相关文章

  1. display:inline 和display:inline-block和display:block的区别

    之前讲过块级元素使用display:block 行内元素使用display:inline 那么今天我们就来区分一下display:inline,display:inline-block和display ...

  2. css学习--inline-block详解及dispaly:inline inline-block block 三者区别精要概括

    *知识储备: 内联元素:是不可以控制宽和高.margin等:并且在同一行显示,不换行. 块级元素:是可以控制宽和高.margin等,并且会换行. 1.inline-block 详解 (1)一句话就是在 ...

  3. 转:c++里关于cerr,clog,cout三者的区别

    c++里关于cerr,clog,cout三者的区别: cerr(无缓冲标准错误)-----没有缓冲,发送给它的内容立即被输出 clog(缓冲标准错误)--------有缓冲,缓冲区满时输出 cout- ...

  4. 解决在HTTPS页面里嵌套HTTP页面浏览器block的问题

    问题描述: 浏览器默认是不允许在HTTPS里面引用HTTP页面的,ie下面会弹出提示框提示是否显示不安全的内容,一般都会弹出提示框,用户确认后才会继续加载,但是chrome下面直接被block掉,只在 ...

  5. order-independent transparency & programmable blending

    Yang, McKee - OIT and Indirect Shadows(SIGGRAPH 2010 Advanced RealTime Rendering Course).pptx 最近又发现了 ...

  6. java里getPath、 getAbsolutePath、getCanonicalPath的区别

    本文链接:https://blog.csdn.net/wh_19910525/article/details/9314675 File的这三个方法在api中都有说明,仅以程序为例说明. package ...

  7. JSP页面的隐含对象和Servlet程序里的对象之间的关联和区别

    首先,有两个概念: 1.JSP页面的域对象:pageContext,request,session,application对象(四个) void setAttribute(String name,Ob ...

  8. inline-block和block的区别

    <html> <head> <style> body,ul,li,span{padding:0px;margin:0px;} </style> < ...

  9. body里面的onload和window.onload的区别

    区别:body里面的onload是在“页面加载完成后执行的动作” window里面的onload是在“页面加载时执行的动作” 例子:在html页面中有一个大图片,想要在图片显示出来后提示一个消息框“图 ...

随机推荐

  1. MongoDB的可视化工具(Studio 3T)的安装

    通过可视化工具,我们可以不用在命令行操作MongoDB了,可以直接使用类似于SQLyog的软件进行相关操作 1.下载地址(二者择其一即可),可使用迅雷来进行下载,否则下载速度极其慢 2018.4.6版 ...

  2. IO-file 02 文件的状态

    package com.bwie.io; import java.io.File; /** * 文件状态 * 1.不存在  exists * 2.存在 *      文件:isFile *      ...

  3. 《C专家编程》读书笔记之第1~4章

    一.C:穿越时空的迷雾 1. C标准中定义了描述编译器的特点的一些术语: (1) 由编译器定义的(imprementation-defined) 由编译器设计者决定如何处理.例如:整型数右移时要不要扩 ...

  4. poj3977(折半枚举+二分查找)

    题目链接:https://vjudge.net/problem/POJ-3977 题意:给一个大小<=35的集合,找一个非空子集合,使得子集合元素和的绝对值最小,如果有多个这样的集合,找元素个数 ...

  5. 内存泄漏之malloc替换方法

    //内存泄漏之malloc替换方法 //内存泄漏之malloc替换方法#include "stdio.h"#include "stdlib.h" /*文件路径名 ...

  6. 亿级Web系统搭建――单机到分布式集群 转载

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  7. Django 用Session和Cookie分别实现记住用户登录状态

    简介 由于http协议的请求是无状态的.故为了让用户在浏览器中再次访问该服务端时,他的登录状态能够保留(也可翻译为该用户访问这个服务端其他网页时不需再重复进行用户认证).我们可以采用Cookie或Se ...

  8. Spark学习一:Spark概述

    1.1 什么是Spark ​ Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎. ​ 一站式管理大数据的所有场景(批处理,流处理,sql) ​ spark不涉及到数据的存储,只 ...

  9. mysqlbinlog实战

    关于mysqlbinlog命令,下列参数应用频率较高:--base64-output:选项有三个参数,never表示不处理ROW格式日志,只处理传统的基于STATEMENT格式日志.decode-ro ...

  10. HTTP协议探究(序章)

    1 HTTP协议基于TCP协议 (1)TCP三次握手连接 HTTP客户端(Chrome浏览器): IP:192.168.1.47 端口:59875 MSS:1460 HTTP服务器(Nginx服务器) ...