Tipos numéricos do RenderScript

Visão geral

Escalares:

O RenderScript é compatível com os seguintes tipos numéricos escalares:

8 bits 16 bits 32 bits 64 bits
Número inteiro: caractere, int8_t curto, int16_t int32_t (link em inglês) long, long, int64_t
Número inteiro sem assinatura: uchar, uint8_t ushort, uint16_t uint, uint32_t ulong, uint64_t
Ponto flutuante: tempo float double

Vetores:

O RenderScript é compatível com vetores de tamanho fixo de 2, 3 e 4. Os vetores são declarados usando o nome de tipo comum seguido por 2, 3 ou 4. Por exemplo, float4, int3, double2, ulong4.

Para criar literais vetoriais, use o tipo de vetor seguido pelos valores entre chaves, por exemplo, (float3){1.0f, 2.0f, 3.0f}.

As entradas de um vetor podem ser acessadas usando estilos de nomenclatura diferentes.

Entradas únicas podem ser acessadas seguindo o nome da variável com um ponto e:

  • As letras x, y, z e w
  • As letras r, g, b e a
  • A letra s ou S, seguida por um índice baseado em zero.

Por exemplo, com int4 myVar;, os seguintes são equivalentes:
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

Várias entradas de um vetor podem ser acessadas de uma só vez usando um identificador que é a concatenação de várias letras ou índices. O vetor resultante tem um tamanho igual ao número de entradas nomeadas.

No exemplo acima, as duas entradas do meio podem ser acessadas usando myVar.yz, myVar.gb, myVar.s12 e myVar.S12.

As entradas não precisam ser contíguas ou em ordem crescente. As entradas podem até ser repetidas, desde que não estejamos tentando atribuir a elas. Também não é possível misturar estilos de nomenclatura.

Confira alguns exemplos do que pode ou não ser feito:
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

Matrizes e quatérnios:

O RenderScript é compatível com matrizes quadradas de tamanho fixo de pontos flutuantes de 2x2, 3x3 e 4x4. Os tipos são chamados de rs_matrix2x2, rs_matrix3x3 e rs_matrix4x4. Consulte Funções de matriz para ver a lista de operações.

Os quaternions também são compatíveis com rs_quaternion. Consulte Funções do Quaterion para a lista de operações.

Resumo

Tipos
char2 Dois números inteiros com sinal de 8 bits
char3. Três números inteiros com sinal de 8 bits
char4 (link em inglês) Quatro números inteiros com sinal de 8 bits
double2. Dois flutuantes de 64 bits
double3. Três flutuações de 64 bits
double4. Quatro flutuações de 64 bits
float2 (link em inglês) Dois flutuantes de 32 bits
float3 (link em inglês) Três flutuantes de 32 bits
float4 (link em inglês) Quatro flutuações de 32 bits
metade Valor de ponto flutuante de 16 bits
metade2 Dois flutuantes de 16 bits
half3 Três flutuações de 16 bits
half4 Quatro flutuações de 16 bits
int16_t (link em inglês) Número inteiro assinado de 16 bits
int2 (link em inglês) Dois números inteiros com sinal de 32 bits
int3 (link em inglês) Três números inteiros com sinal de 32 bits
int32_t (link em inglês) Número inteiro assinado de 32 bits
int4 (link em inglês) Quatro números inteiros assinados de 32 bits
int64_t (link em inglês) Número inteiro assinado de 64 bits
int8_t (link em inglês) Número inteiro assinado de 8 bits
long2 (link em inglês) Dois números inteiros com sinal de 64 bits
long3 (link em inglês) Três números inteiros com assinatura de 64 bits
long4 (link em inglês) Quatro números inteiros assinados de 64 bits
rs_matrix2x2 (link em inglês) Matriz 2x2 de flutuações de 32 bits
rs_matrix3x3 (link em inglês) Matriz 3x3 de flutuações de 32 bits
rs_matrix4x4 (link em inglês) Matriz 4x4 de flutuações de 32 bits
rs_quaternion (em inglês) Quaternion
curta2 Dois números inteiros com sinal de 16 bits
curta3 Três números inteiros assinados de 16 bits
short4 (em inglês) Quatro números inteiros com sinal de 16 bits
size_t (em inglês) Tipo de tamanho sem assinatura
tamanho_t Tipo de tamanho assinado
uchar (em inglês) Número inteiro não assinado de 8 bits
uchar2 (em inglês) Dois números inteiros de 8 bits sem assinatura
uchar3 (link em inglês) Três números inteiros de 8 bits sem assinatura
uchar4 (link em inglês) Quatro números inteiros sem assinatura de 8 bits
uint (em inglês) Número inteiro não assinado de 32 bits
uint16_t (link em inglês) Número inteiro não assinado de 16 bits
uint2 (em inglês) Dois números inteiros de 32 bits sem assinatura
uint3 (em inglês) Três números inteiros de 32 bits sem assinatura
uint32_t (link em inglês) Número inteiro não assinado de 32 bits
uint4 (link em inglês) Quatro números inteiros de 32 bits sem assinatura
uint64_t (link em inglês) Número inteiro não assinado de 64 bits
uint8_t (link em inglês) Número inteiro não assinado de 8 bits
ulong (link em inglês) Número inteiro não assinado de 64 bits
ulong2 (link em inglês) Dois números inteiros de 64 bits sem assinatura
ulong3 (link em inglês) Três números inteiros de 64 bits sem assinatura
ulong4 (link em inglês) Quatro números inteiros sem assinatura de 64 bits
ushort Número inteiro não assinado de 16 bits
ushort2 (em inglês) Dois números inteiros de 16 bits sem assinatura
ushort3 (em inglês) Três números inteiros de 16 bits sem assinatura
ushort4 (link em inglês) Quatro números inteiros sem assinatura de 16 bits

Tipos

char2 : dois números inteiros assinados de 8 bits

Um typedef de: char __attribute__((ext_vector_type(2)))

Vetor de dois caracteres. Esses dois caracteres são compactados em um único campo de 16 bits com um alinhamento de 16 bits.

char3 : três números inteiros assinados de 8 bits

Um typedef de: char __attribute__((ext_vector_type(3)))

Vetor de três caracteres. Esses três caracteres são compactados em um único campo de 32 bits com um alinhamento de 32 bits.

char4 : quatro números inteiros assinados de 8 bits

Um typedef de: char __attribute__((ext_vector_type(4)))

Vetor de quatro caracteres. Esses quatro caracteres são compactados em um único campo de 32 bits com alinhamento de 32 bits.

double2 : dois flutuantes de 64 bits

Um typedef de: double __attribute__((ext_vector_type(2)))

Um vetor de dois valores duplos. Esses dois campos duplos compactados em um único campo de 128 bits com um alinhamento de 128 bits.

double3 : três flutuantes de 64 bits

Um typedef de: double __attribute__((ext_vector_type(3)))

Um vetor de três valores duplos. Esses três campos duplos compactados em um único campo de 256 bits com um alinhamento de 256 bits.

double4 : quatro flutuações de 64 bits

Um typedef de: double __attribute__((ext_vector_type(4)))

Um vetor de quatro valores duplos. Esses quatro campos duplos compactados em um único campo de 256 bits com um alinhamento de 256 bits.

float2 : dois flutuantes de 32 bits

Um typedef de: float __attribute__((ext_vector_type(2)))

Um vetor de dois pontos flutuantes. Esses dois flutuantes são compactados em um único campo de 64 bits com alinhamento de 64 bits.

Um vetor de dois pontos flutuantes. Esses dois flutuantes são compactados em um único campo de 64 bits com alinhamento de 64 bits.

float3 : três flutuantes de 32 bits

Um typedef de: float __attribute__((ext_vector_type(3)))

Um vetor de três flutuações. Esses três flutuantes são compactados em um único campo de 128 bits com um alinhamento de 128 bits.

float4 : quatro flutuantes de 32 bits

Um typedef de: float __attribute__((ext_vector_type(4)))

Um vetor com quatro pontos flutuantes. Esses quatro pontos flutuantes são compactados em um único campo de 128 bits com alinhamento de 128 bits.

metade : valor de ponto flutuante de 16 bits

Um typedef de: __fp16 Adicionado no nível 23 da API

Um valor de ponto flutuante de 16 bits.

half2 : dois flutuantes de 16 bits

Um typedef de: half __attribute__((ext_vector_type(2))) Adicionado no nível 23 da API

Versão vetorial do tipo de meio flutuante. Fornece dois campos parciais compactados em um único campo de 32 bits com alinhamento de 32 bits.

half3 : três flutuantes de 16 bits

Um typedef de: half __attribute__((ext_vector_type(3))) Adicionado no nível 23 da API

Versão vetorial do tipo de meio flutuante. Fornece três campos meio empacotados em um único campo de 64 bits com alinhamento de 64 bits.

half4 : quatro flutuações de 16 bits

Um typedef de: half __attribute__((ext_vector_type(4))) Adicionado no nível 23 da API

Versão vetorial do tipo de meio flutuante. Fornece quatro campos meios compactados em um único campo de 64 bits com alinhamento de 64 bits.

int16_t : número inteiro assinado de 16 bits

Um typedef de: curto

Um tipo de número inteiro assinado de 16 bits.

int2 : dois números inteiros assinados de 32 bits

Um typedef de: int __attribute__((ext_vector_type(2)))

Um vetor de dois inteiros. Esses dois ints são compactados em um único campo de 64 bits com um alinhamento de 64 bits.

int3 : três números inteiros assinados de 32 bits

Um typedef de: int __attribute__((ext_vector_type(3)))

Um vetor de três inteiros. Esses três ints são compactados em um único campo de 128 bits com um alinhamento de 128 bits.

int32_t : número inteiro assinado de 32 bits

Um typedef de: int

Um tipo de número inteiro assinado de 32 bits.

int4 : quatro números inteiros assinados de 32 bits

Um typedef de: int __attribute__((ext_vector_type(4)))

Um vetor de quatro inteiros. Esses dois quatros são compactados em um único campo de 128 bits com um alinhamento de 128 bits.

int64_t : número inteiro assinado de 64 bits

Um typedef de: long long Removida da API de nível 21 e posteriores

Um typedef de: long Adicionado no nível 21 da API

Um tipo de número inteiro assinado de 64 bits.

int8_t : número inteiro assinado de 8 bits

Um typedef de: char

Tipo de número inteiro assinado de 8 bits.

long2 : dois números inteiros assinados de 64 bits

Um typedef de: long __attribute__((ext_vector_type(2)))

Vetor de dois valores longos. Esses dois dados longos são compactados em um único campo de 128 bits com um alinhamento de 128 bits.

long3 : três números inteiros assinados de 64 bits

Um typedef de: long __attribute__((ext_vector_type(3)))

Um vetor de três valores longos. Esses três longos são compactados em um único campo de 256 bits com um alinhamento de 256 bits.

long4 : quatro números inteiros assinados de 64 bits

Um typedef de: long __attribute__((ext_vector_type(4)))

Um vetor de quatro valores longos. Esses quatro dados longos são compactados em um único campo de 256 bits com um alinhamento de 256 bits.

rs_matrix2x2 : matriz 2x2 de pontos flutuantes de 32 bits

Uma estrutura com os seguintes campos:     

ponto flutuante m[4]

Uma matriz quadrada de pontos flutuantes 2x2. As entradas são armazenadas na matriz no local [row*2 + col].

Consulte Funções de matriz.

rs_matrix3x3 : matriz 3x3 de flutuações de 32 bits

Uma estrutura com os seguintes campos:     

flutuação m[9]

Uma matriz quadrada 3x3 de dados flutuantes. As entradas são armazenadas na matriz no local [row*3 + col].

Consulte Funções de matriz.

rs_matrix4x4 : matriz 4x4 de flutuações de 32 bits

Uma estrutura com os seguintes campos:     

flutuação m[16]

Uma matriz quadrada 4x4 de flutuantes. As entradas são armazenadas na matriz no local [row*4 + col].

Consulte Funções de matriz.

rs_quaternion : quaternion

Um typedef de: float4

Uma matriz quadrada de flutuação 4x4 que representa um quatérnio.

Consulte Funções quaternion.

short2 : dois números inteiros assinados de 16 bits

Um typedef de: short __attribute__((ext_vector_type(2)))

Vetor com dois Shorts. Esses dois Shorts são compactados em um único campo de 32 bits com um alinhamento de 32 bits.

short3 : três números inteiros assinados de 16 bits

Um typedef de: short __attribute__((ext_vector_type(3)))

Vetor com três Shorts. Esses três campos curtos empacotados em um único campo de 64 bits com um alinhamento de 64 bits.

short4 : quatro números inteiros assinados de 16 bits

Um typedef de: short __attribute__((ext_vector_type(4)))

Vetor com quatro Shorts. Esses quatro campos curtos empacotados em um único campo de 64 bits com um alinhamento de 64 bits.

size_t : tipo de tamanho sem assinatura

Um typedef de: uint64_t Ao compilar para 64 bits.

Um typedef de: uint32_t Ao compilar para 32 bits.

Tipo de tamanho sem assinatura. O número de bits depende dos sinalizadores de compilação.

ssize_t : tipo de tamanho assinado

Um typedef de: int64_t Ao compilar para 64 bits.

Um typedef de: int32_t Ao compilar para 32 bits.

Tipo de tamanho assinado. O número de bits depende dos sinalizadores de compilação.

uchar : número inteiro não assinado de 8 bits

Um typedef de: uint8_t

Tipo de número inteiro não assinado de 8 bits.

uchar2 : dois números inteiros não assinados de 8 bits

Um typedef de: uchar __attribute__((ext_vector_type(2)))

Vetor de dois uchars. Esses dois campos uchar compactados em um único campo de 16 bits com um alinhamento de 16 bits.

uchar3 : três números inteiros não assinados de 8 bits

Um typedef de: uchar __attribute__((ext_vector_type(3)))

Vetor de três uchars. Esses três campos uchar compactados em um único campo de 32 bits com um alinhamento de 32 bits.

uchar4 : quatro números inteiros não assinados de 8 bits

Um typedef de: uchar __attribute__((ext_vector_type(4)))

Um vetor de quatro uchars. Esses quatro campos uchar compactados em um único campo de 32 bits com um alinhamento de 32 bits.

uint : número inteiro não assinado de 32 bits

Um typedef de: uint32_t

Um tipo de número inteiro não assinado de 32 bits.

uint16_t : número inteiro não assinado de 16 bits

Um typedef de: curto não assinado

Um tipo de número inteiro não assinado de 16 bits.

uint2 : dois números inteiros de 32 bits não assinados

Um typedef de: uint __attribute__((ext_vector_type(2)))

Vetor de duas uints. Essas duas uints são empacotadas em um único campo de 64 bits com um alinhamento de 64 bits.

uint3 : três números inteiros de 32 bits

Um typedef de: uint __attribute__((ext_vector_type(3)))

Vetor de três uints. Essas três uints são empacotadas em um único campo de 128 bits com um alinhamento de 128 bits.

uint32_t : número inteiro não assinado de 32 bits

Um typedef de: unsigned int

Um tipo de número inteiro não assinado de 32 bits.

uint4 : quatro números inteiros não assinados de 32 bits

Um typedef de: uint __attribute__((ext_vector_type(4)))

Vetor de quatro uints. Essas quatro uints são empacotadas em um único campo de 128 bits com um alinhamento de 128 bits.

uint64_t : número inteiro não assinado de 64 bits

Um typedef de: sem assinatura long long Removido da API de nível 21 e versões mais recentes.

Um typedef de: sem assinatura long Adicionado no nível 21 da API

Um tipo de número inteiro não assinado de 64 bits.

uint8_t : número inteiro não assinado de 8 bits

Um typedef de: não assinado char

Tipo de número inteiro não assinado de 8 bits.

ulong : número inteiro não assinado de 64 bits

Um typedef de: uint64_t

Um tipo de número inteiro não assinado de 64 bits.

ulong2 : dois números inteiros não assinados de 64 bits

Um typedef de: ulong __attribute__((ext_vector_type(2)))

Vetor de doisulongs. Esses dois comprimentos são compactados em um único campo de 128 bits com um alinhamento de 128 bits.

ulong3 : três números inteiros de 64 bits não assinados

Um typedef de: ulong __attribute__((ext_vector_type(3)))

Vetor de três comprimentos. Esses três campos ulong são compactados em um único campo de 256 bits com um alinhamento de 256 bits.

ulong4 : quatro números inteiros não assinados de 64 bits

Um typedef de: ulong __attribute__((ext_vector_type(4)))

Vetor de quatro comprimentos. Esses quatro campos ulong são compactados em um único campo de 256 bits com um alinhamento de 256 bits.

ushort : número inteiro não assinado de 16 bits

Um typedef de: uint16_t

Um tipo de número inteiro não assinado de 16 bits.

ushort2 : dois números inteiros não assinados de 16 bits

Um typedef de: ushort __attribute__((ext_vector_type(2)))

Vetor de dois ushorts. Esses dois campos ushort compactados em um único campo de 32 bits com um alinhamento de 32 bits.

ushort3 : três números inteiros de 16 bits não assinados

Um typedef de: ushort __attribute__((ext_vector_type(3)))

Vetor de três ushorts. Esses três campos ushort compactados em um único campo de 64 bits com um alinhamento de 64 bits.

ushort4 : quatro números inteiros não assinados de 16 bits

Um typedef de: ushort __attribute__((ext_vector_type(4)))

Vetor de quatro ushorts. Esses quatro campos ushort compactados em um único campo de 64 bits com um alinhamento de 64 bits.