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 = 0 | Bitişik bellek bölgelerini tercih et. |
---|---|
RS_FOR_EACH_STRATEGY_DONT_CARE = 1 | Tercih yok. |
RS_FOR_EACH_STRATEGY_DST_LINEAR = 2 | YS'yi tercih et. |
RS_FOR_EACH_STRATEGY_TILE_SMALL = 3 | Küçük dikdörtgen bölgeleri işlemeyi tercih edin. |
RS_FOR_EACH_STRATEGY_TILE_ORTA = 4 | Orta boy dikdörtgen bölgelerin işlenmesini tercih edin. |
RS_FOR_EACH_STRATEGY_TILE_LARGE = 5 | Bü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şlat | X boyutunda başlangıç dizini. |
uint32_t xEnd | X boyutunda bitiş dizini (hariç). |
uint32_t yBaşlat | Y boyutunda başlangıç dizini. |
uint32_t yEnd | Y boyutunda bitiş dizini (hariç). |
uint32_t zStart | Z boyutunda başlangıç dizini. |
uint32_t zEnd | Z boyutunda bitiş dizini (hariç). |
uint32_tArrayStart | Array0 boyutunda başlangıç dizini. |
uint32_tArrayEnd | Array0 boyutunda bitiş dizini (hariç). |
uint32_t dizi1Başlat | Dizi1 boyutunda başlangıç dizini. |
uint32_t dizi1Son | Array1 boyutundaki bitiş dizini (hariç). |
uint32_t dizi2Başlat | Dizi2 boyutundaki başlangıç dizini. |
uint32_t dizi2End | Array2 boyutundaki bitiş dizini (hariç). |
uint32_t dizi3Başlat | Array3 boyutundaki başlangıç dizini. |
uint32_t dizi3Son | Array3 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. |
output | Tarihin yazılacağı ayırma. |
usrVeri | Komut 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. |
UsrDataLen | userData 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ı |
allocs | Giriş 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çenekler | Baş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ı
rs_allocation_cubemap_face rsGetFace(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 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.