0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

集成电路应用杂志 来源:集成电路应用杂志 2020-07-14 11:00 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

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对齐规则:

1<<(((log2rasterPixelNum)>>1)+

((log2 rasterPixelNum)&1))

y对齐规则:

1<<(((log2rasterPixelNum)>>1))(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<=index_size_x;i++)

block_index|=((((x>>aligned_size_x)>>i)&1)<<(i*2));

for(j=0;j <=index_size_y;j++)

block_index|=((((y>>aligned_size_y)>>j)&1)<<(j*2+1));

pixel_mask=0;

for(n0;n

{

temp_mask=0;

for(m=0;m

{

temp_mask|=((rasterMask>> (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<

aligned_size_x=((log2rasterPixelNum)>>1)+((log2rasterPixelNum)&1);

aligned_size_y=(log2rasterPixelNum)>>1;

x_stride=1<

y_stride=1<

for(i=0;i

{

for(j=0;j

{

if((rasterMask>>(i*N+j))==1)

finalMask_i=sample_mask_per_pixel<<(j*N);

}

x_offset=((i&1)|(((i>>2)&1)<<1));

y_offset=(((i>>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。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 光栅
    +关注

    关注

    0

    文章

    301

    浏览量

    28389
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5111

    浏览量

    134516
  • 图像
    +关注

    关注

    2

    文章

    1096

    浏览量

    42179

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

文章出处:【微信号:appic-cn,微信公众号:集成电路应用杂志】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工程型变频器通用变频器有何区别?

    、设计定位与性能差异 1. 硬件架构差异 工程型变频器采用模块设计,支持功率单元、控制单元分离。其IGBT模块通常采用高过载设计,如150%-200%瞬时过载能力,而通用般为12
    的头像 发表于 11-20 07:33 164次阅读

    目标追踪的简易实现:模板匹配

    片 50 * 50 的像素区域与模板进行比较,而不用访问存储中原视频的帧数据;并且我可以同时对 2500 个像素点作减法,这在
    发表于 10-28 07:21

    高压变频器输出频率无故下降原因分析

    决方案三个维度,系统分析这现象背后的深层原因。 、核心机理:频率控制的闭环逻辑漏洞 变频器的输出频率并非
    的头像 发表于 07-27 22:18 1344次阅读
    高压<b class='flag-5'>变频器</b>输出<b class='flag-5'>频率</b>无故下降原因分析

    变频器频率怎么调整?

    变频器作为现代工业控制中的重要设备,其频率调整直接关系到电机转速和生产效率。本文将系统介绍变频器频率调整的原理、方法、注意事项及典型应用场景
    的头像 发表于 07-13 17:41 4539次阅读
    <b class='flag-5'>变频器</b>的<b class='flag-5'>频率</b>怎么调整?

    变频器六大调速方法的详解及适用场景

    变频器(Variable-frequency Drive,VFD)是一种集成了变频技术与微电子技术的电力控制设备。它通过改变电机的工作电源频率实现
    的头像 发表于 04-17 16:37 3222次阅读
    <b class='flag-5'>变频器</b>六大调速<b class='flag-5'>方法</b>的详解及适用场景

    一种分段气隙的CLLC变换平面变压设计

    ,验证理论设计的正确性,为变压制作提供理论依据。文中基于图1电路拓扑研究了平面变压的设计与实现方法。 2 一种分段气隙的CLLC平面变压
    发表于 03-27 13:57

    变频器频率给定方式有几种?

    是最直接、最简单的一种频率给定方式。用户可以通过变频器自带的操作键盘上的电位、数字键或上升下降键来直接改变
    的头像 发表于 02-28 07:35 1858次阅读
    <b class='flag-5'>变频器</b>的<b class='flag-5'>频率</b>给定方式有几种?

    PMP40988:可变频率、ZVS、5kW、基于 GaN 的两相图腾柱PFC参考设计

    此参考设计是一种高密度、高效率的 5kW 图腾柱功率因数校正 (PFC) 设计。该设计使用两相图腾柱 PFC,以可变频率和零电压开关 (ZVS) 运行。该控制采用新的拓扑和改进的三角电流模式
    的头像 发表于 02-24 14:53 1165次阅读
    PMP40988:<b class='flag-5'>可变频率</b>、ZVS、5kW、基于 GaN 的两相图腾柱PFC参考设计

    VirtualLab Fusion应用:光波导k域布局可视(“神奇的圆环”)

    ,光可以在TIR(全反射)作用下传播,并与光导表面上不同类型的光栅结构相结合,以耦合光进出。在VirtualLab Fusion中,k-Layout可视化工具提供了一种在k域中强大的图解方法,用于分析
    发表于 02-21 08:53

    VirtualLab Fusion应用:光栅级次分析

    的,该对话框通过双击光学设置视图中的相应元件显示。 通用设置 •在“常规”选项卡中,您可以选择分析透射或反射。 •此外,您可以指定光栅分析输出需要的文件。 −级次收集:生成一种类型
    发表于 02-11 09:47

    VirtualLab Fusion应用:光波导系统中光栅几何结构的优化

    Fusion为这项任务提供了系列强大的工具,如:可以计算基本优化函数(如均匀性和效率)的探测,以及沿着布局的特定区域实现光栅参数平滑变化的可能性。后
    发表于 02-07 09:41

    闪耀光栅的Littrow配置

    摘要 Littrow结构是单色、光谱仪和谐振一种非常常用的定向闪耀光栅方法,其目的是在衍射角等于入射角的情况下获得最高效率。显然,这
    发表于 01-10 08:59

    4804-10微型连续可变衰减ARRA

    4804-10微型连续可变衰减ARRA4804-10作为ARRA的一种特定微型连续可变衰减,能够持续调整信号衰减量的电子器件,适用于各种
    发表于 01-08 09:20

    变频器频率降低的原因及解决

    。本文将详细探讨变频器频率降低的原因及相应的解决方法,帮助读者更好地理解和处理这问题。       变频器
    的头像 发表于 12-27 07:43 3091次阅读
    <b class='flag-5'>变频器</b><b class='flag-5'>频率</b>降低的原因及解决

    光波导系统中光栅几何结构的优化

    。 VirtualLab Fusion为这项任务提供了系列强大的工具,如:可以计算基本优化函数(如均匀性和效率)的探测,以及沿着布局的特定区域实现光栅参数平滑变化的可能性。后
    发表于 12-20 10:27