返回列表 发帖

关于GLSL Compiler Front-end Source Code

3dlabs提供了一个GLSL Compiler Front-end 的源代码。可以好像没有提供document????

那位大虾能提供一个类似的说明文档?????

他的中间表达到底是什么东西?使整个opengl api都能够被映射么?

文档你可以自己用Doxygen生成,然后自个慢慢看

第二个问题不知道,期盼高人

TOP

记不清了:(
中间表示是棵语法树,包含了整个 shader program,用的是 c++ stl 的容器类来实现,反正我是很讨厌
这个不可能映射所有的 opengl api,opengl api 不仅仅是 shader 那些内容。中间表示表示的就是你写的
那个 glsl shader,不多也不少。

TOP

不是整个OPENGL API Function的mapping么?

那3DLabs放这种东西出来干吗?

TOP

那位仁兄能够提供一个Full Feature,而不仅仅是Shader ISA的compiler,至少front-end就可以。以便进一步研究~~

TOP

不清楚老兄需要的是什么,是一个全功能的 OpenGL driver?还是一个全功能的 OpenGL GLSL compiler 前端?
3D Labs 提供的是后者,作为一个 GLSL compiler 的前端(词法语法语义分析),它是完整的。。。

全功能的完整的 OpenGL driver 就难找了,这个是和硬件密切相关的,只有 GPU vendor 自己有。
有一些 reference implementation 也可以参考,比如 MESA,但是估计不是你需要的。。。

TOP

目前比较Care关于OpenGL Driver……

TOP

glslang就是3d labs GLSL compiler的前端,它对文本形式的glsl shader code完成语法校验并生成中间形式的语法树。硬件提供商只要实现自己的compiler后端,把这个语法树转化为对应自己硬件的hw shader code,当然也需要从语法树里面抽取必要的信息以辅助状态设置。

3dlabs退出之后,就没有继续更新glslang,也没有再提供针对GLSL ES的compiler前端。
但由于GLSL ES基本上就是GLSL的简化版,只加了很少的东西,实际上可以通过去掉glslang里面不需要的部分再稍作修改来实现GLSL ES前端的。

octane3d可能是觉得这种把前后端割裂由两拨人实现的方式不太有利于优化,但我个人觉得他们的code还是写得很干净的,不失为实现GLSL ES Compiler快速原型的一个好选择。

TOP

对以上几位老大文字中的概念和术语十分faint...


什么是front-end啊....我的天哪...

TOP

front-end 就是编译器的前端了,做词法分析,语法分析和语义分析,生成源程序的中间表示,然后送到后端去进行优化,寄存器分配,机器代码生成等工作。。。

TOP

回复 #1 ic.expert 的帖子

GLSL Compiler 的中间表达是一个语法树AST Tree,其中的基本节点包括Bianry,Unary, Aggregate,Symbol,Constant,Branch,Loop,Selection等等,主要描述整个语言的语法结构,其他结构还包括symbol Table和context。。说明文档ATI发布的源码中有。

使用AST Tree的目的是把C like的语言map到MS Assembler token上,通过遍历AST Tree翻译可以在逻辑上保证不会有问题。
1

评分人数

  • ic.expert

TOP

我也想做相关的东西呢,lz可否分享点儿信息?我们是想提高点儿性能,在中间做点儿优化,还交给gpu去处理。
我是流氓我怕谁?

TOP

好像下载不到了啊,

TOP

如果想写在GPU上运行的Shader,现在最好还是写成类似于CUDA或者BSGP这样的结构,生成Parallel,然后在你设计的目标机器上运行。
用GLSL Compiler的Front End,完全可以让GL在HLSL上运行起来。

TOP

The source code for Mesa's shading language compiler is in the src/mesa/shader/slang/ directory.

The compiler follows a fairly standard design and basically works as follows:

    * The input string is tokenized (see grammar.c) and parsed (see slang_compiler_*.c) to produce an Abstract Syntax Tree (AST). The nodes in this tree are slang_operation structures (see slang_compile_operation.h). The nodes are decorated with symbol table, scoping and datatype information.
    * The AST is converted into an Intermediate representation (IR) tree (see the slang_codegen.c file). The IR nodes represent basic GPU instructions, like add, dot product, move, etc. The IR tree is mostly a binary tree, but a few nodes have three or four children. In principle, the IR tree could be executed by doing an in-order traversal.
    * The IR tree is traversed in-order to emit code (see slang_emit.c). This is also when registers are allocated to store variables and temps.
    * In the future, a pattern-matching code generator-generator may be used for code generation. Programs such as L-BURG (Bottom-Up Rewrite Generator) and Twig look for patterns in IR trees, compute weights for subtrees and use the weights to select the best instructions to represent the sub-tree.
    * The emitted GPU instructions (see prog_instruction.h) are stored in a gl_program object (see mtypes.h).
    * When a fragment shader and vertex shader are linked (see slang_link.c) the varying vars are matched up, uniforms are merged, and vertex attributes are resolved (rewriting instructions as needed).

The final vertex and fragment programs may be interpreted in software (see prog_execute.c) or translated into a specific hardware architecture (see drivers/dri/i915/i915_fragprog.c for example).
面朝大海,春暖花开

TOP

那位大侠研究过mesa的compiler?大概结构能否解析一下,最近读这部分代码还真是头大。。。
3d labs那个前端谁有,现在网上都搜不出来了,望好心人有心人放出。。。
人生不完整,RP有问题

TOP

GLSL Compiler 的中间表达是一个语法树AST Tree,其中的基本节点包括Bianry,Unary, Aggregate,Symbol,Cons ...
wangdaniu 发表于 2007-8-9 10:53


    这个“ATI发布的源码中有”在什么地方?
人生不完整,RP有问题

TOP

附件: 您需要登录才可以下载或查看附件。没有帐号?注册
面朝大海,春暖花开

TOP

回复 6# octane3d
为什么总觉得mesa只是一个“用于学习研究”的reference design呢?看看intel-gfx,他们linux上(官方)support的graphics driver只有一支,那就是基于mesa的且开源的。
80 字节以内
不支持自定义 Discuz! 代码

TOP

不止intel, Mesa得到了大多数厂商的支持,ATI, Intel, Matrox, 3dfx, savage, SiS, Trident 等都提供了dri driver。同时Mesa也应用到了移动应用中,比如intel和nokia发布的MeeGo, 将部署在Nokia N系列。
面朝大海,春暖花开

TOP

不过目前为止只有intel将其作为唯一的官方支持。其他如amd,官方支持是fglrx;nvidia更狠,为了它的linux-driver,改动了很多linux的x11,dri,drm的infrastrature。这两支mesa based的driver,都还是开源社区在维护(主要有来自redhat以及vmware公司的人员),并且应该效率上和官方driver还有一定差距。
80 字节以内
不支持自定义 Discuz! 代码

TOP

返回列表