AT-EGPU中的VERTEX SHADER的指令

AT-EGPU中的VERTEX SHADER的指令

目前设计的VERTEX SHADER,因为只支持gles1.1,所以数据结构都选用顶点格式。现在设计指令长度64bit。 分三类SIMD指令 1) mov,add,sub,max,min,sge,slt,seq,lsl,asr.zero,xor,or,and,nop,end 2) mul,mad,dp2,dp3,dp4,trfm 3) rcp,rsq,pow2,log2 指令应该还会添加别的,以快速实现clipping操作。 指令结构如下: opcode|adr mode|write mask| swizzle|neg|dst |src0 bank|src1 bank|src2 bank|DstSat|SRC0 ADR|SRC1 ADR|SRC2 ADR|reserver| 5bit |2bits |4bit |16bit |3bit|6bit|2bit |2bit |2bit |1bit |4 or 8bit |4 or 8bit |4 or 8bit |5bit | 目前还差rcp,rsq,pow2,log2指令的实现。准备采用查表实现。现在研究<digital arithmatic>这本书,还有一些paper,看选用哪种结构更合理。

News, opengl es

三星的3d引擎架构

vincent研究完成,现在开始测试他的引擎,添加各种case。下面是三星的一款3d引擎架构的features。
这是他的feature 42.1.1 FEATURES • 4M triangles/s @133MHz (Transform Only) • 75.8M pixels/s fill-rates @133MHz (shaded pixels) • Programmable Shader Model 3.0 support • 128-bit (32-bit x 4) Floating-point Vertex Shader – Geometry-texture cache support • 128-bit (32-bit x 4) Floating-point two Fragment Shaders • Max. 4K x 4K frame-buffer (16/32-bpp) • 32-bit depth buffer (8-bit [...]

News, opengl es

JIT,just-in-time compilation

JIT(just-in-time compilation,即时编译)指计算机领域里,即时编译也被称为动态翻译(dynamic translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。
在编译为字节码的系统如 Limb 编程语言,Smalltalk,UCSD P-System, Perl,GNU CLISP,和 Java 的早期版本中, 源代码被翻译为一种中间表示即字节码。 字节码不是任何特定计算机的机器码, 它可以在多种计算机体系中移植。 字节码被解释着运行在虚拟机里。
动态编译环境是一种在执行时使用编译器的编译环境。 例如, 多数 Common Lisp 系统有一个编译函数,他可以编译在运行时创建的函数。
在即时编译环境下, 字节码的编译是第一步, 它将源代码递归到可移植和可优化的中间表示。字节码被部署到目标系统。 当执行代码时,运行时环境的编译器将字节码翻译为本地机器码。 基于每个文件或每个函数:函数仅仅在他们要被执行时才会被编译。
目标是要组合利用本地和字节码编译的多种优势:多数重量级的任务如源代码解析和基本性能的优化在编译时处理,将字节码编译为机器码比起从源代码编译为机器码要快得多。部署字节码是可移植的,而机器码只限于特定的系统结构。从字节码到机器码编译器的实现更容易,因为大部分工作已经在实现字节码编译器时完成。
from:http://zh.wikipedia.org/wiki/JIT
在Java编程语言和环境中,just-in-time(JIT)编译器是一个把Java的字节码(包括需要被解释的指令的程序)转换成可以直接发送给处理器的指令的程序。当你写好一个Java程序后,源语言的语句将由Java编译器编译成字节码,而不是编译成与某个特定的处理器硬件平台对应的指令代码(比如,Intel的Pentium微处理器或IBM的System/390处理器)。字节码是可以发送给任何平台并且能在那个平台上运行的独立于平台的代码。  
过去,大多数用任何语言写的程序在每个电脑平台上都必须重编译,甚至有时需要重写。Java最大的优点之一就是你只需要写和编译一次程序。在任何平台上,Java都会将编译好的字节码解释成能被特定的处理器所理解的指令。尽管如此,Java虚拟机一次只能处理一条字节码指令。在特定的系统平台上使用 Java Just-in-time编译器(实际上是第二个编译器)能把字节码编译成特定系统的代码(虽然这个程序最初已经在这个平台上被编译过)。一旦代码被 JIT编译器(重)编译后,它在电脑上通常就会运行地更快。  
just-in-time编译器随虚拟机一起供给的,并可选使用。它把字节码编译成可立即执行的指定平台的可执行代码。Sun微系统建议,选择JIT编译器选项通常会使程序运行地更快,尤其是当某个可执行的方法被重复使用时。
from : http://www.4oa.com/whatis/sort03158/238837.html
在Java和MS.net Framework中,Just-In-Time编译器所扮演的角色是一个中介者,负责代码翻译和安全检查的任务。 在Java或C#等高级语言中,程序员编写的源代码首先被编译种某种格式的中间语言IL(Intermediate Language),IL是一种类似汇编语言,与汇编不同的是,IL运行的是在一个虚拟的机器环境中,或叫做虚拟机,汇编语言运行在一个特定的机器平台中。虚拟机的好处为中间语言提供了一个与平台无关的环境,比如java虚拟机,和CLR(Common Language Runtime),它能够根据所在的平台架构将中间语言翻译中这个平台上的机器语言,从而完成程序的执行过程。担任翻译任务的就是虚拟机中配备的 JIT(Just In Time)编译器。与传统编译器不同的是,JIT编译器是边执行边解释,只有需要执行的代码才被翻译成机器语言,那些不会执行到代码被忽略掉的。 JIT编译器担任的第二项任务是检查代码的安全性。它必须保证编译出来的机器代码是安全,即程序不会非法访问不属于本身的内存空间或者没有权限访问的空间,这样可以防止恶意的程序修改敏感数据区域。 此外,JIT编译器提供了对代码优化的可选功能。 下图是Java应用程序的一个程序过程,JIT编译器是JVM的一个组成部分。 参考资料: [1] Microsoft MSDN, Compiling MSIL to Native code. [2] Simon Robinson, etc. Professional C# [...]

News, opengl es

vincent代码阅读

基本看了一遍vincent的代码,发现他是针对arm专门做优化的opengl-es的实现。其中使用了runtime code generation 编译方法生成优化的ARM CODE,做提速。看来我得找找以前的版本,看能否跳过这块。

News, opengl es

关于AT EGPU

本项目的目标,是实现基于ogles1.x版本的嵌入式 gpu,cpu选择leon2处理器,最终构成一个可运行的嵌入式图形处理器。这个嵌入式GPU实现的过程,就是一个学习固定流水线结构GPU的过程,希望整个实现的流程能对嵌入式gpu感兴趣的各位能有帮助。当然欢迎大家参与这个项目,我们大家一起搞好这个嵌入式GPU。 嵌入式GPU实现流程: 1. 实现一个能支持ogles1.x API版本的simulator 1.1 分析mesa3d,理解ogl的具体实现流程 1.2 分析ogles1.x spec, 构建ategpu simulator,构建ogles 1.x API与simulator的接口 1.3 代码编写 1.4 性能分析、测试 2. RTL CODE 编写、测试 3. LEON2处理器上ogles 1.xAPI移植测试 4. FPGA测试 目前能想到的就这么多,现在项目才刚进入1.1阶段。因为本人对gpu的研究也是新人,所以最基础的流程还是要过一下。对了,如果流程有什么不合适,或者有什么建议,希望各位大牛们及时给于指导,好让我少走一些弯路。

Embedded GPU, News

Curved Surfaces Ahead

Curved Surfaces Ahead
Rather than use numerous triangles to express a curved surface, 3D artists and programmers have another tool at their disposal: higher-order surfaces. These are curved primitives that have more complex mathematical descriptions, but in some cases, this added complexity is still cheaper than describing an object with a multitude of triangles. These primitives [...]

News, Tutorial

You Down With LOD?

You Down With LOD?
Another method for avoiding excessive work is what’s called object Level of Detail, referred to as LOD. This technique is lossy, though given how it’s typically used, the loss of model detail is often imperceptible. Object models are built using several discrete LOD levels. A good example is a jet fighter with [...]

Embedded GPU, News, OpenGL, Tutorial

3D Pipeline Data Flow

3D Pipeline Data Flow
In some sense, 3D chips have become physical incarnations of the pipeline, where data flows “downstream” from stage to stage. It is useful to note that most operations in the application/scene stage and the early geometry stage of the pipeline are done per vertex, whereas culling and clipping is done per triangle, [...]

Embedded GPU, News, OpenGL, Tutorial

Deeper Into Space

Deeper Into Space
Clip Space: Similar to View Space, but the frustum is now “squished” into a unit cube, with the x and y coordinates normalized to a range between -1 and 1, and z is between 0 and 1, which simplifies clipping calculations. The “perspective divide” performs the normalization feat, by dividing all x, y, [...]

Embedded GPU, News, OpenGL, Tutorial

In the Pipe, Five By Five

Because of the sequential nature of 3D graphics rendering, and because there are so many calculations to be done and volumes of data to be handled, the entire process is broken down into component steps, sometimes called stages. These stages are serialized into the aforementioned 3D graphics pipeline.The huge amount of work involved in creating [...]

Embedded GPU, News, OpenGL, Tutorial