开发工具调试器图形学GPU【免费下载链接】renderdocRenderDoc is a stand-alone graphics debugging tool.项目地址https://gitcode.com/gh_mirrors/re/renderdoc点击查看免费下载本指南围绕 RenderDoc 图形调试工具中的着色器编辑能力展开覆盖两大场景为纹理查看器编写并编辑自定义可视化着色器Custom Visualisation Shader以及对捕获场景中的实际着色器进行临时替换与实时验证。读完本文你将掌握如何通过内置 Shader Editor 窗口基于 Scintilla 编辑器修改着色器源码、按F5一键编译应用并理解 RenderDoc 如何借助 SPIRV-Cross、glslang、spirv-dis 等外部工具在 DXBC/DXIL/SPIR-V/GLSL 之间完成反编译与编译的完整原理。本文是 docs/how/how_edit_shader.rst 的深度展开相关联动文档包括自定义可视化着色器指南、纹理查看器与管线状态窗口。编辑自定义着色器Custom Visualisation Shader自定义可视化着色器允许你在纹理查看器中查看任意纹理时先执行一段自定义变换再把结果显示出来。最常见的用途是解码打包数据或自定义格式的数据或者把某些数据以更直观的视觉效果呈现。你可以先阅读如何编写自定义可视化着色器来了解着色器的完整书写规范本小节聚焦如何编辑。着色器文件的存放位置与外部编辑这些着色器以文件形式存放在应用程序存储目录中Windows%APPDATA%/qrenderdoc/其他平台Linux/macOS 等~/.local/share/qrenderdoc你可以使用任意编辑器直接修改这些文件。RenderDoc 会在加载捕获时加载这些着色器并且会持续监视文件变化——无论是外部修改还是在 RenderDoc 内置编辑器中的修改保存后都会自动重新加载生效。需要特别注意的是在外部编辑时目前没有途径看到编译警告或编译错误。也就是说外部编辑器修改文件后如果编译失败你无法在文件系统中直接获知编译信息只能回到 RenderDoc 内部观察结果详见下文错误处理与回退行为一节。使用内置编辑器编辑自定义着色器更推荐的编辑方式是在 RenderDoc 内部完成在纹理查看器中为当前纹理选中一个自定义着色器选择方式见纹理查看器文档点击编辑按钮弹出一个新窗口显示该自定义着色器的源码。此后你对这个着色器所做的任何修改都会保存到文件、重新编译并即时反映在纹理查看器中前提是你仍然选中了该自定义着色器。此外编辑可视化着色器时编辑器还提供按钮可以插入若干预定义的变量片段snippets这些片段对应 RenderDoc 可以绑定的预定义输入例如 UV 坐标、纹理尺寸、选中的 mip 级别、采样器与各类纹理资源绑定宏。具体片段内容与绑定说明详见自定义可视化着色器指南。编辑场景着色器Scene ShaderRenderDoc 允许你编辑捕获中实际使用的着色器修改后可以实时看到效果——这是调试渲染问题的利器。启动着色器编辑器打开管线状态窗口pipeline_state 文档定位到你希望修改的管线阶段点击该着色器旁边的编辑按钮。如果该阶段存在多个编辑选项会出现下拉菜单供你选择——这通常出现在有多个工具可用于反编译/编译该着色器时具体见下文着色器处理工具一节。作用范围与持久性修改会影响所有使用该着色器的动作而不仅仅是当前选中的动作这些更改会一直持续到编辑窗口关闭为止关闭后恢复捕获中的原始着色器因此这是一种临时替换机制适合做改了看看效果的迭代调试不会永久破坏你的捕获数据。着色器处理工具Shader Processing Tools为什么需要外部工具每种图形 API 都有其原生着色器格式API原生着色器格式D3D11DXBC 字节码D3D12DXBC 字节码以及 DXILVulkanSPIR-V 字节码OpenGLGLSL 着色器文本此外字节码着色器可能内嵌了带原始源码与编译设置的调试信息。当你要编辑一个着色器时RenderDoc 的处理逻辑是如果可用优先显示原始源码来自内嵌的调试信息否则尝试调用一个着色器处理工具把字节码反编译成可用形式如果没有任何工具可用则显示一个生成的stub占位骨架或默认反汇编作为编辑起点。每个工具都被定义为从某种输入翻译为某种输出编译器可能把 HLSL 编译为 DXBC反编译器可能把 SPIR-V 反编译为 HLSL。当编辑窗口打开时RenderDoc 会自动选择最合适的工具把源码编译回 API 的原生格式并且如果调试信息可用还会用调试信息中的编译参数预填充工具参数供你进一步定制。RenderDoc 内置的已知工具从源码 renderdoc/api/replay/replay_enums.h 中的KnownShaderTool枚举与ToolExecutable映射可以看到RenderDoc 默认认识以下工具及可执行文件名KnownShaderTool可执行文件用途SPIRV_Cross/SPIRV_Cross_OpenGLspirv-crossSPIR-V 反编译spirv_dis/spirv_dis_OpenGLspirv-disSPIR-V 反汇编glslangValidatorGLSL/glslangValidatorHLSL/glslangValidatorGLSL_OpenGLglslangValidatorGLSL/HLSL 编译为 SPIR-Vspirv_as/spirv_as_OpenGLspirv-asSPIR-V 汇编dxcSPIRV/dxcDXILdxcHLSL 编译为 SPIR-V / DXILfxcfxcHLSL 编译为 DXBCslangSPIRV/slangDXILslangcSlang 编译为 SPIR-V / DXIL其中多个 SPIR-V 处理工具会随 RenderDoc 构建版本一同分发如果系统上已经安装了对应版本RenderDoc 也能自动探测并直接使用。自动探测逻辑可以在 qrenderdoc/Code/Interface/PersistentConfig.cpp 中看到它先在 PATH 中查找工具再到 RenderDoc 安装目录的plugins/spirv/以及各平台对应的plugins-win64/spirv/、plugins-linux64/spirv/、../share/renderdoc/plugins/spirv/等插件目录中查找。工具的执行与参数替换每个ShaderProcessingTool在配置层面包含六个字段见 qrenderdoc/Code/Interface/PersistentConfig.htool标识这是哪个已知工具KnownShaderToolname人类可读名称executable可执行文件路径args命令行参数input/output输入与输出格式ShaderEncoding用于在运行时按着色器类型匹配工具。实际的执行流程实现在 qrenderdoc/Code/Interface/ShaderProcessingTool.cpp 中CompileShader()把编辑后的源码写入临时文件shader_input展开参数后启动外部进程产物写入shader_output见 ShaderProcessingTool.cpp 第 316-368 行DisassembleShader()把字节码写入临时输入文件再调用工具反编译见 ShaderProcessingTool.cpp 第 255-314 行RunTool()负责进程启动、等待与输出收集stdout/stderr 被合并捕获工具的启动失败、崩溃、非零退出码都会被记录到日志面板见 ShaderProcessingTool.cpp 第 66-253 行。命令行参数中支持以下替换占位符配置说明见 docs/window/settings_window.rst占位符替换内容{input_file}输入文件名{output_file}输出文件名{entry_point}入口点名称仅在编译着色器时替换{glsl_stage4}GLSL 阶段简写vert、tesc、tese、geom、frag、comp另有task、mesh{hlsl_stage2}HLSL 阶段简写vs、hs、ds、gs、ps、cs另有as、ms{full_stage}完整阶段名vertex、hull、domain、geometry、pixel、compute另有amplification、mesh{spirv_ver}使用的 SPIR-V 版本例如spirv1.2、spirv1.6{vulkan_ver}对应的 Vulkan 标识版本例如vulkan1.0、vulkan1.3该值可能是有损的会取能编译给定 SPIR-V 版本的下一个最低Vulkan 版本例如 SPIR-V 1.2 没有对应的 Vulkan 版本会被向下取整为vulkan1.0阶段简写与版本映射的实现分别可见 ShaderProcessingTool.cpp 第 31-44 行glsl_stage4、full_stage、hlsl_stage2数组与 ShaderProcessingTool.cpp 第 50-64 行vulkanVerForSpirVer映射。SPIR-V 版本本身则来自着色器调试信息中的spirver编译标志见 ShaderProcessingTool.cpp 第 268-271 行。在设置窗口中配置工具在设置窗口的Shader Viewer 选项 → Shader Processing Tools区域settings_window.rst 对应章节你可以查看和启用自动探测到的内置工具添加自定义工具此时必须自行配置命令行参数使用上表占位符为工具选择输入与输出格式如 HLSL 输入、SPIR-V 输出RenderDoc 会在运行时按当前着色器的需求匹配最合适的工具在着色器编辑面板上每次调用工具时还可以额外追加自定义参数。使用内置着色器编辑器当你启动着色器编辑器后主窗口会填满着色器源码你可以借助Scintilla 编辑器进行编辑支持基础编辑控制与语法高亮。Scintilla 组件随 qrenderdoc 源码一同分发见 qrenderdoc/3rdparty/scintilla 目录编辑器本体实现在 qrenderdoc/Windows/ShaderViewer.cpp。编译并应用更改点击工具栏中的Apply changes按钮或按下F5RenderDoc 将编译着色器并应用更改编译产生的警告和错误会追加显示在主源码下方的错误面板中。选择编译工具在编辑器的下部区域你可以选择用于编译的工具并配置传递给该工具的参数。这相当于对设置窗口中的工具配置做一次按需覆盖——例如临时切换 SPIR-V 版本或调整编译器优化标志。错误处理与回退行为理解编译失败时的回退行为能避免在调试时产生困惑可视化着色器编译出错该着色器会被从纹理查看器中移除显示回正常的 RGB 显示直到你修复错误场景着色器替换编译出错会回退到捕获中的原始着色器直到错误被修复。也就是说错误状态下你不会看到损坏的渲染结果而是干净地回退到原样显示方便你专心修正源码。相关阅读如何编写自定义可视化着色器预定义输入与绑定宏完整参考纹理查看器文档管线状态窗口文档设置窗口Shader Processing Tools 配置着色器查看器窗口说明编辑相关指引的汇总入口赞分享开发工具调试器图形学GPU【免费下载链接】renderdocRenderDoc is a stand-alone graphics debugging tool.项目地址https://gitcode.com/gh_mirrors/re/renderdoc点击查看免费下载相关推荐如何用iphone-inline-video实现静音视频自动播放如何用iphone inline video实现静音视频自动播放 在iPhone的Safari浏览器中视频播放通常会自动进入全屏模式这给网页设计带来了诸多不SukiUI自定义背景着色器开发指南SukiUI自定义背景着色器开发指南 背景介绍 SukiUI作为一款现代化的UI框架提供了强大的主题定制功能。在实际开发中开发者经常需要根据产品需求调整界面UI组件桌面应用Cesium 3D可视化中的自定义着色器开发指南Cesium 3D可视化中的自定义着色器开发指南 前言 在现代3D可视化应用中着色器编程是实现高级视觉效果的核心技术。Cesium作为领先的地理空间可视化引擎前端3D渲染图形学数据可视化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
