一种同时解决目标独立光栅化和可变频率的像素着色器的通用实现方法

一种同时解决目标独立光栅化和可变频率的像素着色器的通用实现方法
0 引言
多点采样抗锯齿(msaa),目标独立光栅化(tir),和可变频率像素着色器(vrs)是三种不同的directx 特性。
多点采样抗锯齿是一个像素有多个采样点,来达到抗锯齿效果。
目标独立光栅化是direct11.3提出的新特性,旨在使direct2d能够将栅格化步骤从cpu移动到gpu,同时仍然保留direct2d抗锯齿需求。抗锯齿路径的渲染将在gpu上进行2次渲染。第一遍将把每个像素的覆盖率写入一个中间渲染目标纹理。路径将被镶嵌成不重叠的三角形。该gpu将编程使用目标独立光栅化和添加剂混合在第一次通过。第一次使用的像素着色器将简单地计算覆盖掩码中设置的比特数,并输出规范化为[0.0,1.0]的结果。在第二次过程中,gpu将从中间纹理读取数据并写入应用程序的渲染目标。此遍历将路径颜色乘以第一次遍历期间计算的覆盖率。
可变频率的像素着色器是direct12提出的新特性,由于性能的限制,像素着色器不能总是在输出图像的每个部分都提供相同的质量水平。可变速率着色,或粗略像素着色,是一种机制,使分配渲染性能/功率在不同速率的渲染图像。在视觉上,有些情况下阴影率可以降低,而在可感知的输出质量上几乎没有降低,从而导致“自由”的性能。
一般来说在gpu上对这三种特性进行支持需要不同的逻辑门。多点采样抗锯齿特性提出时间比较早,在很多gpu的功能上已经涵盖了,如何将目标独立光栅化以及可变频率像素着色器这两个特性在已经支持多点采样抗锯齿特性的gpu上实现对架构设计师提出了新的挑战。
1 现有方案存在的问题
在d3d管线中,om(output merger)会收到经过光栅化(rasterizer)的mask,用来确定哪些像素(pixel)需要更新,哪些不需要更新;同时om会收到经过ps(pixel shader)计算之后输出的每个像素(pixel)的颜色值,并将颜色值按照mask输出到对应的内存空间中。
为了得到更好的图形渲染效果,d3d运用了各种反走样算法,其中最常见的就是msaa(multisampling anti-aliasing)。简单来说就是将1个像素(pixel)用多个点去采样,这些新的采样点我们称为sample,目前1个pixel包含的sample个数可以是1,2,4,8,16. 因为像素被细化,所以可以有效降低图形边界的锯齿现象。按照d3d spec要求,msaa 在3d管线中各个阶段的sample个数如表1所示。
其中n的取值是1,2,4,8,16,rasterizer和om rt的sample必须是一样的。rt是指render target。
d3d11.3在msaa的基础上提出了tir(target independent rasterization)。这个新的特性可以帮助gpu处理2d的反走样。tir在3d管线中各个阶段的sample个数要求如表2。
其中n的取值是1,2,4,8,16.tir和msaa 最大的区别有两点:(1)tir的时候不要求rasterizer的sample数和om rt相同;(2)ps 只能运行在pixelfrequency模式下,即每个pixel不论包含了多少个sample只能调用一次ps。
d3d12为了兼顾图像质量和硬件性能,对反走样算法提出了更高的要求—vrs(variable rate shading). 这个新的特性主要思想是节省ps的调用,不再是按照pixel或者sample的粒度去调用ps,而是按照coarse pixel的粒度去调用ps,即n个pixel调用一次ps(n可以是2,4,8,16),d3d12称其为subsampling.vrs在3d管线中各个阶段sample个数要求如表3。
ps调用粒度我们用分数表示,比如1/2表示2个pixel调用一次ps。除了表中列出的组合,其他的情况d3d12不要求支持。
msaa,tir和vrs是三个不同的特性,都需要gpu hardware支持。msaa,tir和vrs是三个不同的特性,不会同时开启,om需要支持它们需要三块不同的逻辑单元,如图1所示。
msaa, tir 和vrs是三个不同的特性,不会同时开启,om如果用三个不同的逻辑单元去处理会增加硬件设计的逻辑门。
2 算法设计
本文希望实现一种统一的算法能处理这三个不同的特性,达到简化逻辑节省gatecount的目的。
在om入口处增加两个简单的处理单元,一个处理单元根据rasterizer的samplemode调整coveragemask和坐标;另一个处理单元根据ps的samplemode调整输出的data。然后将经过调整的coveragemask和color输入到一个统一的逻辑单元,这个逻辑单元可以用一套逻辑处理所有msaa,tir, vrs情况。具体设计如图2。
unitive unit只用处理msaa的所有case。rasterizer到om的带宽是固定的,也就是说rasterizer输出的maskbit位是不变的,在这种情况下unitive unit需要能处理各种sample mode的情形。我们约定rasterizer送出门的mask代表的第一个pixel为左上点,那么这个左上点的坐标(x,y)必须根据rasterizer到om的带宽满足对齐(aligned)的规则。
假设rasterizer到om带宽是maskwidth, 一般来说maskwidth大于等于16并且是2的幂,否则就没办法在16x的情况下一次性表示一个完整的pixel。n是rasterizer的samplenum.
raster mask能表示的rt pixel个数:
rasterpixelnum=(maskwidth>>log2n)
x对齐规则:
11)+
((log2 rasterpixelnum)&1))
y对齐规则:
11))(1)
以rasterizer到om的带宽是16bits为例,那么在不同msaa模式下收到的pixel左上点坐标和ps的color笔数如表4。
为了能让tir和vrs共用可以处理msaa 的unitive unit,我们需要调整rasterizer输出的mask和左上点pixel的坐标,以及ps输出的color,使它们能满足unitive unit的输入要求,以16bits带宽为例,即满足表4。
2.1 processmask unit
首先看processmask unit,这个模块需要根据rasterizer samplenum.和om rt samplenum.来调整mask和pixel坐标。综合前文里关于tir和vrs的内容,rasterizer sample num.和om rt samplenum.只有表5所示的三种组合。
unitive unit能处理msaa特性,msaa要求rasterizer samplenum.和om rt samplenum.是一样的,所以对于tir和vrs,在进入unitive unit之前需要processmask unit将rasterizer输出的mask和pixel左上点坐标按照om rt标准进行调整。也就是需要支持两种调整:nx rasterizer mask进行down-sample调整到1x om rt的mask,或者1x rasterizer mask进行up-sample调整到nx om rt的mask.
2.2 down-sample
rasterizer sample num.是n,om rt samplenum.是1。假设rasterizer输出的mask为rastermask,pixel左上点坐标是(x,y)。
经过process mask unit调整后输出的mask为finalmask,其宽度和rastermask相同,调整后的pixel左上点坐标是(finalx, finaly)。
调整的方法用伪代码表示如下。
index_size_x=(log2n>>1)+(log2n&1);
index_size_y=(log2n>>1);
aligned_size_x=((log2rasterpixelnum)>>1)+((log2rasterpixelnum)&1);
aligned_size_y=(log2rasterpixelnum)>>1;
block_index=0;
finalx=(~((1<<(index_size_x+aligned_size_x))-1))&x;
finaly=(~((1<<(index_size_y+aligned_size_y))-1)) & y;
for(i=0;i>aligned_size_x)>>i)&1)<<(i*2));
for(j=0;j >aligned_size_y)>>j)&1)<<(j*2+1));
pixel_mask=0;
for(n0;n {
temp_mask=0;
for(m=0;m> (m+n))&1);
}
pixel_mask|=(temp_mask<<(n/n));
}
finalmask=pixel_mask<<(block_index*(maskwidth/n));
以rasterizer到om的带宽是16bits为例。
从n个sampledown-sample到1个samplemask。把nbit的samplemask全部用或运算最后得到1bit的pixelmask。再根据pixel左上点坐标对pixelmask进行移位。
调整pixel左上点的坐标,om rt samplenum.为1时,16bit的mask是(4,4)对齐的,所以需要将表5-1???中rasterizersamplenum.等于n对齐的坐标调整成(4, 4)对齐的pixel坐标。
以n=4为例,假设rasterizer输出的mask是b’0100 1011 0000 1111, pixel 坐标(6,12), pixel坐标要从(2,2)对齐调整到(4,4)对齐,那么两个坐标分别在低两位与上b'00,调整为(4,12)。mask每4bit调整成1bit,变成b'1101,然后根据坐标确定这个2×2是4×4里的第几个2×2,将mask移位,最后得到b'0000 0000 1101 0000。如图3。
2.3 up-sample
rasterizer sample num.是1,om rt samplenum.是n。一笔rasterizer的输出会被processmask unit拆成n笔送进unitive unit。
假设rasterizer输出的mask为rastermask,pixel左上点坐标是(x,y)。
经过process mask unit调整后输出n笔mask分别为finalmask_i,i∈[0,n-1],其宽度均和rastermask相同,调整后的n笔pixel左上点坐标分别是(finalx_i, finaly_i),i∈[0,n-1]。
调整的方法用下面伪代码来表示。
sample_mask_per_pixel=(1<>1)+((log2rasterpixelnum)&1);
aligned_size_y=(log2rasterpixelnum)>>1;
x_stride=1< y_stride=1< for(i=0;i {
for(j=0;j>(i*n+j))==1)
finalmask_i=sample_mask_per_pixel<>2)&1)<>1)&1)| (((i>>3)&1)<<1));
finalx_i=x+x_offset*x_stride;
finaly_i=y+y_offset*y_stride;
}
以rasterizer到om的带宽是16bits,n=4为例,假设rasterizer输出的mask是b'0100 1011 0000 1111, pixel 坐标(24,12).这一笔数据会被拆分成4笔数据送进unitive uint,如图4所示。
2.4 processcolor unit
process color unit需要根据ps sample mode和om rt samplemode将ps 输出的color进行复制,匹配unitive unitdataentry的输入。综合表1、表2、表3,只需要对vrs的color进行展开,将ps 输出的coarse pixel的color转成pixel的color。
ps是1/2samplemode,一个color复制成两份转成1samplemode。
ps是1/4samplemode,一个color复制成四份转成1samplemode。
ps是1/8samplemode,一个color复制成八份转成1samplemode。
ps是1/16samplemode,一个color复制成十六份转成1samplemode。
经过上述的转化unitive unit会认为ps 是msaa 的pixel frequency,然后进行相应的处理。设计的时候也可以根据unitive unit的具体实现将color复制更多份(和om rt sample mode相对应),使unitive unit认为ps是msaa的samplec frequency。
3 结语:算法优点
对于已经支持msaa 特性的gpu,如果想升级支持d3d11.3的tir和d3d12的vrs,在om模块部分不需要设计全新的逻辑,可以对这两种新的特性进行巧妙的转化,然后共用msaa的逻辑处理单元。这样既省去了复杂的逻辑设计和验证,也节省了gatecount。

华为mate10什么时候上市?华为mate10即将上市:10月16日发布,无愧旗舰之名!网友:感觉要买不起华为
陶瓷3D打印市场潜力巨大,将迎来黄金发展期
SLG系列锂电池浆料螺旋混合自动生产线
浪潮存储为中汽创智自动驾驶训练提速
特斯拉Model 3表里不一:外表炫酷内饰廉价感十足
一种同时解决目标独立光栅化和可变频率的像素着色器的通用实现方法
免费下载 |《智慧多功能杆发展白皮书(2022)》
推动“双千兆”发展的四点建议与期许
华为P40Pro又有新信息爆出,四曲面机身+双挖孔
国产手机太猛! iPhone 8还没发布苹果就担心市场了
2018年印度智能手机出货量达到1.423亿台,同比增长14.5%
网络分析仪软件对无源器件的测试
骁龙笔记本千兆级LTE为5G笔记本铺平道路
如何使用超级电容器设计简单、不间断的电源
新型二维原子晶体材料Si₉C₁₅的构筑
河套IT TALK——TALK 11:《超文本和超链接》的读书心得(上)
三星计划在 3nm 工艺节点上使用环绕式闸极电晶体(GAA)?
荣耀9和一加5哪个好?从设计、屏幕、拍照、性能等方面进行对比评测
电动车持续发展,搞好充电基础设施是关键
Autotalks推出首款支持5G-V2X技术的V2X芯片组