因为做这个工具的需求就是要在Unity中还原,所以我需要还原程hlsl代码。为了尽量减少人工,因此我需要一版hlsl的编译结果。
已知SPIRV-Cross是可以做这个事情的,只是默认没配。那我们来配一下

在Renderdoc中配置和查看

  1. 先打开Settings-Shader Viewer
    1. notion image
  1. 查看Process列,如果有转到HLSL的版本那当我没说,直接用就行
  1. 如果没有的话我们就需要自己新建,点击Add新增一项
    1. notion image
  1. 已知SPRIV-Cross可以做这个,那我们就使用SPIRV-Cross作为Tool。把Executable设置为你本地的那个spirv-cross.exe文件
  1. 注意Tool Type必须选择Custom Tool,因为如果Tool Type直接选择为SPIRV-Cross会直接被Renderdoc锁死Input 和 Output不能修改,经典我教你做事
  1. 然后遵循上面一条,Input改为SPIR-V,Output改为HLSL
    1. notion image
  1. 对于Custom Tool来说,Command Line是一定要有内容的,否则可执行文件不知道如何编译。这里只需要为它定义 输入输出的文件和编译方式,像这样
    1. {input_file} --output {output_file} --hlsl
      注意这里Renderdoc默认给出的指令对于输入文件是有如下标记的
      --input
      这个是否需要使用跟SPIRV-Cross的版本可能有关,中间换过API。我自己本地版本测试是不能带这个标记的,然后要把{input_file}放在最前(指令写法相当于上一篇文章CLI中的Command)。有可能你的版本需要遵循Renderdoc演示加上这个标记才能识别input file。
      以及如果你“机智”的按照官方说明把 - - stage 的配置从{glsl_stage4}改为{hlsl_stage2},是编不出结果的,提示没这个stage,原因未知,把这个设置去掉就正常了
      总之最后大致配置就是长上面截图那个样子
  1. 自行设置一个名字,我这里是设置为spirv-cross-HLSL,点OK保存后,在Disassembly type中可以查看到新增选项 HLSL,括号内是你自己的命名
    1. notion image
  1. 然后运行正常的话就可以直接编译出结果了
    1. notion image

使用Python代码配置和查看

基于上一篇进行修改
在上一篇Args这里我是使用了“-v”指令进行的编译,意思是—vulkan-semantics的缩写,把Vulkan生成的SPIR-V转为GLSL(这是SPIRV-Cross的默认规则)
如果你想转hlsl,实际上按照文档给出的,只要把-v换成—hlsl就可以了
notion image
同时也记得把- -stage设置也去掉
 
Renderdoc自动化导出重组踩坑(三):缺失的API描述现行MMO可用低开销头发渲染方案