نمای کلی
تابع 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 را برمی گرداند.