How to Use Glslang

这篇具有很好参考价值的文章主要介绍了How to Use Glslang。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Execution of Standalone Wrapper

要使用独立的二进制形式,请执行glslang,它将打印一条使用语句。基本操作是给它一个包含着色器的文件,它会打印出警告/错误以及可选的 AST。

应用的特定于阶段的规则基于文件扩展名:

  • vert 顶点着色器
  • tesc 曲面细分控制着色器
  • tese 曲面细分评估着色器
  • geom 几何着色器
  • frag 片段着色器
  • comp 计算着色器

对于光线追踪管道着色器:

  • rgen 光线生成着色器
  • rint 光线相交着色器
  • rahit 光线任意命中着色器
  • rchit 光线最接近的着色器
  • rmiss 光线缺失着色器
  • rcall 可调用着色器

还有一个非着色器扩展:

  • conf 有关限制的配置文件,请参阅使用阶段的示例

构建 (CMake)

除了手动构建,您还可以直接从 GitHub 上的main-tot 版本下载适合您平台的二进制文件,这些二进制文件在成功测试后由构建机器人自动上传,并且它们始终反映main分支的最新状态。

依赖关系

  • C++17 编译器。(对于 MSVS:使用 2019 或更高版本。)
  • CMake:用于生成编译目标。
  • make: Linux , ninja 是一个替代方案(如果已配置)。
  • Python 3.x:用于执行 SPIRV-Tools 脚本。(如果不使用 SPIRV-Tools 并且“外部”子目录不存在,则可选。)
  • bison:可选,但在更改语法时需要(glslang.y)。
  • googletest:可选,但在对 glslang 进行任何更改时应使用。

构建步骤

以下步骤假设使用 Bash shell。在 Windows 上,可能就是 Git Bash shell 或选择的其他 shell。

  • 检出项目
cd <parent of where you want glslang to be there>
git clone https://github.com/KhronosGroup/glslang.git
  • 检查外部项目
cd <the directory glslang was cloned to, "External" will be a subdirectory>
git clone https://github.com/google/googletest.git External/googletest

临时添加:另外执行以下操作以避免 googletest 中的当前有所损坏:

cd External/googletest
git checkout 0c400f67fcf305869c5fb113dd296eca266c9725
cd ../..

如果您希望确保从 HLSL 生成的 SPIR-V 对于 Vulkan 是合法的,希望调用 -Os 来减少 HLSL 或 GLSL 中的 SPIR-V 大小,或者希望运行集成测试套件,请使用以下命令安装spirv-tools:

./update_glslang_sources.py
  • 配置
    假设源目录为$SOURCE_DIR,构建目录为 $BUILD_DIR。首先确保构建目录存在,然后进入到它:
mkdir -p $BUILD_DIR
cd $BUILD_DIR

对于在 Linux 上构建:

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE_DIR
# "Release" (for CMAKE_BUILD_TYPE) could also be "Debug" or "RelWithDebInfo"
  • 构建和安装
# for Linux:
make -j4 install

如果使用MSVC(Microsoft Visual Studio编译器),运行CMake配置后,使用配置管理器检查项目INSTALL。

如果需要更改 GLSL 语法

如果语法 glslang/MachineIndependent/glslang.y 发生变化,则必须使用 bison 重新编译,输出文件将提交到存储库,以避免每个开发人员在语法更改非常罕见时需要配置 bison 来编译项目。对于 Windows,您可以从GnuWin32获取二进制文件 。

重建的命令是:

bison --defines=MachineIndependent/glslang_tab.cpp.h
      -t MachineIndependent/glslang.y
      -o MachineIndependent/glslang_tab.cpp

updateGrammar当从 glslang 存储库的 glslang 子目录执行时,上述命令也可以在 bash 脚本中使用。

测试

目前,glslang 中存在两种测试工具:一种是Google Test,一种是runtestsscript。前者运行单元测试和单着色器单线程集成测试,而后者运行多着色器链接测试和多线程测试。

运行测试

runtests脚本需要将编译的二进制文件安装到**$BUILD_DIR/install**。请确保您**-DCMAKE_INSTALL_PREFIX**在构建时已向 CMake 提供了正确的配置(使用);否则,您可能需要脚本中的路径runtests。

运行Google Test 支持的测试:

cd $BUILD_DIR

# for Linux:
ctest

运行runtests脚本支持的测试:

cd $SOURCE_DIR/Test && ./runtests

基本内部操作

  • 初始词法分析由 中的预处理器完成 MachineIndependent/Preprocessor,然后由 中的 GLSL 扫描器进行细化MachineIndependent/Scan.cpp。目前没有使用flex。
  • MachineIndependent/glslang.y代码是在符号表和 AST 的帮助下使用 bison 进行解析的。符号表不会传递到后端;中间表示是独立的。该树是由语法产生式构建的,其中许多被卸载到ParseHelper.cpp、 和Intermediate.cpp。
  • 中间表示非常高级,并表示为内存中的树。这不会丢失原始程序中的任何信息,并且可以有效地将解析结果传输到后端。在 AST 中,常量被传播和折叠,并且消除了极少量的死代码。
    为了帮助链接和反射,AST 中的最后一个顶级分支列出了所有全局符号。
  • 后端编译器的主要算法是遍历树(高级中间表示),并创建内部目标代码表示。有一个关于如何执行此操作的示例MachineIndependent/intermOut.cpp。
  • 将树简化为线性字节码样式的低级中间表示可能是生成完全优化的代码的好方法。
  • 目前仍然存在一些已失效的旧式链接器类型代码。
  • 内存池:解析使用从 C++std类型派生的类型,使用自定义分配器将它们放入内存池中。这使得单个容器/内容物的分配只需几个周期并且无需重新分配。该池在 AST 生成并处理后弹出。

使用很简单:如果要调用new,则分为三种情况:文章来源地址https://www.toymoban.com/news/detail-625335.html

  • 该对象来自池(它的基类 POOL_ALLOCATOR_NEW_DELETE中有宏),您不必调用delete
  • 它是一个TString,在这种情况下 call NewPoolTString(),它从池中获取它,并且没有相应的delete
  • 该对象不是来自池,你必须对你的对象进行正常的 C++ 内存管理new
  • 功能可以通过版本/扩展/级别/配置文件进行保护:请参见中的评论glslang/MachineIndependent/Versions.cpp。

到了这里,关于How to Use Glslang的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • How to use notebook in Ubuntu 22.04

    这个时候,系统会自动打开浏览器,浏览器会自动跳转到页面http://localhost:8888/tree,如下图所示: 如果我们希望停止服务运行,可以在终端窗口中按Ctrl+C,这个时候,终端窗口命令行会出现如下变化 我们再来观察notebook浏览器画面,发现没有任何变化。

    2024年02月10日
    浏览(30)
  • How to configure Qlik Sense to use a dedicated PostgreSQL database

    The Qlik Sense Repository Database (QSR) can be moved to a dedicated standalone PostgreSQL instance not hosted on the same machine as other Qlik Sense Services. It is also possible to move an already existing QSR from a local Sense install, to a dedicated PostgresSQL database. Content: Set up a postgresSQL database Simplified checklist of steps: Moving the Q

    2024年02月07日
    浏览(25)
  • How to Use your mac to Read a Word and Repeat it more times

    The say command is a fun and useful feature on Mac computers that allows you to convert text to speech using the command line. With this command, you can make your Mac speak anything you type after it. say 命令是 Mac 计算机上一种有趣且实用的功能,它允许您使用命令行将文本转换为语音。使用此命令,您可以让您的 Mac 说

    2024年02月15日
    浏览(29)
  • How to use the Arduino-ESP32 Library as an ESP-IDF Component

    arduino-esp32 SDK ESP-IDF SDK ESP-IDF Environment Setup Guide Arduino Environment Setup Guide Arduino as an ESP-IDF component Currently, the latest Master version of the arduino-esp32 SDK requires the usage of ESP-IDF SDK environment version v4.4. For the different versions of the arduino-esp32 SDK and their corresponding ESP-IDF SDK versions, please refer t

    2024年02月15日
    浏览(43)
  • How to fix the problem that Raspberry Pi cannot use the root user for SSH login All In One

    如何修复树莓派无法使用 root 用户进行 SSH 登录的问题 修改树莓派默认的 pi 用户名和密码后,需要使用 root 用户进行 SSH 登录; 对 pi/home 文件夹进行 备份 ,复制到新用户下 xgqfrms/home 备份后,要 删除 pi 用户, 必须切换到其他用户,毕竟 pi 用户不能自己删除自己呀!⚠️ 给

    2024年02月07日
    浏览(50)
  • 基于数据结构知识解决地图着色问题

    摘  要 地图着色(map coloring)是一种组合构形,它是对于地图面集的一种 分划 ,分配地图的每一个面一种颜色,使得相邻的面(指有公共边界边)具有不同的颜色,称这样一种色的分配为这个地图的一个着色,或者说,将地图的面集分划为若干个子集,使得每个子集中的任何两面

    2024年02月03日
    浏览(25)
  • 数据结构:地图着色问题——图的应用——回溯法

    目录 前言 一、解决问题的思路 二、存储结构设计 三、代码 1.创建图函数 2.判断色号是否相同函数 3.回溯函数 4.整体代码 总结 本次解决的问题:用图模拟部分地图,对各省进行着色,要求相邻省所使用的颜色不同,并保证使用的颜色总数最少。 先来一张效果图 将邻接矩阵

    2024年02月04日
    浏览(37)
  • Lost in the Middle: How Language Models Use Long Contexts

    本文是LLM系列文章,针对《Lost in the Middle: How Language Models Use Long Contexts》的翻译。 虽然最近的语言模型能够将长上下文作为输入,但人们对它们使用长上下文的情况知之甚少。我们分析了语言模型在两项任务中的性能,这两项任务需要在输入上下文中识别相关信息:多文档问

    2024年02月09日
    浏览(31)
  • 论文解读: 2023-Lost in the Middle: How Language Models Use Long Contexts

    大模型使用的关键在于Prompt,然而大模型存在幻觉现象,如何减少这种现象的发生成为迫切解决的问题。外部知识库+LLM的方法可以缓解大模型幻觉,但是如何撰写Prompt才能发挥LLM的性能。下面介绍这篇论文说明上下文信息出现在Prompt什么位置使模型表现最佳,以及上下文文本

    2024年02月17日
    浏览(31)
  • How to Write and Publish a Scientific Paper-How to Write the Results

    至此,我们进入了本文的核心- -数据。论文的这一部分称为结果部分。 与流行的信念相反,你不应该通过描述你在材料和方法部分无意中遗漏的方法来开始结果部分。 结果部分通常有两个成分。首先,你应该对实验进行某种整体的描述,提供大概的图景,而不必重复先前在

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包