AGAL bayt kodu biçimi

AGAL bayt kodu, Endian.LITTLE_ENDIAN biçimini kullanmalıdır.

Bayt Kodu Üstbilgisi

AGAL bayt kodu 7 baytlık bir üstbilgi ile başlamalıdır.

A0 01000000 A1 00 -- for a vertex program 
A0 01000000 A1 01 -- for a fragment program

Uzaklık (bayt)

Boyut (bayt)

Ad

Açıklama

0

1

magic

0xa0 olmalıdır

1

4

sürüm

1 olmalıdır

5

1

gölgelendirici türü kimliği

0xa1 olmalıdır

6

1

gölgelendirici türü

köşe programı için 0; parça programı için 1

Belirteçler

Üstbilginin hemen arkasından herhangi bir sayıda belirteç gelir. Her belirteç 192 bit (24 bayt) boyutundadır ve her zaman şu biçime sahiptir:

[opcode][destination][source1][source2 or sampler]

Bu alanların tümünü her işlem kodu kullanmaz. Kullanılmayan alanlar 0 olarak ayarlanmalıdır.

İşlem kodları

[işlem kodu] alanı 32 bit boyutundadır ve şu değerlerden birini alabilir:

Ad

İşlem kodu

İşlem

Açıklama

mov

0x00

taşı

verileri kaynak1 öğesinden hedef öğesine bileşen yönünde taşıyın

add

0x01

add

hedef = kaynak1 + kaynak2, bileşen yönünde

sub

0x02

subtract

hedef = kaynak1 - kaynak2, bileşen yönünde

mul

0x03

çarp

hedef = kaynak1 * kaynak2, bileşen yönünde

div

0x04

böl

hedef = kaynak1 / kaynak2, bileşen yönünde

rcp

0x05

ters

hedef = 1/kaynak1, bileşen yönünde

min

0x06

minimum

hedef = minimum(kaynak1,kaynak2), bileşen yönünde

max

0x07

maximum

hedef = maksimum(kaynak1,kaynak2), bileşen yönünde

frc

0x08

kesirsel

hedef = kaynak1 - (kaydır)taban(kaynak1), bileşen yönünde

sqt

0x09

kare kök

hedef = sqrt(kaynak1), bileşen yönünde

rsq

0x0a

ters kök

hedef = 1/sqrt(kaynak1), bileşen yönünde

pow

0x0b

üssü

hedef = pow(kaynak1,kaynak2), bileşen yönünde

log

0x0c

logaritma

hedef = log_2(kaynak1), bileşen yönünde

exp

0x0d

üssel

hedef = 2^kaynak1, bileşen yönünde

nrm

0x0e

normalleştir

hedef = normalleştir(kaynak1), bileşen yönünde (yalnızca 3 bileşenli bir sonuç verir; hedef, .xyz veya daha azı olarak maskelenmelidir)

sin

0x0f

sinüs

hedef = sin(kaynak1), bileşen yönünde

cos

0x10

kosinüs

hedef = cos(kaynak1), bileşen yönünde

crs

0x11

vektörel çarpım

hedef.x = kaynak1.y * kaynak2.z - kaynak1.z * kaynak2.y

hedef.y = kaynak1.z * kaynak2.x - kaynak1.x * kaynak2.z

hedef.z = kaynak1.x * kaynak2.y - kaynak1.y * kaynak2.x

(yalnızca 3 bileşenli bir sonuç verir, hedef .xyz veya daha azı olarak maskelenmelidir)

dp3

0x12

skaler çarpım

hedef = kaynak1.x*kaynak2.x + kaynak1.y*kaynak2.y + kaynak1.z*kaynak2.z

dp4

0x13

skaler çarpım

hedef = kaynak1.x*kaynak2.x + kaynak1.y*kaynak2.y + kaynak1.z*kaynak2.z + kaynak1.w*kaynak2.w

abs

0x14

mutlak

hedef = abs(kaynak1), bileşen yönünde

neg

0x15

negatif yapma

hedef = -kaynak1, bileşen yönünde

sat

0x16

doygun hale getirme

hedef = maksimum(minimum(kaynak1,1),0), bileşen yönünde

m33

0x17

çarpma matrisi 3x3

hedef.x = (kaynak1.x * kaynak2[0].x) + (kaynak1.y * kaynak2[0].y) + (kaynak1.z *kaynak2[0].z)

hedef.y = (kaynak1.x * kaynak2[1].x) + (kaynak1.y * kaynak2[1].y) + (kaynak1.z * kaynak2[1].z)

hedef.z = (kaynak1.x * kaynak2[2].x) + (kaynak1.y * kaynak2[2].y) + (kaynak1.z * kaynak2[2].z)

(yalnızca 3 bileşenli bir sonuç verir, hedef .xyz veya daha azı olarak maskelenmelidir)

m44

0x18

çarpma matrisi 4x4

hedef.x = (kaynak1.x * kaynak2[0].x) + (kaynak1.y * kaynak2[0].y) + (kaynak1.z * kaynak2[0].z) + (kaynak1.w * kaynak2[0].w)

hedef.y = (kaynak1.x * kaynak2[1].x) + (kaynak1.y * kaynak2[1].y) + (kaynak1.z * kaynak2[1].z) + (kaynak1.w * kaynak2[1].w)

hedef.z = (kaynak1.x * kaynak2[2].x) + (kaynak1.y * kaynak2[2].y) + (kaynak1.z * kaynak2[2].z) + (kaynak1.w * kaynak2[2].w)

hedef.w = (kaynak1.x * kaynak2[3].x) + (kaynak1.y * kaynak2[3].y) + (kaynak1.z * kaynak2[3].z) + (kaynak1.w * kaynak2[3].w)

m34

0x19

çarpma matrisi 3x4

hedef.x = (kaynak1.x * kaynak2[0].x) + (kaynak1.y * kaynak2[0].y) + (kaynak1.z * kaynak2[0].z) + (kaynak1.w * kaynak2[0].w)

hedef.y = (kaynak1.x * kaynak2[1].x) + (kaynak1.y * kaynak2[1].y) + (kaynak1.z * kaynak2[1].z) + (kaynak1.w * kaynak2[1].w)

hedef.z = (kaynak1.x * kaynak2[2].x) + (kaynak1.y * kaynak2[2].y) + (kaynak1.z * kaynak2[2].z) + (kaynak1.w * kaynak2[2].w)

(yalnızca 3 bileşenli bir sonuç verir, hedef .xyz veya daha azı olarak maskelenmelidir)

kil

0x27

sonlandır/at (yalnızca parça gölgelendiricisi)

Tek skaler kaynak bileşeni sıfırdan daha düşükse, parça atılır ve çerçeve arabelleğine çizilmez. (Hedef kaydının tümü 0 olarak ayarlanmalıdır)

tex

0x28

doku örneği (yalnızca parça gölgelendiricisi)

hedef öğesi, kaynak2 öğesinden gelen yüke kaynak1 koordinatlarında eşittir. Bu durumda kaynak2 öğesi, örnekleyici biçiminde olmalıdır.

sge

0x29

büyük-eşitse-ayarla

hedef = kaynak1 >= kaynak2 ? 1 : 0, bileşen yönünde

slt

0x2a

daha-küçükse-ayarla

hedef = kaynak1 < kaynak2 ? 1 : 0, bileşen yönünde

seq

0x2c

eşitse-ayarla

hedef = kaynak1 == kaynak2 ? 1 : 0, bileşen yönünde

sne

0x2d

eşit-değilse-ayarla

hedef = kaynak1 != kaynak2 ? 1 : 0, bileşen yönünde

AGAL2'de aşağıdaki işlem kodları kullanıma sunulmuştur:

Ad

İşlem kodu

İşlem

Açıklama

ddx

0x1a

X içinde kısmi türev

Kaynak1'in X içindeki kısmi türevini hedefe yükleyin.

ddy

0x1b

Y içinde kısmi türev

Kaynak1'in Y içindeki kısmi türevini hedefe yükleyin.

ife

0x1c

eşitse

Kaynak1 ile kaynak2 eşitse atlayın.

ine

0x1d

eşit değilse

Kaynak1 ile kaynak2 eşit değilse atlayın.

ifg

0x1e

büyükse

Kaynak1 kaynak2 ile eşit veya daha büyükse atlayın.

ifl

0x1f

küçükse

Kaynak1 kaynak2'den küçükse atlayın.

els

0x20

else

Else bloğu

eif

0x21

Endif

If veya else bloğu ise kapatın.

Hedef alanı biçimi

[hedef] alanı 32 bit boyutundadır:

31.............................0 
----TTTT----MMMMNNNNNNNNNNNNNNNN

T = Kayıt türü (4 bit)

M = Yazma maskesi (4 bit)

N = Kayıt numarası (16 bit)

- = tanımsız, 0 olmalı

Kaynak alanı biçimi

[kaynak] alanı 64 bit boyutundadır:

63.............................................................0 
D-------------QQ----IIII----TTTTSSSSSSSSOOOOOOOONNNNNNNNNNNNNNNN

Doğrudan Q ve I için D = Doğrudan=0/Dolaylı=1 yoksayılır, 1 bit

Q = Dizin kaydı bileşeninin seçimi (2 bit)

I = Dizin kaydı türü (4 bit)

T = Kayıt türü (4 bit)

S = Yeniden düzenle (8 bit, bileşen başına 2 bit )

O = Dolaylı uzaklık (8 bit)

N = Kayıt numarası (16 bit)

- = tanımsız, 0 olmalı

Örnekleyici alanı biçimi

Metin işlem kodunun ikinci kaynak alanı 64 bit boyutundaki [örnekleyici] formatında olmalıdır:

63.............................................................0 
FFFFMMMMWWWWSSSSDDDD--------TTTT--------BBBBBBBBNNNNNNNNNNNNNNNN

N = Örnekleyici kayıt numarası (16 bit)

B = Doku ayrıntı seviyesinin (LOD) sapması, işaretli tamsayı, 8'e kadar ölçek. Kullanılan kayan nokta değeri b/8.0'dır (8 bit).

T = Kayıt türü, 5 olmalı, Örnekleyici (4 bit)

F = Filtre (0=en yakın,1=doğrusal) (4 bit)

M = Mipmap (0=devre dışı bırak,1=en yakın, 2=doğrusal)

W = Kaydırma (0=kıskaç,1=tekrarla)

S = Özel bayrak bit'i (0 olmalı)

D = Boyut (0=2B, 1=Küp)

Program Kayıtları

Kullanılan kayıt sayısı, kullanılan Context3D profiline bağlıdır. Kullanımlarıyla birlikte kayıt sayısı aşağıdaki tabloda tanımlanmıştır:

Ad

Değer

AGAL

AGAL2

AGAL3

Kullanım

Parça programı başına sayı

Köşe programı başına sayı

Parça programı başına sayı

Köşe programı başına sayı

Parça programı başına sayı

Köşe programı başına sayı

Context 3D Profilleri Desteği

Standardın Altında

Standart

Genişletilmiş Standart

SWF sürümü

25'in altında

25

28 ve üzeri

Nitelik

0

Yok

8

Yok

8

Yok

16

Köşe gölgelendirici girdisi; Context3D.setVertexBufferAt() öğesini kullanarak belirtilen köşe arabelleğinden okuma.

Sabit

1

28

128

64

250

200

250

Gölgelendirici girdisi; işlevlerin Context3D.setProgramConstants() ailesini kullanarak ayarlama.

Geçici

2

8

8

26

26

26

26

Programın dışından erişilmeyen geçici hesaplama kaydı.

Çıktı

3

1

1

1

1

1

1

Gölgelendirici çıktısı: çıktı, köşe programında klip alanı konumudur; parça programında ise renktir.

Çeşitli

4

8

8

10

10

10

10

Köşe ve parça gölgelendiriciler arasındaki ara enterpolasyonlu verileri aktarma. Köşe programında değişkenlik gösteren kayıtlar, parça programına girdi olarak uygulanır. Değerler, üçgen köşe noktalarından olan uzaklığa göre enterpolasyonlanır.

Örnekleyici

5

8

Yok

16

Yok

16

Yok

Parça gölgelendirici girdisi; Context3D.setTextureAt() öğesini kullanarak belirtilen dokudan okuma.

Parça kaydı

6

Yok

Yok

1

Yok

1

Yok

Salt yazılır niteliktedir ve köşe gölgelendiriciye yazılmış z değerini (veya derinlik değerini) yeniden yazmak için kullanılır.

Belirteçler

200

1024

2048

En son AGAL Mini Assembler burada bulunabilir.