Unreal-HLSLCC概览

  1. 协议

这篇文章搞了半天图死活生成不出来,最后发现居然是plantuml中的“<”形状符号和markdown冲突了,淦…

这个问题把我给整累了,不想写太多了,直接看图,其实也没有整理的很详细,Unreal的HLSLCC代码写得还是挺好的,就是每次编shader的时候会拉起一个独立的处理进程这个操作挺骚气的。

[plantuml]
title Unreal HLSLCC\nhttps://tis.ac.cn/blog/kongdeyou/hlslcc_unreal_simple/
:HLSL>
:MCPP Preprocess;
split
:D3DShaderCompiler|
kill
split again
:mesa_hlsl_parse(..);
note right
HLSL -> AST
end note
:mesa_ast_to_hir(..);
note right
AST -> IR
end note
:Optimization;
:class ir_visitor {..};
split
:ir_gen_glsl_visitor;
:visitor.run(..);
:GLSL>
:OpenGLShaderCompiler|
kill
split again
:FGenerateVulkanVisitor;
note right
copy from ir_gen_glsl_visitor
end note
:visitor.run(..);
:GLSL>
:VulkanShaderCompiler|
kill
split again
:FGenerateMetalVisitor;
:visitor.run(..);
:MSL>
:MetalShaderCompiler|
kill
end split
end split
[/plantuml]

还可以参考Unreal的这篇官方文章:
https://docs.unrealengine.com/zh-CN/ProgrammingAndScripting/Rendering/ShaderDevelopment/HLSLCrossCompiler/index.html

gnm的PSSL即PS4平台,shader是HLSL的变体,相似度极高,Unreal和Unity都选择采用简单的宏替换的方式处理,Unreal的HLSLCC在MCPP Preprocess的时候就把它处理好了,不会做IR的生成和转换。

协议

本文以上内容遵循CC BY-ND 4.0协议,署名-禁止演绎。
转载请注明出处:https://tis.ac.cn/blog/kongdeyou/hlslcc_unreal_simple/
并署名:kongdeyou(https://tis.ac.cn/blog/author/kongdeyou/)

原始链接:https://blog.kdyx.net/blog/kongdeyou/hlslcc_unreal_simple/

版权声明: "CC BY-NC-ND 4.0" 署名-不可商用-禁止演绎 转载请注明原文链接及作者信息,侵权必究。

×

喜欢或有帮助?赞赏下作者呗!