개요
rsForeach() 함수는 스크립트의 루트 커널을 호출하는 데 사용할 수 있습니다.
다른 함수는 차원 및 현재 색인과 같은 실행 중인 커널의 호출 특성을 가져오는 데 사용됩니다. 이러한 함수는 rs_kernel_context를 인수로 사용합니다.
요약
유형 | |
---|---|
각_전략을_위한_ ____ | 추천 셀 처리 순서 |
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 | 지정된 커널 컨텍스트에 2개 이상의 얼굴이 있음 |
rsGetDimLod | 지정된 커널 컨텍스트의 세부정보 수준 수 |
rsGetDimX | 지정된 커널 컨텍스트의 X 차원 크기입니다. |
rsGetDimY | 지정된 커널 컨텍스트의 Y 차원 크기 |
rsGetDimZ | 지정된 커널 컨텍스트의 Z 차원 크기 |
rsGetFace | 지정된 커널 컨텍스트의 얼굴 좌표 |
rsGetLod | 지정된 커널 컨텍스트에 대한 세부정보 수준 측정기준의 색인 |
유형
rs_for_each_strategy_t : 추천 셀 처리 순서
다음 값을 가진 enum입니다.
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 : 커널 함수의 핸들
rs_kernel_context : 커널 호출 컨텍스트에 대한 처리
typedef의 경우 const struct rs_kernel_context_t * API 수준 23에 추가되었습니다.
커널 컨텍스트에는 차원과 같이 반복되고 있는 할당의 일반적인 특성이 포함되어 있습니다. 또한 Array0 색인 또는 현재 세부정보 수준과 같이 현재 처리된 셀의 거의 사용되지 않는 색인이 포함됩니다.
커널 함수에 rs_kernel_context 유형의 특수 매개변수 '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 배열시작 | 배열0 차원의 시작 색인입니다. |
uint32_t 배열종료 | Array0 차원의 종료 색인 (제외)입니다. |
uint32_t 배열1시작 | 배열1 차원의 시작 색인입니다. |
uint32_t 배열1End | Array1 차원의 종료 색인 (제외)입니다. |
uint32_t 배열2시작 | 배열 2 차원의 시작 색인입니다. |
uint32_t 배열2End | Array2 차원의 종료 색인 (제외)입니다. |
uint32_t 배열3시작 | 배열 3 차원의 시작 색인입니다. |
uint32_t 배열3End | Array3 차원의 종료 색인 (제외)입니다. |
이 구조는 rsForeach 호출에 반복 정보를 제공하는 데 사용됩니다. 현재 셀의 하위 집합으로 처리를 제한하는 데 사용됩니다. 향후 버전에서는 셀에서 반복하는 것이 가장 좋은 방법에 관한 힌트를 제공하는 데도 사용될 예정입니다.
Start 필드는 포괄적이고 End 필드는 제외됩니다. 예를 들어 X 차원의 셀 4, 5, 6, 7을 반복하려면 xStart를 4로, xEnd를 8로 설정합니다.
함수
rsForeach : 커널을 실행합니다.
void rsForeach(rs_kernel 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 |
매개변수
스크립트 | 통화 스크립트 |
---|---|
입력 | 소스 데이터에 대한 할당입니다. |
output | 날짜를 쓸 할당입니다. |
USR 데이터 | 스크립트에 전달할 사용자가 정의한 데이터입니다. null일 수 있습니다. |
sc | 처리할 할당의 하위 지역을 선택하거나 걷기 전략을 제안하는 데 사용되는 추가 제어 정보입니다. null일 수 있습니다. |
USR 데이터렌 | userData 구조의 크기입니다. 이는 필요한 경우 데이터를 부분적으로 복사하는 데 사용됩니다. |
커널 | 커널 속성으로 정의된 함수에 대한 함수 지정자입니다. |
... | 입력 및 출력 할당 |
0개 이상의 입력 할당에 대해 커널을 실행합니다. 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에 추가되었습니다. |
매개변수
시간대 | |
---|---|
옵션 | |
hasOutput | 커널이 출력을 생성하는지 여부를 나타냅니다. |
numInputs개 | 입력 할당 수 |
할당 | 입력 및 출력 할당 |
커널을 실행하는 내부 API입니다.
rsForeachWithOptions : 옵션이 있는 커널을 실행합니다.
void rsForeachWithOptions(rs_kernel kernel, rs_script_call_t* options, ... ...); | API 수준 24에 추가되었습니다. |
매개변수
커널 | 커널 속성으로 정의된 함수에 대한 함수 지정자입니다. |
---|---|
옵션 | 실행 옵션 |
... | 입력 및 출력 할당 |
rsForeach와 유사한 방식으로 커널을 실행합니다. 하지만 이 함수는 입력의 모든 셀을 처리하는 대신 옵션에 지정된 색인 공간의 하위 공간에 있는 셀만 처리합니다. 색인 공간이 옵션에 의해 명시적으로 지정되었으므로 이 API를 사용하는 커널 실행에 입력 또는 출력 할당이 필요하지 않습니다. 할당이 전달되는 경우 할당은 인수의 수와 커널 함수에서 예상되는 반환 값과 일치해야 합니다. 커널에 비 void 반환 값이 있는 경우에만 출력 할당이 존재합니다.
예:
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); | API 수준 23에 추가되었습니다. |
제공된 커널 컨텍스트에 지정된 대로 처리 중인 셀의 Array0 차원에 있는 색인을 반환합니다.
커널 컨텍스트에는 반복 중인 할당의 일반적인 특성과 Array0 색인과 같이 거의 사용되지 않는 색인이 포함되어 있습니다.
커널 함수에 rs_kernel_context 유형의 특수 매개변수 '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); | API 수준 23에 추가되었습니다. |
제공된 커널 컨텍스트에 지정된 대로 처리 중인 셀의 Array1 차원에서 색인을 반환합니다. 컨텍스트 설명은 rsGetArray0()을 참고하세요.
배열1 차원이 없으면 0을 반환합니다.
rsGetArray2 : 지정된 커널 컨텍스트의 Array2 차원의 색인
uint32_t rsGetArray2(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
제공된 커널 컨텍스트에 지정된 대로 처리 중인 셀의 Array2 차원에서 색인을 반환합니다. 컨텍스트 설명은 rsGetArray0()을 참고하세요.
배열2 차원이 없으면 0을 반환합니다.
rsGetArray3 : 지정된 커널 컨텍스트의 Array3 차원 색인
uint32_t rsGetArray3(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
제공된 커널 컨텍스트에 지정된 대로 처리 중인 셀의 Array3 차원에서 색인을 반환합니다. 컨텍스트 설명은 rsGetArray0()을 참고하세요.
Array3 차원이 없으면 0을 반환합니다.
rsGetDimArray0 : 지정된 커널 컨텍스트의 Array0 차원 크기
uint32_t rsGetDimArray0(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 Array0 차원 크기를 반환합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
배열0 차원이 없으면 0을 반환합니다.
rsGetDimArray1 : 지정된 커널 컨텍스트의 Array1 차원 크기
uint32_t rsGetDimArray1(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 Array1 차원 크기를 반환합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
배열1 차원이 없으면 0을 반환합니다.
rsGetDimArray2 : 지정된 커널 컨텍스트의 Array2 차원 크기
uint32_t rsGetDimArray2(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 Array2 차원 크기를 반환합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
배열2 차원이 없으면 0을 반환합니다.
rsGetDimArray3 : 지정된 커널 컨텍스트의 Array3 차원 크기
uint32_t rsGetDimArray3(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 Array3 차원 크기를 반환합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
Array3 차원이 없으면 0을 반환합니다.
rsGetDimHasFaces : 지정된 커널 컨텍스트에 2개 이상의 얼굴이 있는 경우
bool rsGetDimHasFaces(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
반환 값
두 개 이상의 얼굴이 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다. |
커널이 큐브맵을 반복하는 경우 얼굴이 2개 이상 있으면 이 함수는 true를 반환합니다. 그 외 모든 경우에는 false를 반환합니다. 컨텍스트에 관한 설명은 rsGetDimX()를 참고하세요.
rsAllocationGetDimFaces()는 유사하지만 부울 대신 0 또는 1을 반환합니다.
rsGetDimLod : 지정된 커널 컨텍스트의 세부정보 수준 수
uint32_t rsGetDimLod(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 세부정보 수준 수를 반환합니다. 이는 밉맵에 유용합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
세부정보 수준이 사용되지 않으면 0을 반환합니다.
rsAllocationGetDimLOD()도 비슷하지만, 실제 레벨 수 대신 0 또는 1을 반환합니다.
rsGetDimX : 지정된 커널 컨텍스트의 X 차원 크기
uint32_t rsGetDimX(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 X 차원 크기를 반환합니다.
커널 컨텍스트에는 반복 중인 할당의 일반적인 특성과 Array0 색인과 같이 거의 사용되지 않는 색인이 포함되어 있습니다.
커널 함수에 rs_kernel_context 유형의 특수 매개변수 '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); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 X 차원 크기를 반환합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
Y 차원이 없으면 0을 반환합니다.
특정 할당의 측정기준을 가져오려면 rsAllocationGetDimY()를 사용하세요.
rsGetDimZ : 지정된 커널 컨텍스트의 Z 차원 크기
uint32_t rsGetDimZ(rs_kernel_context context); | API 수준 23에 추가되었습니다. |
지정된 커널 컨텍스트의 Z 차원 크기를 반환합니다. 컨텍스트 설명은 rsGetDimX()를 참고하세요.
Z 차원이 없으면 0을 반환합니다.
특정 할당의 차원을 가져오려면 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 context); | API 수준 23에 추가되었습니다. |
제공된 커널 컨텍스트에 지정된 대로 처리 중인 셀의 세부정보 수준 측정기준에 있는 색인을 반환합니다. 컨텍스트 설명은 rsGetArray0()을 참고하세요.
세부정보 수준 측정기준이 없으면 0을 반환합니다.