Panoramica
Scalari:
RenderScript supporta i seguenti tipi numerici scalari:
8 bit | 16 bit | 32 bit | 64 bit | |
Numero intero: | carattere, int8_t | breve, int16_t | int32_t | lungo, lungo lungo, int64_t |
Numero intero senza segno: | uchar, uint8_t | ushort, uint16_t | uint, uint32_t | ulong, uint64_t |
Virgola mobile: | metà tempo | numero in virgola mobile | doppio |
Vettori:
RenderScript supporta vettori con dimensioni fisse di 2, 3 e 4. I vettori vengono dichiarati utilizzando il nome di tipo comune seguito da 2, 3 o 4. Ad esempio, float4, int3, Double2, ulong4.
Per creare valori letterali vettoriali, utilizza il tipo di vettore seguito dai valori racchiusi tra parentesi graffe, ad esempio (float3){1.0f, 2.0f, 3.0f}
.
È possibile accedere alle voci di un vettore utilizzando diversi stili di denominazione.
È possibile accedere alle singole voci facendo seguire il nome della variabile da un punto e:
- Le lettere x, y, z e w
- Le lettere r, g, b e a
- La lettera s o S, seguita da un indice in base zero.
Ad esempio, con int4 myVar;
quanto segue è equivalente:
myVar.x == myVar.r == myVar.s0 == myVar.S0
myVar.y == myVar.g == myVar.s1 == myVar.S1
myVar.z == myVar.b == myVar.s2 == myVar.S2
myVar.w == myVar.a == myVar.s3 == myVar.S3
È possibile accedere contemporaneamente a più voci di un vettore utilizzando un identificatore che è la concatenazione di più lettere o indici. Il vettore risultante ha una dimensione uguale al numero di voci denominate.
Con l'esempio precedente, è possibile accedere alle due voci centrali utilizzando
myVar.yz
, myVar.gb
, myVar.s12
e myVar.S12
.
Le voci non devono essere contigue o in ordine crescente. Le voci possono anche essere ripetute, purché non si stia tentando di assegnarle. Inoltre, non puoi combinare gli stili di denominazione.
Ecco alcuni esempi di ciò che è possibile o non è possibile fare:
float4 v4;
float3 v3;
float2 v2;
v2 = v4.xx; // Valid
v3 = v4.zxw; // Valid
v3 = v4.bba; // Valid
v3 = v4.s032; // Valid
v3.s120 = v4.S233; // Valid
v4.yz = v3.rg; // Valid
v4.yzx = v3.rg; // Invalid: mismatched sizes
v4.yzz = v3; // Invalid: z appears twice in an assignment
v3 = v3.xas0; // Invalid: can't mix xyzw with rgba nor s0...
v3 = v4.s034; // Invalid: the digit can only be 0, 1, 2, or 3
Matrici e quaternioni:
RenderScript supporta matrici quadrate di dimensioni fisse di valori in virgola mobile di 2x2, 3x3 e 4x4. I tipi sono denominati rs_matrix2x2, rs_matrix3x3 e rs_matrix4x4. Vedi Funzioni della matrice per l'elenco delle operazioni.
I quaternioni sono supportati anche tramite rs_quaternion. Consulta Funzioni trimestrali per l'elenco delle operazioni.
Riepilogo
Tipi | |
---|---|
car2 | Due numeri interi con segno a 8 bit |
car3 | Tre numeri interi con segno a 8 bit |
car4 | Quattro numeri interi firmati a 8 bit |
doppio2 | Due valori in virgola mobile a 64 bit |
doppio3 | Tre valori in virgola mobile a 64 bit |
doppio4 | Quattro floating a 64 bit |
float2 | Due valori in virgola mobile a 32 bit |
float3 | Tre valori in virgola mobile a 32 bit |
float4 | Quattro valori in virgola mobile a 32 bit |
metà | Valore in virgola mobile a 16 bit |
metà 2 | Due valori in virgola mobile a 16 bit |
metà3 | Tre valori a virgola mobile a 16 bit |
metà 4 | Quattro valori in virgola mobile a 16 bit |
int16_t | Numero intero con firma a 16 bit |
int2 | Due numeri interi con segno a 32 bit |
int3 | Tre numeri interi firmati a 32 bit |
int32_t | Numero intero con firma a 32 bit |
int4 | Quattro numeri interi firmati a 32 bit |
int64_t | Numero intero firmato a 64 bit |
int8_t | Numero intero con firma a 8 bit |
lungo2 | Due numeri interi firmati a 64 bit |
lungo3 | Tre numeri interi firmati a 64 bit |
lungo4 | Quattro numeri interi firmati a 64 bit |
matrix2x2 | Matrice 2x2 di galleggianti a 32 bit |
rs_matrix3x3 | Matrice 3x3 di galleggi a 32 bit |
rs_matrix4x4 | Matrice 4x4 di galleggianti a 32 bit |
rs_quaternion | Quaternione |
breve2 | Due numeri interi firmati a 16 bit |
breve3 | Tre numeri interi firmati a 16 bit |
breve4 | Quattro numeri interi firmati a 16 bit |
taglia_t | Tipo di taglia senza firma |
taglia_t | Tipo di taglia firmato |
Uchar | Numero intero senza segno a 8 bit |
Uchar2 | Due numeri interi senza segno a 8 bit |
uchar3 | Tre numeri interi senza segno a 8 bit |
Uchar4 | Quattro numeri interi senza segno a 8 bit |
Uint | Numero intero senza segno a 32 bit |
Uint16_t | Numero intero senza segno a 16 bit |
Uint2 | Due numeri interi senza segno a 32 bit |
Uint3 | Tre numeri interi senza segno a 32 bit |
Uint32_t | Numero intero senza segno a 32 bit |
Uint4 | Quattro numeri interi senza segno a 32 bit |
Uint64_t | Numero intero senza segno a 64 bit |
Uint8_t | Numero intero senza segno a 8 bit |
Ulong | Numero intero senza segno a 64 bit |
Ulong2 | Due numeri interi senza segno a 64 bit |
Ulong3 | Tre numeri interi senza segno a 64 bit |
Ulong4 | Quattro numeri interi senza segno a 64 bit |
pantaloni | Numero intero senza segno a 16 bit |
Ushort2 | Due numeri interi senza segno a 16 bit |
Ushort3 | Tre numeri interi senza segno a 16 bit |
Ushort4 | Quattro numeri interi senza segno a 16 bit |
Tipi
char2 : due numeri interi con segno a 8 bit
Un typedef di: char __attribute__((ext_vector_type(2)))
Un vettore di due caratteri. Questi due caratteri sono contenuti in un unico campo a 16 bit con allineamento a 16 bit.
char3 : tre numeri interi con segno a 8 bit
Un typedef di: char __attribute__((ext_vector_type(3)))
Un vettore di tre caratteri. Questi tre caratteri sono raggruppati in un unico campo a 32 bit con allineamento a 32 bit.
char4 : quattro numeri interi con segno a 8 bit
Un typedef di: char __attribute__((ext_vector_type(4)))
Un vettore di quattro caratteri. Questi quattro caratteri sono raggruppati in un unico campo a 32 bit con allineamento a 32 bit.
Double2 : due valori in virgola mobile a 64 bit
Un typedef di: double __attribute__((ext_vector_type(2)))
Un vettore di due doppi. Questi due campi doppi in un unico campo a 128 bit con allineamento a 128 bit.
Double3 : tre valori in virgola mobile a 64 bit
Un typedef di: double __attribute__((ext_vector_type(3)))
Un vettore di tre doppi. Questi tre campi doppi in un unico campo a 256 bit con un allineamento a 256 bit.
Double4 : quattro valori in virgola mobile a 64 bit
Un typedef di: double __attribute__((ext_vector_type(4)))
Un vettore di quattro doppi. Questi quattro campi doppi in un unico campo a 256 bit con un allineamento a 256 bit.
float2 : due valori in virgola mobile a 32 bit
Un typedef di: float __attribute__((ext_vector_type(2)))
Un vettore di due galleggianti. Questi due float sono pacchettizzati in un unico campo a 64 bit con un allineamento a 64 bit.
Un vettore di due galleggianti. Questi due float sono pacchettizzati in un unico campo a 64 bit con un allineamento a 64 bit.
float3 : tre valori in virgola mobile a 32 bit
Un typedef: __attribute__((ext_vector_type(3))) float __attribute__(ext_vector_type(3)))
Un vettore di tre galleggianti. Questi tre volumi in virgola mobile sono compressi in un unico campo a 128 bit con allineamento a 128 bit.
float4 : quattro valori in virgola mobile a 32 bit
Un typedef: float __attribute__((ext_vector_type(4)))
Un vettore di tipo quattro galleggianti. Questi quattro float sono pacchettizzati in un unico campo a 128 bit con allineamento a 128 bit.
half : valore in virgola mobile a 16 bit
Un typedef di: __fp16 Aggiunto nel livello API 23
Un valore in virgola mobile a 16 bit.
half2 : due valori in virgola mobile a 16 bit
Un typedef di: half __attribute__((ext_vector_type(2))) Aggiunto nel livello API 23
Versione vettoriale del tipo semi-float. Fornisce due metà campi compressi in un unico campo a 32 bit con allineamento a 32 bit.
half3 : tre valori in virgola mobile a 16 bit
Un typedef di: half __attribute__((ext_vector_type(3))) Aggiunto nel livello API 23
Versione vettoriale del tipo semi-float. Fornisce tre metà campi compressi in un unico campo a 64 bit con allineamento a 64 bit.
half4 : quattro valori in virgola mobile a 16 bit
Un typedef di: half __attribute__((ext_vector_type(4))) Aggiunto al livello API 23
Versione vettoriale del tipo semi-float. Fornisce quattro semi campi raggruppati in un unico campo a 64 bit con allineamento a 64 bit.
int16_t : numero intero con segno a 16 bit
Un typedef di: breve
Un tipo intero con segno a 16 bit.
int2 : due numeri interi con segno a 32 bit
Un typedef di: int __attribute__((ext_vector_type(2)))
Un vettore di due int. Questi due int sono compressi in un unico campo a 64 bit con un allineamento a 64 bit.
int3 : tre numeri interi con segno a 32 bit
Un typedef: int __attribute__((ext_vector_type(3)))
Un vettore di tre int. Questi tre int sono compressi in un unico campo a 128 bit con un allineamento a 128 bit.
int32_t : numero intero con segno a 32 bit
Un typedef di: int
Un tipo intero con segno a 32 bit.
int4 : quattro numeri interi con segno a 32 bit
Un typedef di: int __attribute__((ext_vector_type(4)))
Un vettore di quattro int. Questi due componenti a 4 sono contenuti in un unico campo a 128 bit con allineamento a 128 bit.
int64_t : numero intero con segno a 64 bit
Un typedef di: long long Rimosso dal livello API 21 e successivi
Un valore typedef: long Aggiunto nel livello API 21
Un tipo intero con segno a 64 bit.
int8_t : numero intero con segno a 8 bit
Un typedef di: char
Tipo di numero intero con firma a 8 bit.
long2 : due numeri interi con segno a 64 bit
Un typedef di: long __attribute__((ext_vector_type(2)))
Un vettore di due caratteri lunghi. Questi due file long sono compressi in un unico campo a 128 bit con un allineamento a 128 bit.
long3 : tre numeri interi con segno a 64 bit
Un typedef di: long __attribute__((ext_vector_type(3)))
Un vettore di tre long. Questi tre file long sono compressi in un unico campo a 256 bit con un allineamento a 256 bit.
long4 : quattro numeri interi con segno a 64 bit
Un typedef di: long __attribute__((ext_vector_type(4)))
Un vettore di quattro long. Questi quattro long sono compressi in un unico campo a 256 bit con un allineamento a 256 bit.
rs_matrix2x2 : matrice 2x2 di valori in virgola mobile a 32 bit
Una struttura con i seguenti campi:
galleggiante m[4] |
---|
Una matrice quadrata 2x2 di galleggianti. Le voci sono archiviate nell'array nella posizione [riga*2 + col].
Vedi Funzioni della matrice.
rs_matrix3x3 : matrice 3x3 di valori in virgola mobile a 32 bit
Una struttura con i seguenti campi:
galleggiante m[9] |
---|
Una matrice quadrata 3x3 di galleggianti. Le voci sono archiviate nell'array nella posizione [riga*3 + col].
Vedi Funzioni della matrice.
rs_matrix4x4 : matrice 4x4 di valori in virgola mobile a 32 bit
Una struttura con i seguenti campi:
galleggiante m[16] |
---|
Una matrice quadrata 4 x 4 di galleggianti. Le voci sono archiviate nell'array nella posizione [riga*4 + col].
Vedi Funzioni della matrice.
rs_quaternion : quaternion
Un typedef: float4
Una matrice quadrata 4x4 di galleggianti che rappresenta un quaternione.
Vedi Funzioni del quaternione.
short2 : due numeri interi con firma a 16 bit
Un valore typedef: __attribute__((ext_vector_type(2))) breve
Un vettore di due Short. Questi due Short sono contenuti in un unico campo a 32 bit con un allineamento a 32 bit.
short3 : tre numeri interi con firma a 16 bit
Un typedef di: __attribute__((ext_vector_type(3))) breve
Un vettore di tre Short. Questi tre campi brevi sono contenuti in un unico campo a 64 bit con un allineamento a 64 bit.
short4 : quattro numeri interi firmati a 16 bit
Un typedef di: __attribute__((ext_vector_type(4))) breve
Un vettore di quattro Short. Questi quattro campi brevi sono contenuti in un unico campo a 64 bit con un allineamento a 64 bit.
size_t : tipo di taglia senza firma
Un typedef di: uint64_t Durante la compilazione a 64 bit.
Un typedef di: uint32_t Durante la compilazione a 32 bit.
Tipo di taglia senza firma. Il numero di bit dipende dai flag di compilazione.
ssize_t : tipo di taglia firmato
Un typedef di: int64_t Quando si compila per 64 bit.
Un typedef di: int32_t Quando si compila a 32 bit.
Tipo di taglia firmato. Il numero di bit dipende dai flag di compilazione.
uchar : numero intero senza segno a 8 bit
Un typedef di: uint8_t
Tipo di numero intero senza segno a 8 bit.
uchar2 : due numeri interi senza segno a 8 bit
Un typedef di: uchar __attribute__((ext_vector_type(2)))
Un vettore di due ucari. Questi due campi uchar inseriti in un unico campo a 16 bit con allineamento a 16 bit.
uchar3 : tre numeri interi senza segno a 8 bit
Un typedef di: uchar __attribute__((ext_vector_type(3)))
Un vettore di tre ucari. Questi tre campi uchar raggruppati in un unico campo a 32 bit con allineamento a 32 bit.
uchar4 : quattro numeri interi senza segno a 8 bit
Un typedef di: uchar __attribute__((ext_vector_type(4)))
Un vettore di quattro ucari. Questi quattro campi uchar in un unico campo a 32 bit con allineamento a 32 bit.
uint : numero intero senza segno a 32 bit
Un typedef di: uint32_t
Un tipo intero senza segno a 32 bit.
uint16_t : numero intero senza segno a 16 bit
Un typedef di: unfirmato Short
Un tipo intero senza segno a 16 bit.
uint2 : due numeri interi senza segno a 32 bit
Un typedef di: uint __attribute__((ext_vector_type(2)))
Un vettore di due linee. Queste due interfacce sono inserite in un unico campo a 64 bit con un allineamento a 64 bit.
uint3 : tre numeri interi senza segno a 32 bit
Un typedef di: uint __attribute__((ext_vector_type(3)))
Un vettore di tre linee. Queste tre interfacce sono inserite in un unico campo a 128 bit con allineamento a 128 bit.
uint32_t : numero intero senza segno a 32 bit
Un typedef di: unSign int
Un tipo intero senza segno a 32 bit.
uint4 : quattro numeri interi senza segno a 32 bit
Un typedef: uint __attribute__((ext_vector_type(4)))
Un vettore di quattro linee. Queste quattro istruzioni sono inserite in un unico campo a 128 bit con allineamento a 128 bit.
uint64_t : numero intero senza segno a 64 bit
Un typedef di: unfirmato long long Rimosso dal livello API 21 e successivi
Un typedef di: unfirmato long Aggiunto nel livello API 21
Un tipo intero senza segno a 64 bit.
uint8_t : numero intero senza segno a 8 bit
Un typedef di: unSign char
Tipo di numero intero senza segno a 8 bit.
ulong : numero intero senza segno a 64 bit
Un typedef di: uint64_t
Un tipo intero senza segno a 64 bit.
ulong2 : due numeri interi senza segno a 64 bit
Un typedef di: ulong __attribute__((ext_vector_type(2)))
Un vettore di due ulong. Questi due ulong sono compressi in un unico campo a 128 bit con allineamento a 128 bit.
ulong3 : tre numeri interi senza segno a 64 bit
Un typedef di: ulong __attribute__((ext_vector_type(3)))
Un vettore di tre ulong. Questi tre campi Ulong sono compressi in un unico campo a 256 bit con allineamento a 256 bit.
ulong4 : quattro numeri interi senza segno a 64 bit
Un typedef di: ulong __attribute__((ext_vector_type(4)))
Un vettore di quattro ulong. Questi quattro campi Ulong racchiusi in un unico campo a 256 bit con allineamento a 256 bit.
ushort : numero intero senza segno a 16 bit
Un typedef di: uint16_t
Un tipo intero senza segno a 16 bit.
ushort2 : due numeri interi senza segno a 16 bit
Un typedef di: ushort __attribute__((ext_vector_type(2)))
Un vettore di due ushort. Questi due campi ushort in un unico campo a 32 bit con allineamento a 32 bit.
ushort3 : tre numeri interi senza segno a 16 bit
Un typedef di: ushort __attribute__((ext_vector_type(3)))
Un vettore di tre ushort. Questi tre campi ushort in un unico campo a 64 bit con allineamento a 64 bit.
ushort4 : quattro numeri interi senza segno a 16 bit
Un typedef di: ushort __attribute__((ext_vector_type(4)))
Un vettore di quattro ushort. Questi quattro campi ushort in un unico campo a 64 bit con un allineamento a 64 bit.