ARB derleme dili - ARB assembly language

ARB montaj dili , bir montaj dili olarak nitelendirilebilecek düşük seviyeli bir gölgeleme dilidir . Donanım grafik hattını kontrol eden GPU talimatlarını standart hale getirmek için OpenGL Architecture Review Board (ARB) tarafından oluşturulmuştur .

Tarih

Texas Instruments , 1985'te ilk programlanabilir grafik işlemcisini yarattı : TMS34010 , geliştiricilerin bir video ekranında piksel çıkışını kontrol etmek için işlemciye kod yüklemelerine ve çalıştırmalarına izin verdi . Bunu 1989'da programlanabilir 3D grafik çıktısı sağlayan TMS34020 ve TMS34082 izledi.

NVIDIA , ikinci dereceden doku eşlemesini destekleyen ilk ekran kartı NV1'i 1995'te piyasaya sürdü . Bunu 1997'de Direct3D için ilk donanım hızlandırmasını sağlayan Riva 128 (NV3) izledi .

Çeşitli video kartı satıcıları, her biri GPU işlemleri için kendi talimat setine sahip kendi hızlandırılmış kartlarını piyasaya sürdü . OpenGL Mimarlık İnceleme Kurulu (ARB) standartlarını oluşturmak üzere kısmen, 1992 yılında kuruldu GPU endüstrisi.

ARB ve NVIDIA , GPU programlamayı standart hale getirmek için bir dizi OpenGL uzantısı oluşturdu:

  • EXT_texture_env_combine - dokuları birleştirmek için programlanabilir bir yöntem sağladı.
  • NV_register_combiners - GeForce 256
  • NV_vertex_programı - GeForce 3
  • NV_texture_shader - GeForce 3
  • NV_texture_shader3 - GeForce 4
  • NV_vertex_program2 - GeForce FX
  • NV_fragment_program - GeForce FX

Bu, ARB'nin 2002 sürümüyle doruğa ulaştı .

  • ARB_vertex_programı
  • ARB_fragment_programı

Bu iki uzantı , sırasıyla 3B tepe noktası ve enterpolasyonlu piksel özellikleri için GPU işlem hattını kontrol eden bir montaj dili için bir endüstri standardı sağladı .

Sonraki yüksek seviyeli gölgeleme dilleri bazen bu ARB standardına göre derlenir. 3D geliştiricilerin artık GPU programlama için C benzeri, yüksek seviyeli bir gölgeleme dili kullanma olasılığı daha yüksek olsa da , ARB derlemesi, çok çeşitli donanımlarda desteklenme avantajına sahiptir.

Bununla birlikte, döngüler ve koşullar gibi bazı özelliklerin ARB derlemesinde bulunmadığını ve bunları kullanmanın NV_gpu_program4 uzantısını veya GLSL gölgeleme dilini benimsemeyi gerektirdiğini unutmayın.

NVIDIA Geforce FX serisi , AMD R300 tabanlı kartlar (Radeon 9500 serisi ve üstü) ve Intel GMA 900'den bu yana tüm büyük grafik kartı üreticileri ARB montaj dilini yıllardır desteklemektedir . Ancak, standart ARB birleştirici dili sadece seviyesinde olan Pixel Shader 2.0 ve önceleyen GLSL çok az özelliklere sahiptir, böylece. nVidia, ARB derlemesinin hızlı derleme hızını, GeForce 8 Serisi ile sunulan modern OpenGL 3.x özellikleriyle birleştiren ARB derleme dillerine özel uzantılar yapmış olsa da, nVidia olmayan OpenGL uygulamalarının çoğu, ARB derlemesine özel nVidia uzantılarını sağlamaz. dil ve tüm gölgelendirici özelliklerine doğrudan montajda erişmenin başka bir yolunu sunmayın, bu da montajın daha uygun olacağı makine tarafından oluşturulan gölgelendiriciler için bile GLSL kullanımını zorlar.

Detaylar

ARB_vertex_programı

ARB Vertex Program uzantısı, ARBvp1.0 montaj talimatlarını yüklemek, seçilen programları etkinleştirmek ve çeşitli GPU parametrelerini ayarlamak için API'ler sağlar.

Köşe programları, bir sonraki boru hattı işlemine geçirilen konum, normaller ve doku koordinatları gibi köşe özelliklerini değiştirmek için kullanılır: genellikle bir parça gölgelendirici; daha yakın zamanda, bir geometri gölgelendiricisi.

ARB_fragment_programı

ARB Fragment Program uzantısı, ARBfp1.0 montaj talimatlarını yüklemek, seçilen programları etkinleştirmek ve çeşitli GPU parametrelerini ayarlamak için API'ler sağlar.

OpenGL parçaları enterpolasyonlu piksel tanımlarıdır. GPU'nun 'in tepe işlemci köşe bir dizi tarafından kontrol edilen tüm pikselleri hesaplar konumlarını ve diğer özelliklerini enterpolasyon ve fragmanı işlemi üzerine geçirir. Parça programları, geliştiricilerin bu piksel özelliklerini, görüntülenmek üzere bir çerçeve arabelleğine dönüştürülmeden önce değiştirmelerine olanak tanır.

OpenGL Parametreleri

  • Öznitelik parametreleri, köşe normalleri gibi köşe başına niteliklerdir.
  • Yerel parametreler, belirli bir gölgelendirici geçişi için bir programın tüm veri kümesine uygulanır.
  • Env parametreleri tüm programlara uygulanır.

ARB Değişkenleri

Tüm ARB derleme değişkenleri, xyzw veya rgba son ekleriyle adreslenebilen float4 vektörleridir.

Kayıtlar, yalnızca bir öğenin adreslenebileceği skaler değişkenlerdir.

  • ADDRESS değişkenleri kayıtlardır.
  • ATTRIB , köşe başına niteliklerdir.
  • PARAM tek tip özelliklerdir - sabitler, Env veya Yerel.
  • TEMP geçici değişkenler.
  • ALIAS , değişkenler için alternatif adlar sağlar.
  • OUTPUT , ardışık düzene geri iletilen değişkenleri belirtir.

Köşe Nitelikleri

ARB derlemesi, köşe nitelikleri için aşağıdaki son ekleri destekler:

  • konum
  • ağırlık
  • normal
  • renk
  • sis kordosu
  • texcoord
  • matris indeksi
  • nitelik

Durum Matrisleri

ARB derlemesi aşağıdaki durum matrislerini destekler:

  • model görünümü
  • projeksiyon
  • doku
  • palet
  • program

Aşağıdaki değiştiriciler kullanılabilir:

  • ters
  • devrik
  • invtrans

ARB Montaj Talimatları

ARB derlemesi aşağıdaki talimatları destekler:

  • ABS - mutlak değer
  • EKLE - ekle
  • ARL - adres kaydı yükü
  • DP3 - 3 bileşenli nokta ürün
  • DP4 - 4 bileşenli nokta ürün
  • DPH - homojen nokta çarpımı
  • DST - mesafe vektörü
  • EX2 - üstel taban 2
  • EXP - üstel taban 2 (yaklaşık)
  • FLR - zemin
  • FRC - kesir
  • LG2 - logaritma tabanı 2
  • LIT - ışık katsayılarını hesapla
  • LOG - logaritma tabanı 2 (yaklaşık)
  • MAD - çarp ve ekle
  • MAKS - maksimum
  • MIN - minimum
  • HAREKET - hareket et
  • MUL - çarpma
  • savaş esiri - üstel
  • RCP - karşılıklı
  • RSQ - karşılıklı karekök
  • SGE - büyük veya eşit olarak ayarla
  • SLT - daha azına ayarla
  • ALT - çıkarma
  • SWZ - genişletilmiş swizzle
  • TEX - Doku araması
  • XPD - çapraz ürün

Bu, montaj talimatlarının yalnızca kısmi bir listesidir; bir referans burada bulunabilir: Shader Assembly Language (ARB/NV) OpenGL için Hızlı Başvuru Kılavuzu .

ARB düzeneği, akış denetimi veya dallara ayırma için talimat sağlamaz. SGE ve SLT, vektörleri veya kayıtları koşullu olarak ayarlamak veya temizlemek için kullanılabilir.

ARB arabirimleri, derleme dili için derleme adımı sağlamaz.

GL_NV_fragment_program_option, ARB_fragment_program dilini ek talimatlarla genişletir. GL_NV_fragment_program2, GL_NV_vertex_program2_option ve GL_NV_vertex_program3 onu daha da genişletir.

Basit kod

Önemsiz bir ARB Vertex Shader örneği

!!ARBvp1.0
TEMP vertexClip;
DP4 vertexClip.x, state.matrix.mvp.row[0], vertex.position;
DP4 vertexClip.y, state.matrix.mvp.row[1], vertex.position;
DP4 vertexClip.z, state.matrix.mvp.row[2], vertex.position;
DP4 vertexClip.w, state.matrix.mvp.row[3], vertex.position;
MOV result.position, vertexClip;
MOV result.color, vertex.color;
MOV result.texcoord[0], vertex.texcoord;
END

Önemsiz bir ARB Fragment Shader örneği

!!ARBfp1.0
TEMP color;
MUL color, fragment.texcoord[0].y, 2.0;
ADD color, 1.0, -color;
ABS color, color;
ADD result.color, 1.0, -color;
MOV result.color.a, 1.0;
END

Ayrıca bakınız

Referanslar