• 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
    ");
      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

  • 相关阅读:
    QML的默认属性default property
    QtCreator下QML翻译
    QML开发常见错误(原)
    qt下的跨目录多工程编译(转)
    git使用笔记
    osgQt支持触摸屏
    Qt资源整理ING
    Visual assint x(转)
    C#开发重用方法
    UDP问题
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6934123.html
Copyright © 2020-2023  润新知