סוגי נתונים מספריים ב-RenderScript

סקירה כללית

סקלר:

ב-RenderScript יש תמיכה בסוגי המספרים הסקלריים הבאים:

8 ביט 16 ביט 32 סיביות 64 ביט
מספר שלם: char, ‏ int8_t short, ‏ int16_t int32_t long, ‏ long long, ‏ int64_t
מספר שלם ללא סימן: uchar, ‏ uint8_t ushort, ‏ uint16_t uint, ‏ uint32_t ulong, ‏ uint64_t
נקודה צפה: חצי float double

וקטורים:

ב-RenderScript יש תמיכה בווקטורים בגודל קבוע באורך 2, 3 ו-4. מודעים מכריזים על וקטורים באמצעות שם הסוג הנפוץ ואחריו 2, 3 או 4. לדוגמה: float4, ‏ int3, ‏ double2, ‏ ulong4.

כדי ליצור ליטרלים של וקטורים, צריך להשתמש בסוג הווקטור ואחריו להוסיף את הערכים שמקובצים בסוגריים מסולסלים, למשל (float3){1.0f, 2.0f, 3.0f}.

אפשר לגשת לרשומים של וקטור באמצעות סגנונות מתן שמות שונים.

כדי לגשת לרשומה יחידה, מוסיפים נקודה אחרי שם המשתנה ואז:

  • האותיות x,‏ y,‏ z ו-w,
  • האותיות r,‏ g,‏ b ו-a,
  • האות s או S, ואחריה אינדקס שמתחיל באפס.

לדוגמה, ב-int4 myVar;, הביטויים הבאים זהים:
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

אפשר לגשת לכמה רשומות של וקטור בבת אחת באמצעות מזהה שהוא שרשור של כמה אותיות או אינדקסים. הווקטור שמתקבל הוא בגודל שווה למספר הרשומות שצוינו בשמות.

בדוגמה שלמעלה, אפשר לגשת לשתי הרשומות האמצעיות באמצעות myVar.yz,‏ myVar.gb,‏ myVar.s12 ו-myVar.S12.

הרשומות לא חייבות להיות צמודות זו לזו או בסדר עולה. אפשר גם לחזור על רשומות, כל עוד לא מנסים להקצות להן ערכים. בנוסף, אי אפשר לשלב בין סגנונות השמות.

ריכזנו כאן כמה דוגמאות לפעולות שאפשר או אי אפשר לבצע:
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

מטריצות וקוואטרניונים:

ב-RenderScript יש תמיכה במטריצות ריבועיות בגודל קבוע של מספרים מרחפים בגודל 2x2,‏ 3x3 ו-4x4. השמות של הסוגים הם rs_matrix2x2,‏ rs_matrix3x3 ו-rs_matrix4x4. רשימת הפעולות מפורטת במאמר פונקציות מטריקס.

יש תמיכה גם בקוואטרניונים באמצעות rs_quaternion. רשימת הפעולות מופיעה במאמר פונקציות של quaterrion.

סיכום

סוגים
char2 שני מספרים שלמים בעלי סימן באורך 8 ביט
char3 שלושה מספרים שלמים עם סימן באורך 8 ביט
char4 ארבעה מספרים שלמים בעלי סימן באורך 8 ביט
double2 שני מספרים ממשיים (float) ב-64 ביט
double3 שלושה מספרים ממשיים (float) ב-64 ביט
double4 ארבעה מספרים ממשיים (float) ב-64 ביט
float2 שני מספרים ממשיים (float) ב-32 ביט
float3 שלושה מספרים ממשיים (float) ב-32 ביט
float4 ארבעה מספרים ממשיים (float) ב-32 ביט
half ערך נקודה צפה (floating-point) של 16 ביט
half2 שני מספרים ממשיים (float) של 16 ביט
half3 שלושה מספרים מופשטים (float) של 16 ביט
half4 ארבעה מספרים ממשיים (float) ב-16 ביט
int16_t מספר שלם של 16 ביט עם סימן
int2 שני מספרים שלמים בעלי סימן באורך 32 ביט
int3 שלושה מספרים שלמים עם סימן באורך 32 ביט
int32_t מספר שלם בסימן של 32 ביט
int4 ארבעה מספרים שלמים בעלי סימן באורך 32 ביט
int64_t מספר שלם בסימן של 64 ביט
int8_t מספר שלם בסימן של 8 ביט
long2 שני מספרים שלמים ב-64 ביט עם סימן
long3 שלושה מספרים שלמים וחתומים של 64 ביט
long4 ארבעה מספרים שלמים וחתומים של 64 ביט
rs_matrix2x2 מטריצת 2x2 של מספרים ממשיים (float) ב-32 ביט
rs_matrix3x3 מטריצה 3x3 של מספרים ממשיים (float) ב-32 ביט
rs_matrix4x4 מטריצה 4x4 של מספרים ממשיים (float) ב-32 ביט
rs_quaternion קוואטרניון
short2 שני מספרים שלמים בעלי סימן באורך 16 ביט
short3 שלושה מספרים שלמים עם סימן באורך 16 ביט
short4 ארבעה מספרים שלמים בעלי סימן באורך 16 ביט
size_t סוג גודל ללא סימן
ssize_t סוג חתום של גודל
uchar מספר שלם ללא סימן באורך 8 ביט
uchar2 שני מספרים שלמים ללא סימן (unsigned integer) של 8 ביט
uchar3 שלושה מספרים שלמים ללא סימן (unsigned integer) של 8 ביט
uchar4 ארבעה מספרים שלמים ללא סימן (unsigned integer) של 8 ביט
uint מספר שלם ללא סימן באורך 32 ביט
uint16_t מספר שלם ללא סימן באורך 16 ביט
uint2 שני מספרים שלמים ללא סימן באורך 32 ביט
uint3 שלושה מספרים שלמים ללא סימן (unsigned integer) של 32 ביט
uint32_t מספר שלם ללא סימן באורך 32 ביט
uint4 ארבעה מספרים שלמים ללא סימן באורך 32 ביט
uint64_t מספר שלם ללא סימן (unsigned integer) של ‎64 סיביות
uint8_t מספר שלם ללא סימן באורך 8 ביט
ulong מספר שלם ללא סימן (unsigned integer) של ‎64 סיביות
ulong2 שני מספרים שלמים ללא סימן (unsigned integer) של 64 סיביות
ulong3 שלושה מספרים שלמים ללא סימן (unsigned integer) של 64 ביט
ulong4 ארבעה מספרים שלמים ללא סימן (unsigned integer) של 64 סיביות
ushort מספר שלם ללא סימן באורך 16 ביט
ushort2 שני מספרים שלמים ללא סימן באורך 16 ביט
ushort3 שלושה מספרים שלמים ללא סימן באורך 16 ביט
ushort4 ארבעה מספרים שלמים ללא סימן באורך 16 ביט

סוגים

char2 : שני מספרים שלמים בעלי סימן באורך 8 ביט

typedef של: char __attribute__((ext_vector_type(2)))     

וקטור של שני תווים. שני התווים האלה מקובצים בשדה יחיד של 16 ביט עם התאמה של 16 ביט.

char3 : שלושה מספרים שלמים בעלי סימן באורך 8 ביט

typedef של: char __attribute__((ext_vector_type(3)))     

וקטור של שלושה תווים. שלושת התווים האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

char4 : ארבעה מספרים שלמים בעלי סימן באורך 8 ביט

typedef של: char __attribute__((ext_vector_type(4)))     

וקטור של ארבעה תווים. ארבעת התווים האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

double2 : שני מספרי float של 64 ביט

typedef של: double __attribute__((ext_vector_type(2)))     

וקטור של שני מספרים שלמים. שני השדות הכפולים האלה נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

double3 : שלושה מספרים ממשיים (float) ב-64 ביט

typedef של: double __attribute__((ext_vector_type(3)))     

וקטור של שלושה מספרים כפולים. שלושת השדות הכפולים האלה מקובצים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.

double4 : ארבע ערכים מסוג float של 64 ביט

typedef של: double __attribute__((ext_vector_type(4)))     

וקטור של ארבעה מספרים כפולים. ארבעת השדות הכפולים האלה נארזים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.

float2 : שני מספרי float של 32 ביט

typedef של: float __attribute__((ext_vector_type(2)))     

וקטור של שני מספרי float. שני המספרים העשרוניים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

וקטור של שני מספרי float. שני המספרים העשרוניים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

float3 : שלושה מספרים ממשיים (float) ב-32 ביט

typedef של: float __attribute__((ext_vector_type(3)))     

וקטור של שלושה מספרים מסוג float. שלושת המשתנים מסוג float נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

float4 : ארבע ערכים של float ב-32 ביט

typedef של: float __attribute__((ext_vector_type(4)))     

וקטור של ארבעה מספרים מסוג float. ארבעת המשתנים מסוג float נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

half : ערך נקודה צפה (floating-point) של 16 ביט

typedef של: ‏__fp16     נוסף ב-רמת API 23

ערך נקודה צפה (floating-point) של 16 ביט.

half2 : שני מספרי צף של 16 ביט

typedef של: half __attribute__((ext_vector_type(2)))     נוסף ב-רמת API 23

גרסה וקטורית של סוג half float. שדה שמכיל שני שדות חצי שמועברים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

half3 : שלושה מספרים שלמים של 16 ביט

typedef של: half __attribute__((ext_vector_type(3)))     נוסף ב-רמת API 23

גרסה וקטורית של סוג half float. מספק שלושה שדות חצי שמועברים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

half4 : ארבע ערכים של 16 ביט בפורמט float

typedef של: half __attribute__((ext_vector_type(4)))     נוסף ב-רמת API 23

גרסה וקטורית של סוג half float. מספק ארבעה שדות חצי שממולאים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

int16_t : מספר שלם עם סימן באורך 16 ביט

typedef של: short     

סוג של מספר שלם ב-16 סיביות עם סימן.

int2 : שני מספרים שלמים בעלי סימן באורך 32 ביט

typedef של: int __attribute__((ext_vector_type(2)))     

וקטור של שני מספרים שלמים. שני המשתנים מסוג int נארזים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

int3 : שלושה מספרים שלמים בעלי סימן באורך 32 ביט

typedef של: int __attribute__((ext_vector_type(3)))     

וקטור של שלושה מספרים שלמים. שלושת המשתנים מסוג int נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

int32_t : מספר שלם עם סימן באורך 32 ביט

typedef של: int     

סוג של מספר שלם ב-32 סיביות עם סימן.

int4 : ארבעה מספרים שלמים בעלי סימן באורך 32 ביט

typedef של: int __attribute__((ext_vector_type(4)))     

וקטור של ארבעה מספרים שלמים. שני ה-4 האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

int64_t : מספר שלם חתום של 64 ביט

typedef של: long long     הוסר מ-רמת API 21 ואילך

typedef של: long     נוסף ב-רמת API 21

סוג של מספר שלם ב-64 סיביות עם סימן.

int8_t : מספר שלם עם סימן באורך 8 ביט

typedef של: char     

סוג של מספר שלם ב-8 סיביות עם סימן.

long2 : שני מספרים שלמים חתומים בטווח 64 ביט

typedef של: long __attribute__((ext_vector_type(2)))     

וקטור של שני longs. שני המשתנים מסוג long נארזים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

long3 : שלושה מספרים שלמים חתומים בטווח 64 ביט

typedef של: long __attribute__((ext_vector_type(3)))     

ווקטור של שלושה longs. שלושת המשתנים מסוג long נארזים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.

long4 : ארבעה מספרים שלמים חתומים בטווח 64 ביט

typedef של: long __attribute__((ext_vector_type(4)))     

ווקטור של ארבעה מספרי long. ארבעת המשתנים מסוג long נארזים בשדה יחיד של 256 ביט עם התאמה של 256 ביט.

rs_matrix2x2 : מטריצת 2x2 של ערכים 32 ביט ששומרים על ערך שלם

מבנה עם השדות הבאים:     

float m[4]

מטריצה ריבועית 2x2 של מספרי צף. הרשומות נשמרות במערך במיקום [row*2 + col].

פונקציות מטריצה

rs_matrix3x3 : מטריצה 3x3 של מספרי צף של 32 ביט

מבנה עם השדות הבאים:     

float m[9]

מטריצה ריבועית 3x3 של מספרי צף. הרשומות נשמרות במערך במיקום [row*3 + col].

פונקציות מטריצה

rs_matrix4x4 : מטריצת 4x4 של מספרי צף של 32 ביט

מבנה עם השדות הבאים:     

float m[16]

מטריצה ריבועית של 4x4 של מספרי צף. הרשומות מאוחסנות במערך במיקום [row*4 + col].

פונקציות מטריצה

rs_quaternion : Quaternion

typedef של: float4     

מטריצה ריבועית 4x4 של מספרי צף שמייצגת קוואטרניון.

פונקציות Quaternion

short2 : שני מספרים שלמים בעלי סימן באורך 16 ביט

typedef של: short __attribute__((ext_vector_type(2)))     

וקטור של שני סרטוני Shorts. שני ה-shorts האלה נארזים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

short3 : שלושה מספרים שלמים בעלי סימן באורך 16 ביט

typedef של: short __attribute__((ext_vector_type(3)))     

וקטור של שלושה סרטוני Shorts. שלושת השדות הקצרים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

short4 : ארבעה מספרים שלמים בעלי סימן באורך 16 ביט

typedef של: short __attribute__((ext_vector_type(4)))     

וקטור של ארבעה סרטוני Shorts. ארבעת השדות הקצרים האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

size_t : סוג גודל ללא סימן

typedef של: uint64_t     כשמפעילים הידור ל-64 ביט.

typedef של: uint32_t     כשמפעילים הידור ל-32 ביט.

סוג גודל ללא סימן. מספר הביטים תלוי בדגלים של הידור.

ssize_t : Signed size type

typedef של: int64_t     כשמפעילים הידור ל-64 ביט.

typedef של: int32_t     כשמפעילים הידור ל-32 ביט.

סוג המידה החתום. מספר הביטים תלוי בדגלים של הידור.

uchar : מספר שלם ללא סימן באורך 8 ביט

typedef של: uint8_t     

סוג של מספר שלם ללא סימן באורך 8 ביט.

uchar2 : שני מספרים שלמים ללא סימן באורך 8 ביט

typedef של: uchar __attribute__((ext_vector_type(2)))     

וקטור של שני uchars. שני שדות ה-uchar האלה מקובצים בשדה יחיד של 16 ביט עם התאמה של 16 ביט.

uchar3 : שלושה מספרים שלמים לא חתומים באורך 8 ביט

typedef של: uchar __attribute__((ext_vector_type(3)))     

וקטור של שלושה uchars. שלושת השדות מסוג uchar נארזים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

uchar4 : ארבעה מספרים שלמים ללא סימן באורך 8 ביט

typedef של: uchar __attribute__((ext_vector_type(4)))     

וקטור של ארבע אותיות uchar. ארבעת שדות ה-uchar האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

uint : מספר שלם ללא סימן באורך 32 ביט

typedef של: uint32_t     

סוג של מספר שלם ללא סימן באורך 32 ביט.

uint16_t : מספר שלם ללא סימן באורך 16 ביט

typedef של: unsigned short     

סוג של מספר שלם ללא סימן באורך 16 ביט.

uint2 : שני מספרים שלמים לא חתומים באורך 32 ביט

typedef של: uint __attribute__((ext_vector_type(2)))     

וקטור של שני uints. שני ה-uints האלה מקובצים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

uint3 : שלושה מספרים שלמים לא חתומים באורך 32 ביט

typedef של: uint __attribute__((ext_vector_type(3)))     

וקטור של שלושה uints. שלושת ה-uints האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

uint32_t : מספר שלם ללא סימן באורך 32 ביט

typedef של: unsigned int     

סוג של מספר שלם ללא סימן באורך 32 ביט.

uint4 : ארבעה מספרים שלמים לא חתומים באורך 32 ביט

typedef של: uint __attribute__((ext_vector_type(4)))     

וקטור של ארבעה uints. ארבעת ה-uints האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

uint64_t : מספר שלם ללא סימן באורך 64 ביט

typedef של: unsigned long long     הוסר מ-רמת API 21 ואילך

typedef של: unsigned long     נוסף ב-רמת API 21

סוג של מספר שלם ללא סימן (unsigned integer) ב-64 סיביות.

uint8_t : מספר שלם ללא סימן באורך 8 ביט

typedef של: unsigned char     

סוג של מספר שלם ללא סימן באורך 8 ביט.

ulong : מספר שלם ללא סימן באורך 64 ביט

typedef של: uint64_t     

סוג של מספר שלם ללא סימן (unsigned integer) ב-64 סיביות.

ulong2 : שני מספרים שלמים לא חתומים באורך 64 ביט

typedef של: ulong __attribute__((ext_vector_type(2)))     

וקטור של שני ulongs. שני ה-ulongs האלה מקובצים בשדה יחיד של 128 ביט עם התאמה של 128 ביט.

ulong3 : שלושה מספרים שלמים לא חתומים באורך 64 ביט

typedef של: ulong __attribute__((ext_vector_type(3)))     

וקטור של שלושה ulongs. שלושת השדות מסוג ulong נארזים בשדה יחיד באורך 256 ביט עם התאמה של 256 ביט.

ulong4 : ארבעה מספרים שלמים לא חתומים באורך 64 ביט

typedef של: ulong __attribute__((ext_vector_type(4)))     

וקטור של ארבעה ulongs. ארבעת השדות מסוג ulong נארזים בשדה יחיד באורך 256 ביט עם התאמה של 256 ביט.

ushort : מספר שלם ללא סימן באורך 16 ביט

typedef של: uint16_t     

סוג של מספר שלם ללא סימן באורך 16 ביט.

ushort2 : שני מספרים שלמים לא חתומים באורך 16 ביט

typedef של: ushort __attribute__((ext_vector_type(2)))     

וקטור של שני ushorts. שני שדות ה-ushort האלה מקובצים בשדה יחיד של 32 ביט עם התאמה של 32 ביט.

ushort3 : שלושה מספרים שלמים לא חתומים באורך 16 ביט

typedef של: ushort __attribute__((ext_vector_type(3)))     

וקטור של שלושה ushorts. שלושת השדות מסוג ushort נארזים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.

ushort4 : ארבעה מספרים שלמים לא חתומים באורך 16 ביט

typedef של: ushort __attribute__((ext_vector_type(4)))     

וקטור של ארבעת ushorts. ארבעת השדות מסוג ushort נארזים בשדה יחיד של 64 ביט עם התאמה של 64 ביט.