首页 > 代码库 > RenderScript on LLVM笔记

RenderScript on LLVM笔记

Android 为何引入 Render Script:

   3D 可移植  ( 直接用 opengl 也可以移植呀?)

   性能

   易用性 ( 让 opengl 难入门的人,用 Render Script ?)

Render Script 使用类似 C99 语法  + 一些扩展

目前使用 Render Script的  APP ( BOOKS, YouTube 等) 

Render Script 包含的构件

llvm-rs-cc: 

   1) 把 RS 编译为  bitcode 

   2) 同时生成 调用 RS的 Java Layer  层代码


========= 背景知识 =========

对于一个 helloworld 程序

#include <stdio.h>

int main() {
  printf("hello world\n");
  return 0;
}


可以用 Clang 直接编译,并运行

% clang hello.c -o hello

也可以生成  bitcode

% clang -O3 -emit-llvm hello.c -c -o hello.bc
而后用 lli 来解析运行

% lli hello.bc
可以用bitcode反编译为 llvm 的中间汇编代码

% llvm-dis < hello.bc | less

可以把 bitcode 用 llc 编译为 native的汇编

% llc hello.bc -o hello.s
再用 gcc 编译为 可执行文件

% gcc hello.s -o hello.native 
==================

这里针对的是 C语言,而 RS 是一种类C语言,它通过改写 Clang扩展其语法


libbcc

   libcc  llvm-rs-cc 的生成的全部代码都再次使用 JIT生成 machine code (CPU/GPU/DSP) 

   RS编译得到的 bc 通过 libcc 生成 machine code

   而调用 RC 的 Java代码也通过 Dalvik的 JIT生成 Native code



libRS ( runtime support)

    1) 在 Dalvik Layer  管理  Script

     2)  加入支持库 math funcs


总结:

   Render Script 提供了一种 3D语言,并且编译平台无关中间代码,节约了APP Launch的时间

   Render Script 有学习的代价,但学会应该比用 opengl简单

   Render Script 可能还不够成熟

   单就GPU, 直接使用 opengl ( 包括 Shader Language) 应该还是足够快的

   Opengl 比较复杂,最好使用已经包装 opengl的引擎


参考:

http://llvm.org/docs/GettingStarted.html

https://events.linuxfoundation.org/slides/2011/lfcs/lfcs2011_llvm_liao.pdf

http://llvm.org/docs/BitCodeFormat.html