Функции и типы вызова ядра RenderScript,Функции и типы вызова ядра RenderScript

Обзор

Функцию rsForEach () можно использовать для вызова корневого ядра скрипта.

Другие функции используются для получения характеристик вызова исполняемого ядра, таких как измерения и текущие индексы. Эти функции принимают rs_kernel_context в качестве аргумента.

Краткое содержание

Типы
rs_for_each_strategy_t Рекомендуемый порядок обработки ячеек
rs_kernel Дескриптор функции ядра
rs_kernel_context Дескриптор контекста вызова ядра
rs_script_call_t Информация об итерации ячейки
Функции
rsForEach Запускает ядро
rsForEachInternal (Внутренний 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 Координата лица для указанного контекста ядра
rsGetLod Индекс в измерении «Уровни детализации» для указанного контекста ядра.

Типы

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 Предпочитаю летнее время.
RS_FOR_EACH_STRATEGY_TILE_SMALL = 3 Предпочитайте обработку небольших прямоугольных областей.
RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4 Предпочитайте обработку средних прямоугольных областей.
RS_FOR_EACH_STRATEGY_TILE_LARGE = 5 Предпочитайте обработку больших прямоугольных областей.

Этот тип используется, чтобы подсказать, как вызываемое ядро ​​должно перебирать ячейки выделения. Это только подсказка. Реализации могут не следовать этому предложению.

Эта спецификация может улучшить поведение кэширования работающего ядра, например, локальность кэша, когда обработка распределяется по нескольким ядрам.

rs_kernel : дескриптор функции ядра.

Определение типа: void* Добавлено на уровне API 24.

Непрозрачный тип для функции, определенной с помощью атрибута ядра. Значение этого типа можно использовать в вызове rsForEach для запуска ядра.

rs_kernel_context : Дескриптор контекста вызова ядра.

Определение типа: 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 arrayEnd Конечный индекс (эксклюзивный) в измерении 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 , ... ...); Добавлено на уровне API 24.
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 Определенные пользователем данные для передачи в сценарий. Может быть НУЛЬ.
СК Дополнительная управляющая информация, используемая для выбора субрегиона выделения для обработки или предложения стратегии ходьбы. Может быть НУЛЬ.
usrDataLen Размер структуры userData. При необходимости это будет использоваться для выполнения поверхностного копирования данных.
ядро Указатель функции для функции, которая определена с помощью атрибута ядра.
... Распределение входных и выходных данных

Запускает ядро ​​при нулевом или более распределении входных данных. Они передаются после аргумента rs_kernel . Если указанное ядро ​​возвращает значение, в качестве последнего аргумента необходимо указать выходное распределение. Все входные распределения и выходное распределение, если оно существует, должны иметь одинаковые измерения.

Это синхронная функция. Вызов этой функции возвращает результат только после завершения всей работы для всех ячеек входных распределений. Если функция ядра возвращает какое-либо значение, вызов ожидает, пока все результаты не будут записаны в выходное распределение.

До уровня API 23 ядро ​​неявно указывается как ядро ​​с именем «root» в указанном сценарии, и можно использовать только одно входное распределение. Начиная с уровня API 24, можно использовать произвольную функцию ядра, указанную аргументом ядра. Аргумент сценария удален. Ядро должно быть определено в текущем скрипте. Кроме того, можно использовать более одного входа.

Например
float __attribute__((kernel)) square(float a) {
return a * a;
}

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

rsForEachInternal : (Внутренний API) Запуск ядра в текущем скрипте (с номером слота)

void rsForEachInternal(int slot, rs_script_call_t * options, int hasOutput, int numInputs, rs_allocation * allocs); Добавлено на уровне API 24.
Параметры
слот
параметры
имеетВыход Указывает, генерирует ли ядро ​​выходные данные
numInputs Количество входных распределений
выделяет Распределение входных и выходных данных

Внутренний API для запуска ядра.

rsForEachWithOptions : запускает ядро ​​с опциями.

void rsForEachWithOptions( rs_kernel kernel, rs_script_call_t * options, ... ...); Добавлено на уровне API 24.
Параметры
ядро Указатель функции для функции, которая определена с помощью атрибута ядра.
параметры Параметры запуска
... Распределение входных и выходных данных

Запускает ядро ​​аналогично 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 ); Добавлено на уровне API 23.

Возвращает индекс в измерении 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);
//...
}

Эта функция возвращает 0, если измерение Array0 отсутствует.

rsGetArray1 : Индекс в измерении Array1 для указанного контекста ядра.

uint32_t rsGetArray1 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении Array1 обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение Array1 отсутствует.

rsGetArray2 : Индекс в измерении Array2 для указанного контекста ядра.

uint32_t rsGetArray2 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении Array2 обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение Array2 отсутствует.

rsGetArray3 : Индекс в измерении Array3 для указанного контекста ядра.

uint32_t rsGetArray3 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении Array3 обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение Array3 отсутствует.

rsGetDimArray0 : Размер измерения Array0 для указанного контекста ядра.

uint32_t rsGetDimArray0 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array0 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array0 отсутствует.

rsGetDimArray1 : размер измерения Array1 для указанного контекста ядра.

uint32_t rsGetDimArray1 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array1 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array1 отсутствует.

rsGetDimArray2 : Размер измерения Array2 для указанного контекста ядра.

uint32_t rsGetDimArray2 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array2 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array2 отсутствует.

rsGetDimArray3 : Размер измерения Array3 для указанного контекста ядра.

uint32_t rsGetDimArray3 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array3 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array3 отсутствует.

rsGetDimHasFaces : наличие более одного лица для указанного контекста ядра.

bool rsGetDimHasFaces (контекст rs_kernel_context ); Добавлено на уровне API 23.
Возврат
Возвращает true, если присутствует более одного лица, в противном случае — false.

Если ядро ​​выполняет итерацию по кубической карте, эта функция возвращает true, если присутствует более одной грани. Во всех остальных случаях он возвращает false. См. rsGetDimX () для объяснения контекста.

rsAllocationGetDimFaces () аналогичен, но возвращает 0 или 1 вместо логического значения.

rsGetDimLod : количество уровней детализации для указанного контекста ядра.

uint32_t rsGetDimLod (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает количество уровней детализации для указанного контекста ядра. Это полезно для MIP-карт. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если уровень детализации не используется.

rsAllocationGetDimLOD () аналогичен, но возвращает 0 или 1 вместо фактического количества уровней.

rsGetDimX : Размер измерения X для указанного контекста ядра.

uint32_t rsGetDimX (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения 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 ); Добавлено на уровне API 23.

Возвращает размер измерения X для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Y отсутствует.

Чтобы получить размерность конкретного распределения, используйте rsAllocationGetDimY ().

rsGetDimZ : Размер измерения Z для указанного контекста ядра.

uint32_t rsGetDimZ (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Z для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если размер Z отсутствует.

Чтобы получить размерность конкретного распределения, используйте rsAllocationGetDimZ ().

rsGetFace : координата лица для указанного контекста ядра.

rs_allocation_cubemap_face rsGetFace ( rs_kernel_context context); Добавлено на уровне API 23.

Возвращает грань, на которой находится обрабатываемая ячейка, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, если размер грани отсутствует.

rsGetLod : Индекс в измерении «Уровни детализации» для указанного контекста ядра.

uint32_t rsGetLod (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении «Уровни детализации» обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение «Уровни детализации» отсутствует.

,

Обзор

Функцию rsForEach () можно использовать для вызова корневого ядра скрипта.

Другие функции используются для получения характеристик вызова исполняемого ядра, таких как измерения и текущие индексы. Эти функции принимают rs_kernel_context в качестве аргумента.

Краткое содержание

Типы
rs_for_each_strategy_t Рекомендуемый порядок обработки ячеек
rs_kernel Дескриптор функции ядра
rs_kernel_context Дескриптор контекста вызова ядра
rs_script_call_t Информация об итерации ячейки
Функции
rsForEach Запускает ядро
rsForEachInternal (Внутренний 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 Координата лица для указанного контекста ядра
rsGetLod Индекс в измерении «Уровни детализации» для указанного контекста ядра.

Типы

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 Предпочитаю летнее время.
RS_FOR_EACH_STRATEGY_TILE_SMALL = 3 Предпочитайте обработку небольших прямоугольных областей.
RS_FOR_EACH_STRATEGY_TILE_MEDIUM = 4 Предпочитайте обработку средних прямоугольных областей.
RS_FOR_EACH_STRATEGY_TILE_LARGE = 5 Предпочитайте обработку больших прямоугольных областей.

Этот тип используется, чтобы подсказать, как вызываемое ядро ​​должно перебирать ячейки выделения. Это только подсказка. Реализации могут не следовать этому предложению.

Эта спецификация может улучшить поведение кэширования работающего ядра, например, локальность кэша, когда обработка распределяется по нескольким ядрам.

rs_kernel : дескриптор функции ядра.

Определение типа: void* Добавлено на уровне API 24.

Непрозрачный тип для функции, определенной с помощью атрибута ядра. Значение этого типа можно использовать в вызове rsForEach для запуска ядра.

rs_kernel_context : Дескриптор контекста вызова ядра.

Определение типа: 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 arrayEnd Конечный индекс (эксклюзивный) в измерении 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 , ... ...); Добавлено на уровне API 24.
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 Определенные пользователем данные для передачи в сценарий. Может быть НУЛЬ.
СК Дополнительная управляющая информация, используемая для выбора субрегиона выделения для обработки или предложения стратегии ходьбы. Может быть НУЛЬ.
usrDataLen Размер структуры userData. При необходимости это будет использоваться для выполнения поверхностного копирования данных.
ядро Указатель функции для функции, которая определена с помощью атрибута ядра.
... Распределение входных и выходных данных

Запускает ядро ​​при нулевом или более распределении входных данных. Они передаются после аргумента rs_kernel . Если указанное ядро ​​возвращает значение, в качестве последнего аргумента необходимо указать выходное распределение. Все входные распределения и выходное распределение, если оно существует, должны иметь одинаковые измерения.

Это синхронная функция. Вызов этой функции возвращает результат только после завершения всей работы для всех ячеек входных распределений. Если функция ядра возвращает какое-либо значение, вызов ожидает, пока все результаты не будут записаны в выходное распределение.

До уровня API 23 ядро ​​неявно указывается как ядро ​​с именем «root» в указанном сценарии, и можно использовать только одно входное распределение. Начиная с уровня API 24, можно использовать произвольную функцию ядра, указанную аргументом ядра. Аргумент сценария удален. Ядро должно быть определено в текущем скрипте. Кроме того, можно использовать более одного входа.

Например
float __attribute__((kernel)) square(float a) {
return a * a;
}

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

rsForEachInternal : (Внутренний API) Запуск ядра в текущем скрипте (с номером слота)

void rsForEachInternal(int slot, rs_script_call_t * options, int hasOutput, int numInputs, rs_allocation * allocs); Добавлено на уровне API 24.
Параметры
слот
параметры
имеетВыход Указывает, генерирует ли ядро ​​выходные данные
numInputs Количество входных распределений
выделяет Распределение входных и выходных данных

Внутренний API для запуска ядра.

rsForEachWithOptions : запускает ядро ​​с опциями.

void rsForEachWithOptions( rs_kernel kernel, rs_script_call_t * options, ... ...); Добавлено на уровне API 24.
Параметры
ядро Указатель функции для функции, которая определена с помощью атрибута ядра.
параметры Параметры запуска
... Распределение входных и выходных данных

Запускает ядро ​​аналогично 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 ); Добавлено на уровне API 23.

Возвращает индекс в измерении 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);
//...
}

Эта функция возвращает 0, если измерение Array0 отсутствует.

rsGetArray1 : Индекс в измерении Array1 для указанного контекста ядра.

uint32_t rsGetArray1 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении Array1 обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение Array1 отсутствует.

rsGetArray2 : Индекс в измерении Array2 для указанного контекста ядра.

uint32_t rsGetArray2 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении Array2 обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение Array2 отсутствует.

rsGetArray3 : Индекс в измерении Array3 для указанного контекста ядра.

uint32_t rsGetArray3 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении Array3 обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение Array3 отсутствует.

rsGetDimArray0 : Размер измерения Array0 для указанного контекста ядра.

uint32_t rsGetDimArray0 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array0 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array0 отсутствует.

rsGetDimArray1 : размер измерения Array1 для указанного контекста ядра.

uint32_t rsGetDimArray1 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array1 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array1 отсутствует.

rsGetDimArray2 : Размер измерения Array2 для указанного контекста ядра.

uint32_t rsGetDimArray2 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array2 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array2 отсутствует.

rsGetDimArray3 : Размер измерения Array3 для указанного контекста ядра.

uint32_t rsGetDimArray3 (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Array3 для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Array3 отсутствует.

rsGetDimHasFaces : наличие более одного лица для указанного контекста ядра.

bool rsGetDimHasFaces (контекст rs_kernel_context ); Добавлено на уровне API 23.
Возврат
Возвращает true, если присутствует более одного лица, в противном случае — false.

Если ядро ​​выполняет итерацию по кубической карте, эта функция возвращает true, если присутствует более одной грани. Во всех остальных случаях он возвращает false. См. rsGetDimX () для объяснения контекста.

rsAllocationGetDimFaces () аналогичен, но возвращает 0 или 1 вместо логического значения.

rsGetDimLod : количество уровней детализации для указанного контекста ядра.

uint32_t rsGetDimLod (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает количество уровней детализации для указанного контекста ядра. Это полезно для MIP-карт. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если уровень детализации не используется.

rsAllocationGetDimLOD () аналогичен, но возвращает 0 или 1 вместо фактического количества уровней.

rsGetDimX : Размер измерения X для указанного контекста ядра.

uint32_t rsGetDimX (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения 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 ); Добавлено на уровне API 23.

Возвращает размер измерения X для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если измерение Y отсутствует.

Чтобы получить размерность конкретного распределения, используйте rsAllocationGetDimY ().

rsGetDimZ : Размер измерения Z для указанного контекста ядра.

uint32_t rsGetDimZ (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает размер измерения Z для указанного контекста ядра. См. rsGetDimX () для объяснения контекста.

Возвращает 0, если размер Z отсутствует.

Чтобы получить размерность конкретного распределения, используйте rsAllocationGetDimZ ().

rsGetFace : координата лица для указанного контекста ядра.

rs_allocation_cubemap_face rsGetFace ( rs_kernel_context context); Добавлено на уровне API 23.

Возвращает грань, на которой находится обрабатываемая ячейка, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X, если размер грани отсутствует.

rsGetLod : индекс в измерении «Уровни детализации» для указанного контекста ядра.

uint32_t rsGetLod (контекст rs_kernel_context ); Добавлено на уровне API 23.

Возвращает индекс в измерении «Уровни детализации» обрабатываемой ячейки, как указано в предоставленном контексте ядра. См. rsGetArray0 () для объяснения контекста.

Возвращает 0, если измерение «Уровни детализации» отсутствует.