RenderScript Kernel Çağrı İşlevleri ve Türleri

Genel bakış

rsForHer() işlevi bir komut dosyasının kök çekirdeğini çağırmak için kullanılabilir.

Diğer işlevler, çalışan çekirdeğin çağrılmasıyla ilgili boyutlar ve mevcut dizinler gibi özellikleri elde etmek için kullanılır. Bu işlevler, bağımsız değişken olarak bir rs_kernel_context değerini alır.

Özet

Türler
her_strateji_için_destek Önerilen hücre işleme sırası
rs_kernel Çekirdek işlevini işleme
rs_kernel_context Çekirdek çağrı bağlamını işleyin
rs_script_call_t Hücre yineleme bilgileri
Fonksiyonlar
rsForHer Çekirdek başlatır
rsForHerDahili (Dahili API) Mevcut komut dosyasında bir çekirdeği başlatın (yuva numarasıyla)
rsForEveryWithOptions Seçeneklerle bir çekirdeği başlatır
rsGetArray0 Belirtilen çekirdek bağlamı için Array0 boyutundaki dizin
rsGetArray1 Belirtilen çekirdek bağlamı için Array1 boyutundaki dizin
rsGetArray2 Belirtilen çekirdek bağlamı için Array2 boyutundaki dizin
rsGetArray3 Belirtilen çekirdek bağlamı için Array3 boyutundaki dizin
rsGetDimArray0 Belirtilen çekirdek bağlamı için Array0 boyutunun boyutu
rsGetDimArray1 Belirtilen çekirdek bağlamı için Array1 boyutunun boyutu
rsGetDimArray2 Belirtilen çekirdek bağlamı için Array2 boyutunun boyutu
rsGetDimArray3 Belirtilen çekirdek bağlamı için Array3 boyutunun boyutu
rsGetDimHasFaces Belirtilen çekirdek bağlamı için birden fazla yüz bulunması
rsGetDimLod Belirtilen çekirdek bağlamı için ayrıntı düzeyi sayısı
rsGetDimX Belirtilen çekirdek bağlamı için X boyutunun boyutu
rsGetDimY Belirtilen çekirdek bağlamı için Y boyutunun boyutu
rsGetDimZ Belirtilen çekirdek bağlamı için Z boyutunun boyutu
rsGetFace Belirtilen çekirdek bağlamı için Yüzün koordinatı
rsGetLod Belirtilen çekirdek bağlamı için Ayrıntı Düzeyleri boyutundaki dizin

Türler

rs_for_each_strategy_t : Önerilen hücre işleme sırası

Aşağıdaki değerlere sahip bir enum:     

RS_FOR_EACH_STRATEGY_SERIAL = 0Bitişik bellek bölgelerini tercih et.
RS_FOR_EACH_STRATEGY_DONT_CARE = 1Tercih yok.
RS_FOR_EACH_STRATEGY_DST_LINEAR = 2YS'yi tercih et.
RS_FOR_EACH_STRATEGY_TILE_SMALL = 3Küçük dikdörtgen bölgeleri işlemeyi tercih edin.
RS_FOR_EACH_STRATEGY_TILE_ORTA = 4Orta boy dikdörtgen bölgelerin işlenmesini tercih edin.
RS_FOR_EACH_STRATEGY_TILE_LARGE = 5Büyük dikdörtgen bölgeleri işlemeyi tercih edin.

Bu tür, çağrılan çekirdeğin ayırma hücreleri üzerinde nasıl iterasyon yapması gerektiğini önermek için kullanılır. Bu yalnızca bir ipucudur. Uygulamalar öneriye uymayabilir.

Bu spesifikasyon, çalışan çekirdeğin önbelleğe alma davranışına (ör. işlem birden çok çekirdeğe dağıtıldığında önbellek konumu) yardımcı olabilir.

rs_kernel : Çekirdek işlevini işleme

Bir typedef: void*     API düzeyi 24'e eklendi

Çekirdek özelliğiyle tanımlanmış bir işlevin opak türü. Bu tür bir değer, çekirdeği başlatmak için bir rsForEvery çağrısında kullanılabilir.

rs_kernel_context : Çekirdek çağrı bağlamını işleyin

A typedef of: Cont struct rs_kernel_context_t *     API düzeyi 23'te eklendi

Çekirdek bağlamı, yineleme sırasında yapılan ayırmaların ortak özelliklerini (ör. boyutlar) içerir. Ayrıca, şu anda işlenmiş olan hücrenin Dizi0 dizini veya mevcut ayrıntı düzeyi gibi nadiren kullanılan dizinlerini de içerir.

Çekirdek işlevinize rs_kernel_context türünde "context" adlı özel bir parametre ekleyerek çekirdek içeriğine erişebilirsiniz. Örnekler için rsGetDimX() ve rsGetArray0() işlevlerine bakın.

rs_script_call_t : Hücre yineleme bilgisi

Aşağıdaki alanlara sahip bir yapı:     

rs_for_each_strategy_t stratejisiŞu anda yoksayılmış durumda. Gelecekte hücre yineleme stratejisi önerilecektir.
uint32_t xBaşlatX boyutunda başlangıç dizini.
uint32_t xEndX boyutunda bitiş dizini (hariç).
uint32_t yBaşlatY boyutunda başlangıç dizini.
uint32_t yEndY boyutunda bitiş dizini (hariç).
uint32_t zStartZ boyutunda başlangıç dizini.
uint32_t zEndZ boyutunda bitiş dizini (hariç).
uint32_tArrayStartArray0 boyutunda başlangıç dizini.
uint32_tArrayEndArray0 boyutunda bitiş dizini (hariç).
uint32_t dizi1BaşlatDizi1 boyutunda başlangıç dizini.
uint32_t dizi1SonArray1 boyutundaki bitiş dizini (hariç).
uint32_t dizi2BaşlatDizi2 boyutundaki başlangıç dizini.
uint32_t dizi2EndArray2 boyutundaki bitiş dizini (hariç).
uint32_t dizi3BaşlatArray3 boyutundaki başlangıç dizini.
uint32_t dizi3SonArray3 boyutundaki bitiş dizini (hariç).

Bu yapı, rsForEvery çağrısına yineleme bilgileri sağlamak için kullanılır. Şu anda işlemeyi bir hücre alt kümesiyle kısıtlamak için kullanılmaktadır. Gelecekteki sürümlerde, hücreler üzerinde en iyi iterasyonun nasıl yapılacağıyla ilgili ipuçları sağlamak için de kullanılacaktır.

Başlangıç alanları kapsayıcıdır, Bitiş alanları ise özeldir. Örneğin, X boyutunda 4, 5, 6 ve 7 hücrelerinin üzerinden tekrar atmak için xStart değerini 4, xEnd değerini ise 8 olarak ayarlayın.

Fonksiyonlar

rsForHer : Çekirdek başlatır

void rsForHer(rs_kernel çekirdeği, ... ...); API düzeyi 24'te eklendi
void rsForHer(rs_script komut dosyası, rs_allocation girişi, rs_allocation çıkışı); API düzeyi 14-23
void rsForEvery(rs_script komut dosyası, rs_allocation girişi, rs_allocation çıkışı, costt void* usrData); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
void rsForEvery(rs_script komut dosyası, rs_allocation girişi, rs_allocation çıkışı, costt void* usrData, tutarlı rs_script_call_t* sc); API düzeyi 14 ve sonraki sürümlerden kaldırıldı
void rsForEvery(rs_script komut dosyası, rs_allocation girişi, rs_allocation çıkışı, costt void* usrData, size_t usrDataLen); API düzeyi 14-20
void rsForEvery(rs_script komut dosyası, rs_allocation girişi, rs_allocation çıkışı, costt void* usrData, size_t usrDataLen, tutarlı rs_script_call_t* sc); API düzeyi 14-20
Parametreler
komut dosyasıÇağrı yapılacak komut dosyası.
girişKaynak verilerin alınacağı ayırma.
outputTarihin yazılacağı ayırma.
usrVeriKomut dosyasına iletilecek kullanıcı tanımlı veriler. BOŞ olabilir.
sİşlenecek tahsisin alt bölgesini seçmek veya yürüme stratejisi önermek için kullanılan ekstra kontrol bilgileri. BOŞ olabilir.
UsrDataLenuserData yapısının boyutu. Bu, gerekirse verilerin yüzeysel bir kopyasını oluşturmak için kullanılır.
çekirdekÇekirdek özelliğiyle tanımlanmış bir işlevin işlev tanımlayıcısı.
...Giriş ve çıkış ayırmaları

Çekirdeği sıfır veya daha fazla giriş ayırmada çalıştırır. Bunlar, rs_kernel bağımsız değişkeninden sonra iletilir. Belirtilen çekirdek bir değer döndürürse son bağımsız değişken olarak bir çıkış tahsisi belirtilmelidir. Tüm giriş ayırmaları ve varsa çıkış paylaştırma aynı boyutlara sahip olmalıdır.

Bu eşzamanlı bir işlevdir. Bu işleve yapılan bir çağrı, yalnızca giriş ayırmaların tüm hücreleriyle ilgili tüm çalışma tamamlandıktan sonra döndürülür. Çekirdek işlevi herhangi bir değer döndürürse çağrı, çıkış atamasına tüm sonuçlar yazılana kadar bekler.

API düzeyi 23'e kadar çekirdek, belirtilen komut dosyasında "root" adlı çekirdek olarak belirtilir ve yalnızca tek bir giriş tahsisi kullanılabilir. API düzeyi 24'ten itibaren, çekirdek bağımsız değişkeninde belirtildiği gibi rastgele bir çekirdek işlevi kullanılabilir. Komut dosyası bağımsız değişkeni kaldırıldı. Çekirdek, mevcut komut dosyasında tanımlanmalıdır. Ayrıca, birden fazla giriş kullanılabilir.

Ör.
float __attribute__((kernel)) square(float a) {
  return a * a;
}

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

rsForHerInternal : (Dahili API) Mevcut komut dosyasında bir çekirdeği başlatın (alan numarasıyla)

void rsForEveryInternal(int slot, rs_script_call_t* seçenekleri, int hasExit, int numInputs, rs_allocation* allocs); API düzeyi 24'te eklendi
Parametreler
zaman aralığı : aralık
seçenekler
hasÇıkışÇekirdeğin çıkış oluşturup oluşturmadığını belirtir
Giriş sayısıGiriş ayırma sayısı
allocsGiriş ve çıkış ayırmaları

Çekirdeği başlatmak için dahili API.

rsForEveryWithOptions : Seçeneklerle bir çekirdeği başlatır

void rsForEveryWithOptions(rs_kernel çekirdeği, rs_script_call_t* seçenekleri, ... ...); API düzeyi 24'te eklendi
Parametreler
çekirdekÇekirdek özelliğiyle tanımlanmış bir işlevin işlev tanımlayıcısı.
seçeneklerBaşlatma seçenekleri
...Giriş ve çıkış ayırmaları

Çekirdeği rsForHer'e benzer bir şekilde başlatır. Ancak bu işlev, girişteki tüm hücreleri işlemek yerine yalnızca seçeneklerde belirtilen dizin alanının alt alanındaki hücreleri işler. Dizin alanı seçeneklerle açıkça belirtildiğinde, bu API'yi kullanan çekirdek lansmanı için giriş veya çıkış tahsisi gerekmez. Ayırmalar aktarılırsa çekirdek işlevinin beklediği bağımsız değişken sayısı ve döndürdüğü değer ile eşleşmelidir. Çıktı tahsisi, yalnızca çekirdeğin geçersiz olmayan bir dönüş değeri varsa geçerlidir.

Ör.
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 : Belirtilen çekirdek bağlamı için Array0 boyutundaki dizin

uint32_t rsGetArray0(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Sağlanan çekirdek bağlamı tarafından belirtilen, işlenmekte olan hücrenin Array0 boyutundaki dizini döndürür.

Çekirdek bağlamı, yinelemeleri yapılan ayırmaların ve Dizi0 dizini gibi nadiren kullanılan dizinlerin ortak özelliklerini içerir.

Çekirdek işlevinize rs_kernel_context türünde "context" adlı özel bir parametre ekleyerek çekirdek içeriğine erişebilirsiniz. Ör.
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);
  //...
}

Dizi0 boyutu yoksa bu işlev 0 değerini döndürür.

rsGetArray1 : Belirtilen çekirdek bağlamı için Array1 boyutundaki dizin

uint32_t rsGetArray1(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Sağlanan çekirdek bağlamı tarafından belirtilen, işlenmekte olan hücrenin Dizi1 boyutundaki dizini döndürür. Bağlamın açıklaması için rsGetArray0() politikasına bakın.

Dizi1 boyutu mevcut değilse 0 değerini döndürür.

rsGetArray2 : Belirtilen çekirdek bağlamı için Array2 boyutundaki dizin

uint32_t rsGetArray2(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Sağlanan çekirdek bağlamı tarafından belirtildiği gibi, işlenmekte olan hücrenin Dizi2 boyutundaki dizini döndürür. Bağlamın açıklaması için rsGetArray0() politikasına bakın.

Dizi2 boyutu mevcut değilse 0 değerini döndürür.

rsGetArray3 : Belirtilen çekirdek bağlamı için Array3 boyutundaki dizin

uint32_t rsGetArray3(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Sağlanan çekirdek bağlamı tarafından belirtilen, işlenmekte olan hücrenin Array3 boyutundaki dizini döndürür. Bağlamın açıklaması için rsGetArray0() politikasına bakın.

Dizi3 boyutu mevcut değilse 0 değerini döndürür.

rsGetDimArray0 : Belirtilen çekirdek bağlamı için Array0 boyutunun boyutu

uint32_t rsGetDimArray0(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için Array0 boyutunun boyutunu döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Dizi0 boyutu mevcut değilse 0 değerini döndürür.

rsGetDimArray1 : Belirtilen çekirdek bağlamı için Array1 boyutunun boyutu

uint32_t rsGetDimArray1(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için Array1 boyutunun boyutunu döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Dizi1 boyutu mevcut değilse 0 değerini döndürür.

rsGetDimArray2 : Belirtilen çekirdek bağlamı için Array2 boyutunun boyutu

uint32_t rsGetDimArray2(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için Array2 boyutunun boyutunu döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Dizi2 boyutu mevcut değilse 0 değerini döndürür.

rsGetDimArray3 : Belirtilen çekirdek bağlamı için Array3 boyutunun boyutu

uint32_t rsGetDimArray3(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için Array3 boyutunun boyutunu döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Dizi3 boyutu mevcut değilse 0 değerini döndürür.

rsGetDimHasFaces : Belirtilen çekirdek bağlamı için birden fazla yüzün varlığı

bool rsGetDimHasFaces(rs_kernel_context bağlamı); API düzeyi 23'te eklendi
İlerlemeler
Birden fazla yüz varsa true (doğru), değilse false (yanlış) değerini döndürür.

Çekirdek bir cubemap üzerinde yineleniyorsa birden fazla yüz varsa bu işlev doğru değerini döndürür. Diğer tüm durumlarda false değerini döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

rsAllocationGetDimFaces() benzerdir ancak Boole yerine 0 veya 1 döndürür.

rsGetDimLod : Belirtilen çekirdek bağlamı için ayrıntı düzeyi sayısı

uint32_t rsGetDimLod(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için ayrıntı düzeyi sayısını döndürür. Bu, mipmaps için yararlı bir özelliktir. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Ayrıntı Düzeyi kullanılmazsa 0 sonucunu döndürür.

rsAllocationGetDimLOD() benzerdir ancak 0 veya 1 değerini döndürür. Bunun yerine gerçek düzey sayısı döndürülür.

rsGetDimX : Belirtilen çekirdek bağlamı için X boyutunun boyutu

uint32_t rsGetDimX(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için X boyutunun boyutunu döndürür.

Çekirdek bağlamı, yinelemeleri yapılan ayırmaların ve Dizi0 dizini gibi nadiren kullanılan dizinlerin ortak özelliklerini içerir.

Çekirdek işlevinize rs_kernel_context türünde "context" adlı özel bir parametre ekleyerek erişebilirsiniz. Ör.
int4 RS_KERNEL myKernel(int4 value, rs_kernel_context context) {
  uint32_t size = rsGetDimX(context); //...

Belirli bir ayırmanın boyutunu almak için rsAllocationGetDimX() işlevini kullanın.

rsGetDimY : Belirtilen çekirdek bağlamı için Y boyutunun boyutu

uint32_t rsGetDimY(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için X boyutunun boyutunu döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Y boyutu yoksa 0 değerini döndürür.

Belirli ayırmanın boyutunu almak için rsAllocationGetDimY() işlevini kullanın.

rsGetDimZ : Belirtilen çekirdek bağlamı için Z boyutunun boyutu

uint32_t rsGetDimZ(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Belirtilen çekirdek bağlamı için Z boyutunun boyutunu döndürür. Bağlamın açıklaması için rsGetDimX() yöntemine bakın.

Z boyutu yoksa 0 değerini döndürür.

Belirli ayırmanın boyutunu almak için rsAllocationGetDimZ() işlevini kullanın.

rsGetFace : Belirtilen çekirdek bağlamı için Yüzün koordinatı

Sağlanan çekirdek bağlamı tarafından belirtildiği gibi, işlenmekte olan hücrenin bulunduğu yüzü döndürür. Bağlamın açıklaması için rsGetArray0() politikasına bakın.

Yüz boyutu mevcut değilse RS_ALLOCATION_CUBEMAP_FACE_POSITIVE_X değerini döndürür.

rsGetLod : Belirtilen çekirdek bağlamı için Ayrıntı Düzeyleri boyutundaki dizin

uint32_t rsGetLod(rs_kernel_context bağlamı); API düzeyi 23'te eklendi

Sağlanan çekirdek bağlamı tarafından belirtildiği gibi, işlenmekte olan hücrenin Ayrıntı Düzeyleri boyutundaki dizini döndürür. Bağlamın açıklaması için rsGetArray0() öğesine bakın.

Ayrıntı Düzeyleri boyutu mevcut değilse 0 değerini döndürür.