找回密码
 立即注册
搜索
楼主: redfallen

[硬件] 转帖:以开发者视角深入解析,PS4的改变及其未来

[复制链接]
发表于 2013-5-2 10:06 | 显示全部楼层
引用第26楼忧郁的lc于2013-05-01 15:23发表的  :




但是大部分实用的shadow map算法,都不是直接拿深度缓冲,而是经过PS处理后的数据
.......

这里说的shadowmap只是指在lighting space里得到的那张depth texture。因为只需要depth,所以PS确实只是走个过场。然后在后续计算shadow的pass里使用这张depth texture,至于你是poisson noise,PCF,还是ESM等等都是后话。
回复

使用道具 举报

发表于 2013-5-2 10:11 | 显示全部楼层
引用第38楼鸡蛋灌饼于2013-05-02 01:28发表的  :

谁艹谁啊……
PS4被艹太正常了,处理器不行,农企的OpenGL实现又出名的烂,UE4测OpenGL总没DX测得多。怎么说都赢不了
ps4还没实机,早期开发机运行的东西你觉得能算数?
而且sony什么时候直接用过opengl
回复

使用道具 举报

发表于 2013-5-2 10:21 | 显示全部楼层
引用第39楼roadcross于2013-05-02 10:04发表的  :

hlsl我不懂,但是NV的Cg的shadowmap demo也是直接用深度纹理,tex2Dproj可以直接访问深度纹理,这函数在hlsl里也可以这么做
锯齿问题显然和纹理精度无关,与纹理尺寸有关,与渲染阴影纹理时的投影矩阵范围有关
方差阴影贴图和普通的阴影贴图差别很大,不能一概而论,而且这东西的漏光问题不是一般的要命,而且浮点纹理的开销

尺寸跟精度都有关啊。。。
depth texture的尺寸导致的锯齿就是pixel 跟 texel的比例相差太大,另外depth精度也会导致aliasing,比如shadow acne。

最后吐个槽,这个其实跟用啥shader 语言没啥关系。。。
回复

使用道具 举报

发表于 2013-5-2 10:29 | 显示全部楼层
引用第27楼鸡蛋灌饼于2013-05-01 16:02发表的  :

从硬件角度来看没什么“不可避免”一说
图形API瞎JB抽象的后果

。。。不是JB抽象,目前阶段从硬件角度来看render pipeline里面PS是必经的阶段。DX11的compute shader可以输出到buffer里作为终结,但那是通用计算的pipeline
回复

使用道具 举报

发表于 2013-5-2 17:56 | 显示全部楼层
引用第43楼Hiro3D于2013-05-02 10:29发表的  :


。。。不是JB抽象,目前阶段从硬件角度来看render pipeline里面PS是必经的阶段。DX11的compute shader可以输出到buffer里作为终结,但那是通用计算的pipeline
别搞笑了,什么“从硬件角度来看render pipeline”,你先确认硬件上真存在这么个pipeline吧
引用第41楼roadcross于2013-05-02 10:11发表的  :

ps4还没实机,早期开发机运行的东西你觉得能算数?
而且sony什么时候直接用过opengl
Sony的那堆以反开发者出名的东西谁没事研究它啊
回复

使用道具 举报

发表于 2013-5-2 18:18 | 显示全部楼层
绕开API是先直接和内核打交道的话,DSA什么的不过是一块显存,直接mmap出来用CPU读写都可以
Evergreen系内存操作很繁琐,SI上你还可以蛋碎的直接用BUFFER_LOAD/STORE直接在随便哪个程序里访问内存。

看看指令集手册就知道图形API折腾出多少麻烦事
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-2 21:29 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2013-5-2 21:34 | 显示全部楼层
color write mask也不能阻止ps
你这个片段要不要discard?ps里改不改深度,gpu是没办法判断的
回复

使用道具 举报

发表于 2013-5-2 21:39 | 显示全部楼层
引用第46楼hourousha于2013-05-02 21:29发表的  :
绕开pixel shader直出depth buffer,如果是为了省fillrate和shader power,直接设置color write mask再关闭alpha test不就成了么?别把驱动程序想得那么傻。
如果连同color rendertarget耗费的显存空间都想省,这个ATI也早就支持了。用个fourcc hack format(NULL format)就成了嘛。
PS是必须跑的,参考HD6900 ISA第18页
但如果你直接跟SI硬件打交道的话,有太多的方法可以在其他Shader里面访问DSA了
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-2 21:41 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2013-5-3 00:12 | 显示全部楼层
引用第45楼鸡蛋灌饼于2013-05-02 18:18发表的  :
绕开API是先直接和内核打交道的话,DSA什么的不过是一块显存,直接mmap出来用CPU读写都可以
Evergreen系内存操作很繁琐,SI上你还可以蛋碎的直接用BUFFER_LOAD/STORE直接在随便哪个程序里访问内存。

看看指令集手册就知道图形API折腾出多少麻烦事

纯粹的蛋疼,绕开API直接和内核打交道当然自由度高。问题是你绕开图形API的话是打算怎么做日常开发呢?所有操作自己实现一遍?那不就是自己山寨一套么,你能做得更好?光会喷有啥用,提不出更好的整套方案,咱就在现实方案的基础上好好讨论呗。
之前说道pipeline我还是在基于DX考虑,没想到你的意思是直接绕过去。。。
回复

使用道具 举报

     
发表于 2013-5-3 00:27 | 显示全部楼层
引用第41楼roadcross于2013-05-02 10:11发表的  :

ps4还没实机,早期开发机运行的东西你觉得能算数?
而且sony什么时候直接用过opengl
开发机比实机的性能更强嘛。而且,你能找到比山猫差的cpu?
回复

使用道具 举报

发表于 2013-5-3 00:34 | 显示全部楼层
引用第46楼hourousha于2013-05-02 21:29发表的  :
绕开pixel shader直出depth buffer,如果是为了省fillrate和shader power,直接设置color write mask再关闭alpha test不就成了么?别把驱动程序想得那么傻。
如果连同color rendertarget耗费的显存空间都想省,这个ATI也早就支持了。用个fourcc hack format(NULL format)就成了嘛。
恩,一般都是会把color write mask跟alpha test关闭的,但是理论上PS还是要跑一遍,所以之前oz01在说PS4能完全跳开PS可以秒杀PC。
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 00:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 00:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2013-5-3 01:09 | 显示全部楼层
引用第54楼hourousha于2013-05-03 00:56发表的  :

理论上怎么就需要跑一遍呢?即使基于DX这个抽象层考虑,也没这个必然限制,例子就是X360的DX接口组织形式和DX9 for PC有七八成相似,而在不调用任何独有接口(比如BeginZPass)情况下,也可以轻松实现跳过PS的方式。
而且前面都说了double Z时连fragment Attribute interpolater之前的Scan Converter都由于只处理position属性所以吞吐量翻倍,即使想跑PS用什么数据跑啊?

其实,即使要跑一遍,也没想出PS4怎么就秒杀PC了,PS3由于不是Unified Shader所以跳不跳PS无大所谓(填充率带宽才是瓶颈)。比这更BT的功能在X360上都用烂了,比如单周期64 z pixel(8rop + double Z + 4 MSAA ZSample)之类的功能,也没见X360怎么秒杀PC。
因为pipeline要跑完PS再经过output merger才算完,所以理论上是要跑PS的。
话说我也不觉得这个就能秒杀PC。。。
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 08:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 09:38 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2013-5-3 09:58 | 显示全部楼层
引用第49楼hourousha于2013-05-02 21:41发表的  :

所以我后面加了‘关闭alpha test(DX10后被discard代替了)’
还是那话,别把驱动程序想得那么傻,别忘了,若干年以前驱动程序就是可以根据ps输出深度与否,存在discard/texkill与否,决定是否启动early-z cull的。

我突然想到,其实这玩意不就是从NV3X开始的double Z(RSX中称作fastZ,C1中称作double speed mode)吗?本质上就是关闭颜色相关操作从而使从rasterazation(scan converter)开始的吞吐率倍增。在G80/C1之前的显卡,由于不是Unified Shader,所以没多少人关心是否跳过pixel shader,但仔细一想,既然rasterazation都拿来做Z/Stencil相关了,那color运算就成无米之炊了,想执行也没得执行啊。
.......
early-z你得把深度缓冲设只读才有效

引用第51楼囧囧囧于2013-05-03 00:27发表的  :
开发机比实机的性能更强嘛。而且,你能找到比山猫差的cpu?
开发机不是测试机,你似乎搞混了
回复

使用道具 举报

发表于 2013-5-3 10:04 | 显示全部楼层
引用第53楼newdasemo于2013-05-03 00:37发表的  :
那么巨硬想再次碾压ps的话该怎样呢?
价格[strike]关键游戏发售时的硬件损坏率[/strike]
回复

使用道具 举报

发表于 2013-5-3 10:11 | 显示全部楼层
http://developer.amd.com/wordpre ... et_Architecture.pdf
第18页都自己己去看吧
另外理论都别说了
实际开发的时候那就是另一回事
目前在pc上彻底不存在正常的单独写深度缓存不折腾ps的办法
而且似乎大家对单独深度写入的玩法还不太清楚,可不光是用来渲染shadowmap这么单调
回复

使用道具 举报

发表于 2013-5-3 10:31 | 显示全部楼层
引用第56楼hourousha于2013-05-03 08:09发表的  :

那个我说,您不会看到在pixel shader stage夹在rasterazation stage和output merger stage之间,于是就认为无论如何一定要跑一个pixel shader吧?
那您告诉我夹在中间的不跑怎么往下走呢?
GS跟tessellation能跳过的,这个大家都知道。但PS能跳过,你确定?
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 12:56 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 13:15 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2013-5-3 16:43 | 显示全部楼层
引用第50楼Hiro3D于2013-05-03 00:12发表的  :


纯粹的蛋疼,绕开API直接和内核打交道当然自由度高。问题是你绕开图形API的话是打算怎么做日常开发呢?所有操作自己实现一遍?那不就是自己山寨一套么,你能做得更好?光会喷有啥用,提不出更好的整套方案,咱就在现实方案的基础上好好讨论呗。
之前说道pipeline我还是在基于DX考虑,没想到你的意思是直接绕过去。。。
你总不会连我在喷啥都看不出来吧:
OpenGL和DX的抽象很糟糕,不能充分利用现代GPU的硬件

整套方案也有人在做,你以为农企折腾那么久HSA是打算干什么?最早喷DX和OpenGL的也是农企的人。
引用第63楼hourousha于2013-05-03 13:15发表的  :

很简单的问题,通常情况下Z-buffer的值是在PS中计算的吗?对应framebuffer中的位置是在PS中生成的么?
因此不执行PS,怎么就死路一条了?early-z需要fragment的z值与ZBuffer的值决定是否在执行pixelshader之前cull掉fragment,这功能如果按照您的想法那是显然不可实现的不是?
有些功能对于开发人员是透明的,但不代表硬件的执行方式和API里面的流程完全一致,它只要和API里所示流程不发生冲突从而产生预料之外的结果即可,Double Z,或者EarlyZ都是这样。连hack(比如R2VB on DX9,QuadBuffer On pre-DX11.1)都不需要。
Direct to metal的API,比如DX for X360,可以切实决定硬件的运行,因此在那里面SetPixelShader(NULL)即代表无PixelShader执行。在构建于抽象层之上的API,比如DX for PC。它的具体实现有赖于驱动的具体实现,在不同硬件,甚至不同版本驱动,有些功能的内部实现流程可能都不尽相同,但就如同上面说的,诸如‘跳过PS’并非属于和API所述流程相冲突的问题,所以不存在不能实现的情况,前面也举了实际的Double Z的例子。所以关于跳过PS这个东西,退一步讲属于‘软件开发人员无法确定在某个硬件某版驱动上,是否确实跳过了不必要的PS操作’的情况。
别猜了,下套Radeon的ISA好好看看Cayman和SI的Shader是怎么工作的直接就能出结论了。

顺便吐槽下顶楼文章,64个Ring也要拿出来说是创新的话恐怕得被黄老板笑死,这功能人家NV30就有了。
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 17:34 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2013-5-3 19:15 | 显示全部楼层
引用第65楼hourousha于2013-05-03 17:34发表的  :

我暂时没时间去看这个white paper,主要是这玩艺和对我来说没什么用。
我就想问问,为何一个pixel shader bound的全屏quad的渲染,如果按照Double Z的方式设置(关闭Color Write,关闭Alpha Test,保留Z Write),这种情况下帧率的大幅提升来自于什么?
你不会以为内存访问不算开销的吧
回复

使用道具 举报

     
发表于 2013-5-3 19:21 | 显示全部楼层
引用第65楼hourousha于2013-05-03 17:34发表的  :

我暂时没时间去看这个white paper,主要是这玩艺和对我来说没什么用。
我就想问问,为何一个pixel shader bound的全屏quad的渲染,如果按照Double Z的方式设置(关闭Color Write,关闭Alpha Test,保留Z Write),这种情况下帧率的大幅提升来自于什么?
建议试试看在ps里采样100次512*512的无mipmap纹理
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-3 20:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2013-5-4 04:52 | 显示全部楼层
GPU根本不需要统一内存寻址啊,人家一直按摩尔定律在玩,两年后光显存就比你PS4整个8GB DRAM大很多了
回复

使用道具 举报

     
发表于 2013-5-4 10:48 | 显示全部楼层
引用第69楼pzgr43于2013-05-04 04:52发表的  :
GPU根本不需要统一内存寻址啊,人家一直按摩尔定律在玩,两年后光显存就比你PS4整个8GB DRAM大很多了
@hourousha
@鸡蛋灌饼
@Hiro3D
你们谁来调教一下这位,我已经吐槽无力了
回复

使用道具 举报

发表于 2013-5-4 13:02 | 显示全部楼层
引用第63楼hourousha于2013-05-03 13:15发表的  :

很简单的问题,通常情况下Z-buffer的值是在PS中计算的吗?对应framebuffer中的位置是在PS中生成的么?
因此不执行PS,怎么就死路一条了?early-z需要fragment的z值与ZBuffer的值决定是否在执行pixelshader之前cull掉fragment,这功能如果按照您的想法那是显然不可实现的不是?
有些功能对于开发人员是透明的,但不代表硬件的执行方式和API里面的流程完全一致,它只要和API里所示流程不发生冲突从而产生预料之外的结果即可,Double Z,或者EarlyZ都是这样。连hack(比如R2VB on DX9,QuadBuffer On pre-DX11.1)都不需要。
Direct to metal的API,比如DX for X360,可以切实决定硬件的运行,因此在那里面SetPixelShader(NULL)即代表无PixelShader执行。在构建于抽象层之上的API,比如DX for PC。它的具体实现有赖于驱动的具体实现,在不同硬件,甚至不同版本驱动,有些功能的内部实现流程可能都不尽相同,但就如同上面说的,诸如‘跳过PS’并非属于和API所述流程相冲突的问题,所以不存在不能实现的情况,前面也举了实际的Double Z的例子。所以关于跳过PS这个东西,退一步讲属于‘软件开发人员无法确定在某个硬件某版驱动上,是否确实跳过了不必要的PS操作’的情况。

是我2了,early Z这个这么明显的跳过PS的例子你在前面提过了我还没反应过来,而且从一开始感觉就想歪了。
Hiro3D是上班的时候刷S1的号,懒得换了。
回复

使用道具 举报

发表于 2013-5-4 13:05 | 显示全部楼层
引用第64楼鸡蛋灌饼于2013-05-03 16:43发表的  :

你总不会连我在喷啥都看不出来吧:

OpenGL和DX的抽象很糟糕,不能充分利用现代GPU的硬件


整套方案也有人在做,你以为农企折腾那么久
HSA
是打算干什么?最早喷DX和OpenGL的也是农企的人。


知道你在喷啥,就是觉得你喷的有点远。。。
回复

使用道具 举报

发表于 2013-5-4 16:01 | 显示全部楼层
引用第72楼bbtt2007于2013-05-04 13:05发表的  :



知道你在喷啥,就是觉得你喷的有点远。。。

.......
按Console的尿性和日企蛋疼的习惯,开放底层访问还真不是不可能的……
再说了,PS4这代都是农企的片子,开放了也差不到哪去,就是API方面两边可能要扯皮好久
引用第68楼hourousha于2013-05-03 20:24发表的  :

我能说您思路广吗?前面已经说了是一个pixel shader bound的quad,不存在overdraw。那么这个ColorWrite导致的直接内存访问能有多少?用这个情况就是为了容易看出性能瓶颈的变化。
根据LS的建议改了一下,pixel shader1(称为PS1)中有100次tex指令。Pixel shader2为一条简单指令(return float4(1.0f,1.0f,1.0f,1.0f) )测试数值如下
1:PS1,开启ZBuffer,关AlphaTest,开Color Write,400-600fps(因为shader里有一些动态分支)
2:PS1,开启ZBuffer,关AlphaTest,Color Write,4500fps
.......
1. PS1的TEX是可能被优化掉的
2. 跳没跳PS抓command stream看它怎么设置register怎么dispatch就知道,不需要盲人摸象的从性能上猜。当然你说我舍本逐末本来就是为了性能跳不跳PS无所谓那我也认。
3. 最近忙没工夫折腾这个,要看结果那就等跳票吧
回复

使用道具 举报

发表于 2013-5-5 03:21 | 显示全部楼层
引用第73楼鸡蛋灌饼于2013-05-04 16:01发表的  :
按Console的尿性和日企蛋疼的习惯,开放底层访问还真不是不可能的……

再说了,PS4这代都是农企的片子,开放了也差不到哪去,就是API方面两边可能要扯皮好久

PS4的研发主要是美国这边在搞,console的对底层的开放性历来就比PC强,毕竟是游戏专用机器。
回复

使用道具 举报

头像被屏蔽
     
发表于 2013-5-5 14:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2013-5-7 20:16 | 显示全部楼层
不明觉厉。。。这货以后能装win7?


——— 来自Stage1st Reader Evolution For iOS
回复

使用道具 举报

     
发表于 2013-5-7 20:19 | 显示全部楼层
也许可以装win8
回复

使用道具 举报

发表于 2013-5-8 09:23 | 显示全部楼层
绝对没可能装win
硬件都不支持了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-9-11 18:44 , Processed in 0.392231 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表