作者: 左右流之
通过对AMD驱动的仔细研究,发现之前人们在解决AMD显卡问题上出现了盲区,也可以说是思路被固定住了。这个盲区在于,人们没有完全理解FrameBuffer的机制,现在我提出一种新的解决思路和方案,可以灵活地运用FrameBuffer的参数,而不被FBName所制约。本文分为两个部分,第一部分介绍脱离FBName制约的显示器接口修正的方式;第二部分介绍FrameBuffer的参数的使用,达到调整显卡工作状态的目的。通过几个网友的测试,结果显示Vega显卡运行FCPX时火力全开,在这里特别感谢QQ好友Mace协助测试。
一、显示接口修正的connectors方法
如果你需要开核显并且必须用WateverGreen驱动,您可以跳过此节继续阅读。
在对AMD10000等驱动的仔细阅读之后,发现和显示器相关的参数是 connectors
,黑果们说的给FBName打补丁其实是给connectors打补丁,概念上应该有些差池和误导。AMD驱动里指定了一些FBName,每个特定的FBName里面又定义了自己的connectors。系统驱动连接显示器主要就是通过connectors定义的数据,所以黑果大概率不能完全对应显示接口。
如果我们不指定FBName,就可以直接在设备属性中定义connectors,达到修正显示器接口的目的。这种方式类似于WhateverGreen.kext的做法,WhateverGreen.kext默认就不指定FBName,一旦指定FBName,就会有个别或全部显示接口无法正常工作。
简单地说,在设备属性中注入connectors,就不能指定FBName了。这似乎是个缺陷,但却是自由度很高的方法。
下面举例说明:
我们先准备好显卡的connectors数据(用ATI_FrameBuffers_Edition.php提取后修正):
1 | 000400000403000000010101000000002205020200000000 |
上面的数据是4个接口的,认为修正差不多了可以试验了。注意一定要从零号索引开始按照顺序写全接口。然后我们有两种方式把connectors注入到设备属性中。
写入OpenCore的DeviceProperties项目中
就像下图这样:写到显卡SSDT中
图中绿色的字符是ASL编译后自动添加的注释。
操作稍微麻烦一点,要把数据整理成字节的形式(你要是手动拆分我也无话可说)。然后写入SSDT中,编译完之后就是这样:
再强调一遍,这种方式不能指定FBName。
需要特别说明,指定connectors的方式对Navi系列显卡不适用。通过查看AMDRadeonX6000Framebuffer驱动,初步得出的结论是,此系列显卡驱动直接读取显卡Bios的设置来进行显示器连接的。
由此本人对白苹果Vega显卡很短小的VBIOS有了进一步的认知,白苹果的Vega显卡Bios中的信息仅有有显卡版本信息、基本的config,剩下的字节都是用FF占位。白果显卡的显示器连接等一些列工作机制都是驱动里定义的,比如显示连接器。
使用connectors的意义是为了摆脱FBName的制约,如果你对如何获得connectors不是很清楚或者你打算偷懒,其实我们可以直接用WhateverGreen来替代这部分工作。
就是说,点亮显示器是下一步工作的前提。
二、自定义工作参数
通过对驱动的研究,现在知道了FBName包含aty_config、aty_properties和connectors这几个部分。这就是我们自定义工作参数的基础。connectors部分通过自己注入或者使用WhateverGreen来解决。
在AMD10000Controller驱动info.plist文件里,定义了aty_config、aty_properties两个集合,里面一项一项的参数就是默认配置。摆脱了FBName的制约之后,显卡驱动就使用默认配置了,工作效率会打折扣。
那么有没有办法提升工作效率呢?有,就是自定义参数。
aty_config
默认的aty_config的参数比较多,但不存在于FBName中。
以下几个参数是FBName使用的aty_config参数,在此特别提示出来。
CFG_NVV
CFG_PTPL2_TBL
CFG_PTPL2_CNT
CFG_PTPL2_MAX
CFG_PTPL2_MIN
CFG_TPS1S
CFG_USE_FBC
这里有一个特别的参数CFG_PTPL2_TBL需要注意,它应该定义的是颜色转换信息,用错了会丢metal功能集并导致RGB三色错乱,你只能看到正常的黑白灰,其他颜色是错误的。查看2017年的iMacPro/Vega56使用的FBName是japura,就有CFG_PTPL2_TBL参数,猜测是为了对接苹果的某种显示器,咱没白果,只能猜猜。
aty_properties
同样,下面列出所有FBName用到的的PP参数
PP参数 | 数据类型 | 参考数值 |
---|---|---|
PM_PWR_GEMINI_BGT | Number | 400 |
Force_Load_FalconSMUFW | boolean | YES |
PP_ACDCGpioDisabled | Number | 0 |
PP_DiDtSQPatternWidthOverride | Number | 14 |
PP_DiDtSQStallPatternOverride | Number | 16383 |
PP_DisableDIDT | Number | 0 |
PP_DisablePCCLimitControl | Numberr | 1 |
PP_EnableUploadFirmware | Number | 1 |
PP_FclkGfxClkRatio | Number | 1036831949 |
PP_GfxOffControl | Number | 0 |
PP_PhmUseDummyBackEnd | Number | 0 |
PP_VG10TelemetrySlopOverWrite | Number | 514 |
PP_WorkLoadPolicyMask | Number | 1 |
Enable/Disable为开关性质,参数就两个:0或者1
GfxOffControl这个参数,设置值为1时,为低功耗配置的FBName使用。
另外还可以加入PP_PhmSoftPowerPlayTable参数,来防治风扇暴走。QQ好友Mace 4月10日帮助测试了Vega显卡的风扇控制表,只需要设置风扇参数,可以不用超频。
这些的参数意义,有兴趣的可以自行研究,具体我也不是很明白,用就完了。
比较
我偷懒,直接抄袭了ATY,Japura 、ATY,Araguaia、ATY,Baudo 这三个FBName的配置参数并分别注入到设备属性中做对比。
经过测试,初步的认知结论如下:FBName | GeekBench5跑分 | FCPX相关 | 功耗及风扇控制 |
---|---|---|---|
ATY,Japura | 4万7——5万4 | 8k导出 1分钟 | 低功耗 风扇控制良好 |
ATY,Araguaia | 6万8——7万2 | 8k导出30秒,渲染和转码满载 | 高功耗 风扇启动后不能停止 |
ATY,Baudo | 4万3 | 8k导出37秒,渲染和转码满载 | 低功耗 风扇控制较好 |
@Mace 提供的测试截图
对HEVC编码的测试见第四节
注入方式
注入方式同第一节。具体参数也可以自己去查阅/S/L/E/AMD10000Controller.kext驱动包里的info.plist文件。
附上我的一个配置截图
具体的调整还需要各位自行钻研。
三、推论
FrameBuffer参数我们可以自己定义,虽然没有了FBName名字,但是有实质。显示器的连接我们也可以自定义。这几乎就是天马行空了。
至此,得到如下推论:
如果你的显卡必须用WhateverGreen驱动来点亮屏幕,那么可以通过注入相关参数来达到使用FBNmae的效果。
进一步,我们可以以一种全新的思路来解决AMD显卡驱动的问题。
通过可用的connectors参数或WhateverGreen驱动来解决显示器连问题,绕过FBName的限制,然后注入FrameBuffer驱动参数提升显卡的工作效率。
额外的收获是不用对内核打补丁了。
四、验证
按照现在这套思路,重新配置z370+8700k+vega56,火力全开,核显、独显、CPU都能很好滴参与工作,导出HEVC格式视频也令人满意。
配合最新的1.3.8版的WhateverGreen驱动,这套方案完美解决了Z370的问题。
从图上看,Vega负责渲染,核显负责HEVC转码,CPU负责数据读写。
不需要什么FBName,也不需要什么EFIVersion。
吐槽
关于GeekBench跑分软件,你真的不需要当真,娱乐娱乐就好了。真的的性能体现在运行FCPX等软件上。
鸣谢
QQ好友 Mace
原创文章,转载请注明出处和作者。