توابع و انواع فراخوانی هسته RenderScript، توابع و انواع فراخوانی هسته RenderScript

نمای کلی

تابع rsForEach () می تواند برای فراخوانی هسته ریشه یک اسکریپت استفاده شود.

توابع دیگر برای بدست آوردن ویژگی های فراخوانی یک هسته اجرایی مانند ابعاد و شاخص های فعلی استفاده می شوند. این توابع یک rs_kernel_context را به عنوان آرگومان می گیرند.

خلاصه

انواع
rs_for_each_strategy_t سفارش پردازش سلولی پیشنهادی
rs_kernel دسته به یک تابع هسته
rs_kernel_context به یک زمینه فراخوانی هسته رسیدگی کنید
rs_script_call_t اطلاعات تکرار سلول
توابع
rsForEach یک هسته راه اندازی می کند
rsForEachInternal (Internal API) یک هسته را در اسکریپت فعلی راه اندازی کنید (با شماره شکاف)
rsForEachWithOptions هسته ای را با گزینه ها راه اندازی می کند
rsGetArray0 ایندکس در بعد Array0 برای زمینه هسته مشخص شده
rsGetArray1 ایندکس در بعد Array1 برای زمینه هسته مشخص شده
rsGetArray2 ایندکس در بعد Array2 برای زمینه هسته مشخص شده
rsGetArray3 ایندکس در بعد Array3 برای زمینه هسته مشخص شده
rsGetDimArray0 اندازه بعد Array0 برای زمینه هسته مشخص شده
rsGetDimArray1 اندازه بعد Array1 برای زمینه هسته مشخص شده
rsGetDimArray2 اندازه بعد Array2 برای زمینه هسته مشخص شده
rsGetDimArray3 اندازه بعد Array3 برای زمینه هسته مشخص شده
rsGetDimHasFaces وجود بیش از یک چهره برای زمینه هسته مشخص شده
rsGetDimLod تعداد سطوح جزئیات برای زمینه هسته مشخص شده
rsGetDimX اندازه بعد X برای زمینه هسته مشخص شده
rsGetDimY اندازه بعد Y برای زمینه هسته مشخص شده
rsGetDimZ اندازه بعد Z برای زمینه هسته مشخص شده
rsGetFace مختصات Face برای زمینه هسته مشخص شده
rsGetLod نمایه در بعد Levels of Detail برای زمینه هسته مشخص شده

انواع

rs_for_each_strategy_t : دستور پردازش سلولی پیشنهادی

یک عدد با مقادیر زیر:

RS_FOR_EACH_STRATEGY_SERIAL = 0 مناطق حافظه پیوسته را ترجیح دهید.
RS_FOR_EACH_STRATEGY_DONT_CARE = ​​1 بدون اولویت
RS_FOR_EACH_STRATEGY_DST_LINEAR = 2 DST را ترجیح دهید.
RS_FOR_EACH_STRATEGY_TILE_SMALL = 3 پردازش مناطق مستطیلی کوچک را ترجیح دهید.
RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4 مناطق مستطیلی متوسط ​​را ترجیح دهید.
RS_FOR_EACH_STRATEGY_TILE_LARGE = 5 پردازش مناطق مستطیلی بزرگ را ترجیح دهید.

این نوع برای نشان دادن چگونگی تکرار هسته فراخوانی شده روی سلول های تخصیص استفاده می شود. این فقط یک اشاره است. اجراها ممکن است از پیشنهاد پیروی نکنند.

این مشخصات می‌تواند به رفتار ذخیره‌سازی هسته در حال اجرا کمک کند، به عنوان مثال محل حافظه پنهان زمانی که پردازش بر روی چندین هسته توزیع می‌شود.

rs_kernel : یک تابع هسته را کنترل کنید

یک typedef از: void* در سطح API 24 اضافه شده است

یک نوع مات برای تابعی که با ویژگی کرنل تعریف می شود. مقداری از این نوع را می توان در فراخوانی rsForEach برای راه اندازی یک هسته استفاده کرد.

rs_kernel_context : به یک زمینه فراخوانی هسته رسیدگی کنید

یک typedef از: const struct rs_kernel_context_t * اضافه شده در سطح API 23

زمینه هسته شامل ویژگی های مشترک تخصیص هایی است که تکرار می شوند، مانند ابعاد. همچنین شامل شاخص‌هایی است که به ندرت از سلول پردازش شده فعلی استفاده می‌شود، مانند شاخص Array0 یا سطح جزئیات فعلی.

شما می توانید با افزودن یک پارامتر خاص به نام "context" از نوع rs_kernel_context به تابع هسته خود به زمینه هسته دسترسی پیدا کنید. برای مثال به rsGetDimX () و rsGetArray0 () مراجعه کنید.

rs_script_call_t : اطلاعات تکرار سلول

ساختاری با فیلدهای زیر:

استراتژی rs_for_each_strategy_t در حال حاضر نادیده گرفته شده است. در آینده، استراتژی تکرار سلولی پیشنهاد خواهد شد.
uint32_t xStart شاخص شروع در بعد X.
uint32_t xEnd نمایه پایانی (انحصاری) در بعد X.
uint32_t yStart شاخص شروع در بعد Y.
uint32_t yEnd نمایه پایانی (انحصاری) در بعد Y.
uint32_t zStart شاخص شروع در بعد Z.
uint32_t zEnd نمایه پایانی (انحصاری) در بعد Z.
uint32_t arrayStart شروع ایندکس در بعد Array0.
آرایه uint32_t پایان نمایه پایانی (انحصاری) در بعد Array0.
uint32_t array1Start شاخص شروع در بعد Array1.
uint32_t array1End نمایه پایانی (انحصاری) در بعد Array1.
uint32_t array2Start شاخص شروع در بعد Array2.
uint32_t array2End نمایه پایانی (انحصاری) در بعد Array2.
uint32_t array3Start شاخص شروع در بعد Array3.
uint32_t array3End نمایه پایانی (انحصاری) در بعد Array3.

این ساختار برای ارائه اطلاعات تکرار به فراخوانی rsForEach استفاده می شود. در حال حاضر برای محدود کردن پردازش به زیر مجموعه ای از سلول ها استفاده می شود. در نسخه‌های آینده، از آن برای ارائه راهنمایی در مورد نحوه بهترین تکرار روی سلول‌ها نیز استفاده خواهد شد.

فیلدهای شروع شامل و فیلدهای پایان انحصاری هستند. به عنوان مثال برای تکرار روی سلول های 4، 5، 6 و 7 در بعد X، xStart را روی 4 و xEnd را روی 8 تنظیم کنید.

توابع

rsForEach : یک هسته را راه اندازی می کند

void rsForEach( rs_kernel kernel, ... ...); در سطح 24 API اضافه شد
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ); سطح API 14 - 23
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData); از سطح API 14 و بالاتر حذف شد
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData، const rs_script_call_t * sc); از سطح API 14 و بالاتر حذف شد
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData، size_t usrDataLen); سطح API 14 - 20
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData، size_t usrDataLen، const rs_script_call_t * sc); سطح API 14 - 20
پارامترها
اسکریپت اسکریپت برای تماس.
ورودی تخصیص به منبع داده از.
خروجی تخصیص برای نوشتن تاریخ.
usrData داده های تعریف شده توسط کاربر برای ارسال به اسکریپت. ممکن است NULL باشد.
sc اطلاعات کنترلی اضافی برای انتخاب یک منطقه فرعی از تخصیص برای پردازش یا پیشنهاد یک استراتژی پیاده روی استفاده می شود. ممکن است NULL باشد.
usrDataLen اندازه ساختار userData. در صورت لزوم از این برای انجام یک کپی کم عمق از داده ها استفاده می شود.
هسته تعیین کننده تابع برای تابعی که با ویژگی هسته تعریف می شود.
... تخصیص ورودی و خروجی

هسته را بیش از صفر یا بیشتر تخصیص ورودی اجرا می کند. آنها پس از آرگومان rs_kernel ارسال می شوند. اگر هسته مشخص شده مقداری را برمی گرداند، یک تخصیص خروجی باید به عنوان آخرین آرگومان مشخص شود. همه تخصیص های ورودی، و تخصیص خروجی در صورت وجود، باید ابعاد یکسانی داشته باشند.

این یک تابع همزمان است. فراخوانی این تابع تنها پس از اتمام کار برای تمام سلول‌های تخصیص ورودی برمی‌گردد. اگر تابع هسته مقداری را برگرداند، فراخوانی منتظر می ماند تا تمام نتایج در تخصیص خروجی نوشته شود.

تا سطح API 23، هسته به طور ضمنی به عنوان هسته با نام "root" در اسکریپت مشخص شده مشخص می شود و تنها یک تخصیص ورودی می تواند استفاده شود. با شروع در سطح 24 API، می توان از یک تابع هسته دلخواه استفاده کرد، همانطور که توسط آرگومان هسته مشخص شده است. آرگومان اسکریپت حذف می شود. هسته باید در اسکریپت فعلی تعریف شود. علاوه بر این، می توان از بیش از یک ورودی استفاده کرد.

به عنوان مثال
float __attribute__((kernel)) square(float a) {
return a * a;
}

void compute(rs_allocation ain, rs_allocation aout) {
rsForEach(square, ain, aout);
}

rsForEachInternal : (Internal API) یک هسته را در اسکریپت فعلی راه اندازی کنید (با شماره شکاف)

void rsForEachInternal(slot inint، rs_script_call_t * گزینه ها، int hasOutput، int numInputs، rs_allocation * allocs); در سطح 24 API اضافه شد
پارامترها
شکاف
گزینه ها
دارای خروجی نشان می دهد که آیا هسته خروجی تولید می کند یا خیر
numInputs تعداد تخصیص ورودی
تخصیص می دهد تخصیص ورودی و خروجی

API داخلی برای راه اندازی یک هسته.

rsForEachWithOptions : هسته ای را با گزینه ها راه اندازی می کند

void rsForEachWithOptions( rs_kernel kernel، rs_script_call_t * گزینه ها، ... ...); در سطح 24 API اضافه شد
پارامترها
هسته تعیین کننده تابع برای تابعی که با ویژگی هسته تعریف می شود.
گزینه ها گزینه های راه اندازی
... تخصیص ورودی و خروجی

هسته را به روشی مشابه rsForEach راه اندازی می کند. با این حال، به جای پردازش تمام سلول های ورودی، این تابع فقط سلول های موجود در فضای فرعی فضای شاخص مشخص شده در گزینه ها را پردازش می کند. با فضای فهرست به صراحت توسط گزینه ها مشخص شده است، هیچ ورودی یا تخصیص خروجی برای راه اندازی هسته با استفاده از این API مورد نیاز نیست. اگر تخصیص ها ارسال شوند، باید با تعداد آرگومان ها و مقدار بازگشتی مورد انتظار تابع هسته مطابقت داشته باشند. تخصیص خروجی در صورتی وجود دارد که هسته دارای مقدار بازگشتی غیر باطل باشد.

به عنوان مثال،
rs_script_call_t opts = {0};
opts.xStart = 0;
opts.xEnd = dimX;
opts.yStart = 0;
opts.yEnd = dimY / 2;
rsForEachWithOptions(foo, &opts, out, out);

rsGetArray0 : ایندکس در بعد Array0 برای زمینه هسته مشخص شده

uint32_t rsGetArray0( rs_kernel_context context); در سطح 23 API اضافه شد

ایندکس را در بعد Array0 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند.

زمینه هسته حاوی ویژگی‌های مشترک تخصیص‌هایی است که روی شاخص‌ها تکرار می‌شوند و به ندرت از آن‌ها استفاده می‌شود، مانند اندیس Array0.

شما می توانید با افزودن یک پارامتر خاص به نام "context" از نوع rs_kernel_context به تابع هسته خود به زمینه هسته دسترسی پیدا کنید. به عنوان مثال
short RS_KERNEL myKernel(short value, uint32_t x, rs_kernel_context context) {
// The current index in the common x, y, z dimensions are accessed by
// adding these variables as arguments. For the more rarely used indices
// to the other dimensions, extract them from the kernel context:
uint32_t index_a0 = rsGetArray0(context);
//...
}

اگر بعد Array0 وجود نداشته باشد این تابع 0 را برمی گرداند.

rsGetArray1 : ایندکس در بعد Array1 برای زمینه هسته مشخص شده

uint32_t rsGetArray1( rs_kernel_context context); در سطح 23 API اضافه شد

ایندکس را در بعد Array1 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Array1 وجود نداشته باشد، 0 را برمی گرداند.

rsGetArray2 : ایندکس در بعد Array2 برای زمینه هسته مشخص شده

uint32_t rsGetArray2( rs_kernel_context context); در سطح 23 API اضافه شد

شاخص را در بعد Array2 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Array2 وجود نداشته باشد، 0 را برمی گرداند.

rsGetArray3 : ایندکس در بعد Array3 برای زمینه هسته مشخص شده

uint32_t rsGetArray3( rs_kernel_context context); در سطح 23 API اضافه شد

ایندکس را در بعد Array3 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Array3 وجود نداشته باشد 0 را برمی گرداند.

rsGetDimArray0 : اندازه بعد Array0 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray0( rs_kernel_context context); در سطح 23 API اضافه شد

اندازه بعد Array0 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array0 وجود نداشته باشد، 0 را برمی گرداند.

rsGetDimArray1 : اندازه بعد Array1 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray1( rs_kernel_context context); در سطح 23 API اضافه شد

اندازه بعد Array1 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array1 وجود نداشته باشد، 0 را برمی گرداند.

rsGetDimArray2 : اندازه بعد Array2 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray2( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد Array2 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array2 وجود نداشته باشد، 0 را برمی گرداند.

rsGetDimArray3 : اندازه بعد Array3 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray3( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد Array3 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array3 وجود نداشته باشد 0 را برمی گرداند.

rsGetDimHasFaces : وجود بیش از یک چهره برای زمینه هسته مشخص شده

bool rsGetDimHasFaces( rs_kernel_context context); در سطح 23 API اضافه شده است
برمی گرداند
اگر بیش از یک چهره وجود داشته باشد true و در غیر این صورت false برمی گرداند.

اگر هسته روی نقشه مکعبی در حال تکرار باشد، اگر بیش از یک چهره وجود داشته باشد، این تابع true را برمی‌گرداند. در تمام موارد دیگر، false برمی گردد. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

rsAllocationGetDimFaces () مشابه است اما 0 یا 1 را به جای bool برمی گرداند.

rsGetDimLod : تعداد سطوح جزئیات برای زمینه هسته مشخص شده

uint32_t rsGetDimLod( rs_kernel_context context); در سطح 23 API اضافه شد

تعداد سطوح جزئیات را برای زمینه هسته مشخص شده برمی گرداند. این برای mipmaps مفید است. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر از سطح جزئیات استفاده نشود، 0 را برمی گرداند.

rsAllocationGetDimLOD () مشابه است اما 0 یا 1 را به جای تعداد واقعی سطوح برمی گرداند.

rsGetDimX : اندازه بعد X برای زمینه هسته مشخص شده

uint32_t rsGetDimX( rs_kernel_context context); در سطح 23 API اضافه شد

اندازه بعد X را برای زمینه هسته مشخص شده برمی گرداند.

زمینه هسته حاوی ویژگی‌های مشترک تخصیص‌هایی است که روی شاخص‌ها تکرار می‌شوند و به ندرت از آن‌ها استفاده می‌شود، مانند اندیس Array0.

شما می توانید با افزودن یک پارامتر خاص به نام "context" از نوع rs_kernel_context به تابع هسته خود به آن دسترسی داشته باشید. به عنوان مثال
int4 RS_KERNEL myKernel(int4 value, rs_kernel_context context) {
uint32_t size = rsGetDimX(context); //...

برای بدست آوردن بعد تخصیص خاص، از rsAllocationGetDimX () استفاده کنید.

rsGetDimY : اندازه بعد Y برای زمینه هسته مشخص شده

uint32_t rsGetDimY( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد X را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Y وجود نداشته باشد 0 را برمی گرداند.

برای بدست آوردن بعد تخصیص خاص، از rsAllocationGetDimY () استفاده کنید.

rsGetDimZ : اندازه بعد Z برای زمینه هسته مشخص شده

uint32_t rsGetDimZ( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد Z را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Z وجود نداشته باشد 0 را برمی گرداند.

برای بدست آوردن ابعاد تخصیص خاص، از rsAllocationGetDimZ () استفاده کنید.

rsGetFace : مختصات Face برای زمینه هسته مشخص شده

rs_allocation_cubemap_face rsGetFace( rs_kernel_context context); در سطح 23 API اضافه شده است

چهره ای را برمی گرداند که سلول در حال پردازش روی آن پیدا می شود، همانطور که توسط زمینه هسته ارائه شده مشخص شده است. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد چهره وجود نداشته باشد، RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X را برمی‌گرداند.

rsGetLod : نمایه در بعد Levels of Detail برای زمینه هسته مشخص شده

uint32_t rsGetLod( rs_kernel_context context); در سطح 23 API اضافه شده است

نمایه را در بعد Levels of Detail سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Levels of Detail وجود نداشته باشد، 0 را برمی گرداند.

،

نمای کلی

تابع rsForEach () می تواند برای فراخوانی هسته ریشه یک اسکریپت استفاده شود.

توابع دیگر برای بدست آوردن ویژگی های فراخوانی یک هسته اجرایی مانند ابعاد و شاخص های فعلی استفاده می شوند. این توابع یک rs_kernel_context را به عنوان آرگومان می گیرند.

خلاصه

انواع
rs_for_each_strategy_t سفارش پردازش سلولی پیشنهادی
rs_kernel دسته به یک تابع هسته
rs_kernel_context به یک زمینه فراخوانی هسته رسیدگی کنید
rs_script_call_t اطلاعات تکرار سلول
توابع
rsForEach یک هسته راه اندازی می کند
rsForEachInternal (Internal API) یک هسته را در اسکریپت فعلی راه اندازی کنید (با شماره شکاف)
rsForEachWithOptions هسته ای را با گزینه ها راه اندازی می کند
rsGetArray0 ایندکس در بعد Array0 برای زمینه هسته مشخص شده
rsGetArray1 ایندکس در بعد Array1 برای زمینه هسته مشخص شده
rsGetArray2 ایندکس در بعد Array2 برای زمینه هسته مشخص شده
rsGetArray3 ایندکس در بعد Array3 برای زمینه هسته مشخص شده
rsGetDimArray0 اندازه بعد Array0 برای زمینه هسته مشخص شده
rsGetDimArray1 اندازه بعد Array1 برای زمینه هسته مشخص شده
rsGetDimArray2 اندازه بعد Array2 برای زمینه هسته مشخص شده
rsGetDimArray3 اندازه بعد Array3 برای زمینه هسته مشخص شده
rsGetDimHasFaces وجود بیش از یک چهره برای زمینه هسته مشخص شده
rsGetDimLod تعداد سطوح جزئیات برای زمینه هسته مشخص شده
rsGetDimX اندازه بعد X برای زمینه هسته مشخص شده
rsGetDimY اندازه بعد Y برای زمینه هسته مشخص شده
rsGetDimZ اندازه بعد Z برای زمینه هسته مشخص شده
rsGetFace مختصات Face برای زمینه هسته مشخص شده
rsGetLod نمایه در بعد Levels of Detail برای زمینه هسته مشخص شده

انواع

rs_for_each_strategy_t : دستور پردازش سلولی پیشنهادی

یک عدد با مقادیر زیر:

RS_FOR_EACH_STRATEGY_SERIAL = 0 مناطق حافظه پیوسته را ترجیح دهید.
RS_FOR_EACH_STRATEGY_DONT_CARE = ​​1 بدون اولویت
RS_FOR_EACH_STRATEGY_DST_LINEAR = 2 DST را ترجیح دهید.
RS_FOR_EACH_STRATEGY_TILE_SMALL = 3 پردازش مناطق مستطیلی کوچک را ترجیح دهید.
RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4 مناطق مستطیلی متوسط ​​را ترجیح دهید.
RS_FOR_EACH_STRATEGY_TILE_LARGE = 5 پردازش مناطق مستطیلی بزرگ را ترجیح دهید.

این نوع برای نشان دادن چگونگی تکرار هسته فراخوانی شده روی سلول های تخصیص استفاده می شود. این فقط یک اشاره است. اجراها ممکن است از پیشنهاد پیروی نکنند.

این مشخصات می‌تواند به رفتار ذخیره‌سازی هسته در حال اجرا کمک کند، به عنوان مثال محل حافظه پنهان زمانی که پردازش بر روی چندین هسته توزیع می‌شود.

rs_kernel : یک تابع هسته را کنترل کنید

یک typedef از: void* در سطح API 24 اضافه شده است

یک نوع مات برای تابعی که با ویژگی کرنل تعریف می شود. مقداری از این نوع را می توان در فراخوانی rsForEach برای راه اندازی یک هسته استفاده کرد.

rs_kernel_context : به یک زمینه فراخوانی هسته رسیدگی کنید

یک typedef از: const struct rs_kernel_context_t * اضافه شده در سطح API 23

زمینه هسته شامل ویژگی های مشترک تخصیص هایی است که تکرار می شوند، مانند ابعاد. همچنین شامل شاخص‌هایی است که به ندرت از سلول پردازش شده فعلی استفاده می‌شود، مانند شاخص Array0 یا سطح جزئیات فعلی.

شما می توانید با افزودن یک پارامتر خاص به نام "context" از نوع rs_kernel_context به تابع هسته خود به زمینه هسته دسترسی پیدا کنید. برای مثال به rsGetDimX () و rsGetArray0 () مراجعه کنید.

rs_script_call_t : اطلاعات تکرار سلول

ساختاری با فیلدهای زیر:

استراتژی rs_for_each_strategy_t در حال حاضر نادیده گرفته شده است. در آینده، استراتژی تکرار سلولی پیشنهاد خواهد شد.
uint32_t xStart شاخص شروع در بعد X.
uint32_t xEnd نمایه پایانی (انحصاری) در بعد X.
uint32_t yStart شاخص شروع در بعد Y.
uint32_t yEnd نمایه پایانی (انحصاری) در بعد Y.
uint32_t zStart شاخص شروع در بعد Z.
uint32_t zEnd نمایه پایانی (انحصاری) در بعد Z.
uint32_t arrayStart شروع ایندکس در بعد Array0.
آرایه uint32_t پایان نمایه پایانی (انحصاری) در بعد Array0.
uint32_t array1Start شاخص شروع در بعد Array1.
uint32_t array1End نمایه پایانی (انحصاری) در بعد Array1.
uint32_t array2Start شاخص شروع در بعد Array2.
uint32_t array2End نمایه پایانی (انحصاری) در بعد Array2.
uint32_t array3Start شاخص شروع در بعد Array3.
uint32_t array3End نمایه پایانی (انحصاری) در بعد Array3.

این ساختار برای ارائه اطلاعات تکرار به فراخوانی rsForEach استفاده می شود. در حال حاضر برای محدود کردن پردازش به زیر مجموعه ای از سلول ها استفاده می شود. در نسخه‌های آینده، از آن برای ارائه راهنمایی در مورد نحوه بهترین تکرار روی سلول‌ها نیز استفاده خواهد شد.

فیلدهای شروع شامل و فیلدهای پایان انحصاری هستند. به عنوان مثال برای تکرار روی سلول های 4، 5، 6 و 7 در بعد X، xStart را روی 4 و xEnd را روی 8 تنظیم کنید.

توابع

rsForEach : یک هسته را راه اندازی می کند

void rsForEach( rs_kernel kernel, ... ...); در سطح 24 API اضافه شد
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ); سطح API 14 - 23
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData); از سطح API 14 و بالاتر حذف شد
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData، const rs_script_call_t * sc); از سطح API 14 و بالاتر حذف شد
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData، size_t usrDataLen); سطح API 14 - 20
void rsForEach (اسکریپت rs_script ، ورودی rs_allocation ، خروجی rs_allocation ، const void* usrData، size_t usrDataLen، const rs_script_call_t * sc); سطح API 14 - 20
پارامترها
اسکریپت اسکریپت برای تماس.
ورودی تخصیص به منبع داده از.
خروجی تخصیص برای نوشتن تاریخ.
usrData داده های تعریف شده توسط کاربر برای ارسال به اسکریپت. ممکن است NULL باشد.
sc اطلاعات کنترلی اضافی برای انتخاب یک منطقه فرعی از تخصیص برای پردازش یا پیشنهاد یک استراتژی پیاده روی استفاده می شود. ممکن است NULL باشد.
usrDataLen اندازه ساختار userData. در صورت لزوم از این برای انجام یک کپی کم عمق از داده ها استفاده می شود.
هسته تعیین کننده تابع برای تابعی که با ویژگی هسته تعریف می شود.
... تخصیص ورودی و خروجی

هسته را بیش از صفر یا بیشتر تخصیص ورودی اجرا می کند. آنها پس از آرگومان rs_kernel ارسال می شوند. اگر هسته مشخص شده مقداری را برمی گرداند، یک تخصیص خروجی باید به عنوان آخرین آرگومان مشخص شود. همه تخصیص های ورودی، و تخصیص خروجی در صورت وجود، باید ابعاد یکسانی داشته باشند.

این یک تابع همزمان است. فراخوانی این تابع تنها پس از اتمام کار برای تمام سلول‌های تخصیص ورودی برمی‌گردد. اگر تابع هسته مقداری را برگرداند، فراخوانی منتظر می ماند تا تمام نتایج در تخصیص خروجی نوشته شود.

تا سطح API 23، هسته به طور ضمنی به عنوان هسته با نام "root" در اسکریپت مشخص شده مشخص می شود و تنها یک تخصیص ورودی می تواند استفاده شود. با شروع در سطح 24 API، می توان از یک تابع هسته دلخواه استفاده کرد، همانطور که توسط آرگومان هسته مشخص شده است. آرگومان اسکریپت حذف می شود. هسته باید در اسکریپت فعلی تعریف شود. علاوه بر این، می توان از بیش از یک ورودی استفاده کرد.

به عنوان مثال
float __attribute__((kernel)) square(float a) {
return a * a;
}

void compute(rs_allocation ain, rs_allocation aout) {
rsForEach(square, ain, aout);
}

rsForEachInternal : (Internal API) یک هسته را در اسکریپت فعلی راه اندازی کنید (با شماره شکاف)

void rsForEachInternal(slot inint، rs_script_call_t * گزینه ها، int hasOutput، int numInputs، rs_allocation * allocs); در سطح 24 API اضافه شد
پارامترها
شکاف
گزینه ها
دارای خروجی نشان می دهد که آیا هسته خروجی تولید می کند یا خیر
numInputs تعداد تخصیص ورودی
تخصیص می دهد تخصیص ورودی و خروجی

API داخلی برای راه اندازی یک هسته.

rsForEachWithOptions : هسته ای را با گزینه ها راه اندازی می کند

void rsForEachWithOptions( rs_kernel kernel، rs_script_call_t * گزینه ها، ... ...); در سطح 24 API اضافه شد
پارامترها
هسته تعیین کننده تابع برای تابعی که با ویژگی هسته تعریف می شود.
گزینه ها گزینه های راه اندازی
... تخصیص ورودی و خروجی

هسته را به روشی مشابه rsForEach راه اندازی می کند. با این حال، به جای پردازش تمام سلول های ورودی، این تابع فقط سلول های موجود در فضای فرعی فضای شاخص مشخص شده در گزینه ها را پردازش می کند. با فضای فهرست به صراحت توسط گزینه ها مشخص شده است، هیچ ورودی یا تخصیص خروجی برای راه اندازی هسته با استفاده از این API مورد نیاز نیست. اگر تخصیص ها ارسال شوند، باید با تعداد آرگومان ها و مقدار بازگشتی مورد انتظار تابع هسته مطابقت داشته باشند. تخصیص خروجی در صورتی وجود دارد که هسته دارای مقدار بازگشتی غیر باطل باشد.

به عنوان مثال،
rs_script_call_t opts = {0};
opts.xStart = 0;
opts.xEnd = dimX;
opts.yStart = 0;
opts.yEnd = dimY / 2;
rsForEachWithOptions(foo, &opts, out, out);

rsGetArray0 : ایندکس در بعد Array0 برای زمینه هسته مشخص شده

uint32_t rsGetArray0( rs_kernel_context context); در سطح 23 API اضافه شده است

ایندکس را در بعد Array0 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند.

زمینه هسته حاوی ویژگی‌های مشترک تخصیص‌هایی است که روی شاخص‌ها تکرار می‌شوند و به ندرت از آن‌ها استفاده می‌شود، مانند اندیس Array0.

شما می توانید با افزودن یک پارامتر خاص به نام "context" از نوع rs_kernel_context به تابع هسته خود به زمینه هسته دسترسی پیدا کنید. به عنوان مثال
short RS_KERNEL myKernel(short value, uint32_t x, rs_kernel_context context) {
// The current index in the common x, y, z dimensions are accessed by
// adding these variables as arguments. For the more rarely used indices
// to the other dimensions, extract them from the kernel context:
uint32_t index_a0 = rsGetArray0(context);
//...
}

اگر بعد Array0 وجود نداشته باشد این تابع 0 را برمی گرداند.

rsGetArray1 : ایندکس در بعد Array1 برای زمینه هسته مشخص شده

uint32_t rsGetArray1( rs_kernel_context context); در سطح 23 API اضافه شده است

ایندکس را در بعد Array1 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Array1 وجود نداشته باشد، 0 را برمی گرداند.

rsGetArray2 : ایندکس در بعد Array2 برای زمینه هسته مشخص شده

uint32_t rsGetArray2( rs_kernel_context context); در سطح 23 API اضافه شده است

شاخص را در بعد Array2 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Array2 وجود نداشته باشد، 0 را برمی گرداند.

rsGetArray3 : ایندکس در بعد Array3 برای زمینه هسته مشخص شده

uint32_t rsGetArray3( rs_kernel_context context); در سطح 23 API اضافه شده است

ایندکس را در بعد Array3 سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Array3 وجود نداشته باشد 0 را برمی گرداند.

rsGetDimArray0 : اندازه بعد Array0 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray0( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد Array0 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array0 وجود نداشته باشد، 0 را برمی گرداند.

rsGetDimArray1 : اندازه بعد Array1 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray1( rs_kernel_context context); در سطح 23 API اضافه شد

اندازه بعد Array1 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array1 وجود نداشته باشد، 0 را برمی گرداند.

rsGetDimArray2 : اندازه بعد Array2 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray2( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد Array2 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array2 وجود نداشته باشد، 0 را برمی گرداند.

rsGetDimArray3 : اندازه بعد Array3 برای زمینه هسته مشخص شده

uint32_t rsGetDimArray3( rs_kernel_context context); در سطح 23 API اضافه شد

اندازه بعد Array3 را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Array3 وجود نداشته باشد 0 را برمی گرداند.

rsGetDimHasFaces : وجود بیش از یک چهره برای زمینه هسته مشخص شده

bool rsGetDimHasFaces( rs_kernel_context context); در سطح 23 API اضافه شده است
برمی گرداند
اگر بیش از یک چهره وجود داشته باشد true و در غیر این صورت false برمی گرداند.

اگر هسته روی نقشه مکعبی در حال تکرار باشد، اگر بیش از یک چهره وجود داشته باشد، این تابع true را برمی‌گرداند. در تمام موارد دیگر، false برمی گردد. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

rsAllocationGetDimFaces () مشابه است اما 0 یا 1 را به جای bool برمی گرداند.

rsGetDimLod : تعداد سطوح جزئیات برای زمینه هسته مشخص شده

uint32_t rsGetDimLod( rs_kernel_context context); در سطح 23 API اضافه شده است

تعداد سطوح جزئیات را برای زمینه هسته مشخص شده برمی گرداند. این برای mipmaps مفید است. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر از سطح جزئیات استفاده نشود، 0 را برمی گرداند.

rsAllocationGetDimLOD () مشابه است اما 0 یا 1 را به جای تعداد واقعی سطوح برمی گرداند.

rsGetDimX : اندازه بعد X برای زمینه هسته مشخص شده

uint32_t rsGetDimX( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد X را برای زمینه هسته مشخص شده برمی گرداند.

زمینه هسته حاوی ویژگی‌های مشترک تخصیص‌هایی است که روی شاخص‌ها تکرار می‌شوند و به ندرت از آن‌ها استفاده می‌شود، مانند اندیس Array0.

شما می توانید با افزودن یک پارامتر خاص به نام "context" از نوع rs_kernel_context به تابع هسته خود به آن دسترسی داشته باشید. به عنوان مثال
int4 RS_KERNEL myKernel(int4 value, rs_kernel_context context) {
uint32_t size = rsGetDimX(context); //...

برای بدست آوردن بعد تخصیص خاص، از rsAllocationGetDimX () استفاده کنید.

rsGetDimY : اندازه بعد Y برای زمینه هسته مشخص شده

uint32_t rsGetDimY( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد X را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Y وجود نداشته باشد 0 را برمی گرداند.

برای بدست آوردن بعد تخصیص خاص، از rsAllocationGetDimY () استفاده کنید.

rsGetDimZ : اندازه بعد Z برای زمینه هسته مشخص شده

uint32_t rsGetDimZ( rs_kernel_context context); در سطح 23 API اضافه شده است

اندازه بعد Z را برای زمینه هسته مشخص شده برمی گرداند. برای توضیح زمینه به rsGetDimX () مراجعه کنید.

اگر بعد Z وجود نداشته باشد 0 را برمی گرداند.

برای بدست آوردن ابعاد تخصیص خاص، از rsAllocationGetDimZ () استفاده کنید.

rsGetFace : مختصات Face برای زمینه هسته مشخص شده

rs_allocation_cubemap_face rsGetFace( rs_kernel_context context); در سطح 23 API اضافه شده است

چهره ای را برمی گرداند که سلول در حال پردازش روی آن پیدا می شود، همانطور که توسط زمینه هسته ارائه شده مشخص شده است. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد چهره وجود نداشته باشد، RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X را برمی‌گرداند.

rsGetLod : نمایه در بعد Levels of Detail برای زمینه هسته مشخص شده

uint32_t rsGetLod( rs_kernel_context context); در سطح 23 API اضافه شده است

نمایه را در بعد Levels of Detail سلول در حال پردازش، همانطور که توسط زمینه هسته ارائه شده مشخص شده است، برمی گرداند. برای توضیح زمینه به rsGetArray0 () مراجعه کنید.

اگر بعد Levels of Detail وجود نداشته باشد، 0 را برمی گرداند.