Renderscript in Android 3.x

26
RenderScript in Android 3.x Dominik Helleberg / Inovex GmbH http://twitter.com/_cirrus_

description

Introduction to RenderScript APIs and Tools at the Mobile Tech Conference 2011 #mtc11

Transcript of Renderscript in Android 3.x

Page 1: Renderscript in Android 3.x

RenderScript in Android 3.x

Dominik Helleberg / Inovex GmbH

http://twitter.com/_cirrus_

Page 2: Renderscript in Android 3.x

Ziele / Agenda •  Konzepte / Vor- und Nachteile von RenderScript •  Entscheidung für den Einsatz von RS im nächsten Projekt

•  Überblick RS -> APIs, Architektur, Tools •  RS Basics -> Datenstrukturen, Funktionen •  Berechnungen mit RS -> Beispiel / Performance •  OpenGL refresh •  Grafik mit RS -> Beispiel / Demo •  Grafik & Berechnungen kombinieren •  RS im Context von Canvas, NDK & co. •  Ausblick

Page 3: Renderscript in Android 3.x

RS -> The claim „RenderScript offers a high performance 3D graphics

rendering and compute API at the native level“

Pros •  Portabilität •  Performance •  Usability

Cons •  Complexity •  Debugging / Tools •  less Features

http://developer.android.com/guide/topics/renderscript/index.html

Page 4: Renderscript in Android 3.x

RS Intro / Overview •  Neue Sprache (basierend auf C99 mit Erweiterungen) •  Neue APIs (im Java-SDK und in RenderScript) •  Tools •  RS in Android 2.1

Page 5: Renderscript in Android 3.x

RS Intro / Overview •  Seid Android 3.0 öffentlich verfügbar (API LEVEL 11)

Page 6: Renderscript in Android 3.x

RS Basics: Compiler -> Offline

LLVM-RS-CC sepia.rs

sepia.bc

SciptC_sepia.java

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

Page 7: Renderscript in Android 3.x

SciptC_sepia.class

RS Basics: Compiler -> Online

libbcc sepia.bc GPU

s

CPUs

Dalvik JIT

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

Page 8: Renderscript in Android 3.x

RS Basics: APIs •  Java -> android.renderscript.*

•  RS -> *.rsh (RenderScriptHeader) $ANDROID_SDK/platforms/android-11/renderscript/include/

•  rs_cl.rsh -> tan, cos, pow

•  rs_core.rsh -> Utility Funktionen: rsDebug •  rs_graphics.rsh -> Grafik Funktionen (optional): rsgDrawMesh •  rs_math.rsh -> Basis Funktionen: rand, rsForEach •  rs_time.rsh -> rsUptimeMillis

•  rs_types.rsh -> Datentypen: rs_matrix4x4

Page 9: Renderscript in Android 3.x

RS Basics: Datastructures • Element Repräsentiert eine Speicherstelle einer

Allocation, zum Beispiel uchar4

• Type Dimension(en) von Elementen

• Allocation Repräsentiert den allokierten Speicher

Elements und Types können auf SDK und RS level definiert werden, Allocations nur auf SDK level

Page 10: Renderscript in Android 3.x

RS Basics: functions / Syntax #pragma version(1) #pragma rs java_package_name(de.inovex.mobi.rsdemos)

void init() Grafik -> Initialisierung int root(int launchID) Grafik -> wird für jede Aktualisierung

des Screens aufgerufen void root(...) Berechnungen -> Wird für jedes zu

berechnende Element aufgerufen

void rsForEach(...) Ruft root(..) für jedes zu berechnende Element auf

Page 11: Renderscript in Android 3.x

RS Calculation: Sepia Filter

Page 12: Renderscript in Android 3.x

RS Calculation: Sepia Filter

344

605

350

0

100

200

300

400

500

600

700

Sepia Filter

RenderScript Java Java Threaded m

illis

econ

ds

Page 13: Renderscript in Android 3.x

RS Calculation: Mandelbrot

Page 14: Renderscript in Android 3.x

RS Calculation: Mandelbrot

6116

11080

6912

0

2000

4000

6000

8000

10000

12000

Mandelbrot

RenderScript Java Java Threaded m

illis

econ

ds

Page 15: Renderscript in Android 3.x

RS Graphics: OpenGL Refresh

Vertex Shader

Fragment Shader Blending

Program Vertex

Program Fragment

Program Store

OpenGL

RenderScript

Page 16: Renderscript in Android 3.x

RS Graphics: Basics

Java

RenderScript

RSSurfaceView

onTouch Event()

MessageQueue

bindRoot Script()

int root(int launchID) { //draw things }

Page 17: Renderscript in Android 3.x

RS Graphics: Logo Demo

Page 18: Renderscript in Android 3.x

RS Graphics: Cover Carousel

Page 19: Renderscript in Android 3.x

RS Graphics and Calculations

root() { rsForEach(...); rsgDrawMesh(...); return 10; }

CPU1

CPU2

root(...) { doCrazyStuff(); }

root(...) { doCrazyStuff(); }

Page 20: Renderscript in Android 3.x

RS Graphics and Calculations

Page 21: Renderscript in Android 3.x

RS Summary: Android Graphic APIs

•  NDK -> C Code Portierung, low level C programming

•  SDK

•  Canvas API -> 2D Graphics

•  OpenGL wrappers -> Simple 3D Graphics

•  RenderScript -> High performance 3D

Graphics / Computations

Page 22: Renderscript in Android 3.x

RS Summary: Experience & Claims Pros •  Portabilität

•  Performance

•  Usability

Cons •  Complexity

•  Debugging / Tools

•  less Features

•  Documentation

•  Reach

Page 23: Renderscript in Android 3.x

RS Summary: Experience & Claims INFO/DEBUG(85): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** INFO/DEBUG(85): Build fingerprint: 'motorola/tervigon/wingray:3.2/HTJ85B/140714:user/release-keys' INFO/DEBUG(85): pid: 8462, tid: 8479 >>> de.inovex.mobi.rsdemos <<< INFO/DEBUG(85): signal 7 (SIGBUS), code 128 (?), fault addr 00000000 INFO/DEBUG(85): r0 00000001 r1 433a4266 r2 001aecf0 r3 433a425a INFO/DEBUG(85): r4 00000001 r5 433a4266 r6 00000000 r7 599cce08 INFO/DEBUG(85): r8 000013b0 r9 000013b0 10 599cce08 fp 00000001 INFO/DEBUG(85): ip a9d43910 sp 599ccd08 lr af9d7acc pc af9d7acc cpsr 00000010 INFO/DEBUG(85): d0 477fff800000ffff d1 3ef99342477fff00 INFO/DEBUG(85): d2 3fa5b5e89f667c0b d3 3fa55553e1053a42 INFO/DEBUG(85): d4 3fa5b5e89f667c0b d5 bf56ab7707e82c56 INFO/DEBUG(85): d6 3f80000026a7f65f d7 3f80000000000000 INFO/DEBUG(85): d8 4334000040490fdb d9 c44f0000444f0000 INFO/DEBUG(85): d10 0000000000000000 d11 0000000000000000 INFO/DEBUG(85): d12 0000000000000000 d13 0000000000000000 INFO/DEBUG(85): d14 0000000000000000 d15 0000000000000000 INFO/DEBUG(85): scr 60000013 INFO/DEBUG(85): #00 pc 00004acc /system/lib/libcutils.so (android_atomic_add) INFO/DEBUG(85): #01 pc 0001f5be /system/lib/libRS.so (_ZNK7android12renderscript10ObjectBase9incSysRefEv) INFO/DEBUG(85): #02 pc 00017d44 /system/lib/libRS.so INFO/DEBUG(85): #03 pc 0001a7ba /system/lib/libRS.so (_ZN7android12renderscript7Context16setProgramVertexEPNS0_13ProgramVertexE) INFO/DEBUG(85): #04 pc 0001a7d2 /system/lib/libRS.so (_ZN7android12renderscript28rsi_ContextBindProgramVertexEPNS0_7ContextEPv) INFO/DEBUG(85): #05 pc 00025e68 /system/lib/libRS.so INFO/DEBUG(85): libc base address: afdd3000 INFO/DEBUG(85): code around pc: INFO/DEBUG(85): af9d7aac e1853f92 e3530000 1afffffa e8bd8070 INFO/DEBUG(85): af9d7abc e92d4070 e1a04000 e1a05001 ebffffd1 INFO/DEBUG(85): af9d7acc e1950f9f e0802004 e1853f92 e3530000 INFO/DEBUG(85): af9d7adc 1afffffa e8bd8070 e1a01000 e3e00000 INFO/DEBUG(85): af9d7aec eafffff2 e1a01000 e3a00001 eaffffef INFO/DEBUG(85): stack: INFO/DEBUG(85): 599cccc8 599cccec

Page 24: Renderscript in Android 3.x

RS Summary: Ausblick

•  GPU Beschleunigung

•  Vereinfachung der RS APIs mit Android 4

•  Dokumentation & Tools mit Android 4

•  Portabilität und Emulator-Unterstützung

Page 25: Renderscript in Android 3.x

RS Summary: Infos & Links

•  http://marakana.com/forums/android/general/381.html

•  http://graphics-geek.blogspot.com/

•  http://blog.iangclifton.com/2011/08/24/renderscript-101-

part-2-renderscript-interaction/

•  http://events.linuxfoundation.org/slides/2011/lfcs/

lfcs2011_llvm_liao.pdf

•  http://code.google.com/p/renderscript-examples/

•  http://github.com/dhelleberg/RenderScriptDemos

Page 26: Renderscript in Android 3.x

RS Summary: Infos & Links http://bit.ly/mtc2011-dh

DANKE!