Tipi numerici RenderScript

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.