| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271 |
- TGSI
- ====
-
- TGSI, Tungsten Graphics Shader Infrastructure, is an intermediate language
- for describing shaders. Since Gallium is inherently shaderful, shaders are
- an important part of the API. TGSI is the only intermediate representation
- used by all drivers.
-
- Instruction Set
- ---------------
-
- From GL_NV_vertex_program
- ^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- ARL - Address Register Load
-
- .. math::
-
- dst.x = \lfloor src.x\rfloor
-
- dst.y = \lfloor src.y\rfloor
-
- dst.z = \lfloor src.z\rfloor
-
- dst.w = \lfloor src.w\rfloor
-
-
- MOV - Move
-
- .. math::
-
- dst.x = src.x
-
- dst.y = src.y
-
- dst.z = src.z
-
- dst.w = src.w
-
-
- LIT - Light Coefficients
-
- .. math::
-
- dst.x = 1
-
- dst.y = max(src.x, 0)
-
- dst.z = (src.x > 0) ? max(src.y, 0)^{clamp(src.w, -128, 128))} : 0
-
- dst.w = 1
-
-
- RCP - Reciprocal
-
- .. math::
-
- dst.x = \frac{1}{src.x}
-
- dst.y = \frac{1}{src.x}
-
- dst.z = \frac{1}{src.x}
-
- dst.w = \frac{1}{src.x}
-
-
- RSQ - Reciprocal Square Root
-
- .. math::
-
- dst.x = \frac{1}{\sqrt{|src.x|}}
-
- dst.y = \frac{1}{\sqrt{|src.x|}}
-
- dst.z = \frac{1}{\sqrt{|src.x|}}
-
- dst.w = \frac{1}{\sqrt{|src.x|}}
-
-
- EXP - Approximate Exponential Base 2
-
- .. math::
-
- dst.x = 2^{\lfloor src.x\rfloor}
-
- dst.y = src.x - \lfloor src.x\rfloor
-
- dst.z = 2^{src.x}
-
- dst.w = 1
-
-
- LOG - Approximate Logarithm Base 2
-
- .. math::
-
- dst.x = \lfloor\log_2{|src.x|}\rfloor
-
- dst.y = \frac{|src.x|}{2^{\lfloor\log_2{|src.x|}\rfloor}}
-
- dst.z = \log_2{|src.x|}
-
- dst.w = 1
-
-
- MUL - Multiply
-
- .. math::
-
- dst.x = src0.x \times src1.x
-
- dst.y = src0.y \times src1.y
-
- dst.z = src0.z \times src1.z
-
- dst.w = src0.w \times src1.w
-
-
- ADD - Add
-
- .. math::
-
- dst.x = src0.x + src1.x
-
- dst.y = src0.y + src1.y
-
- dst.z = src0.z + src1.z
-
- dst.w = src0.w + src1.w
-
-
- DP3 - 3-component Dot Product
-
- .. math::
-
- dst.x = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
-
- dst.y = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
-
- dst.z = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
-
- dst.w = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z
-
-
- DP4 - 4-component Dot Product
-
- .. math::
-
- dst.x = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
-
- dst.y = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
-
- dst.z = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
-
- dst.w = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src0.w \times src1.w
-
-
- DST - Distance Vector
-
- .. math::
-
- dst.x = 1
-
- dst.y = src0.y \times src1.y
-
- dst.z = src0.z
-
- dst.w = src1.w
-
-
- MIN - Minimum
-
- .. math::
-
- dst.x = min(src0.x, src1.x)
-
- dst.y = min(src0.y, src1.y)
-
- dst.z = min(src0.z, src1.z)
-
- dst.w = min(src0.w, src1.w)
-
-
- MAX - Maximum
-
- .. math::
-
- dst.x = max(src0.x, src1.x)
-
- dst.y = max(src0.y, src1.y)
-
- dst.z = max(src0.z, src1.z)
-
- dst.w = max(src0.w, src1.w)
-
-
- SLT - Set On Less Than
-
- .. math::
-
- dst.x = (src0.x < src1.x) ? 1 : 0
-
- dst.y = (src0.y < src1.y) ? 1 : 0
-
- dst.z = (src0.z < src1.z) ? 1 : 0
-
- dst.w = (src0.w < src1.w) ? 1 : 0
-
-
- SGE - Set On Greater Equal Than
-
- .. math::
-
- dst.x = (src0.x >= src1.x) ? 1 : 0
-
- dst.y = (src0.y >= src1.y) ? 1 : 0
-
- dst.z = (src0.z >= src1.z) ? 1 : 0
-
- dst.w = (src0.w >= src1.w) ? 1 : 0
-
-
- MAD - Multiply And Add
-
- .. math::
-
- dst.x = src0.x \times src1.x + src2.x
-
- dst.y = src0.y \times src1.y + src2.y
-
- dst.z = src0.z \times src1.z + src2.z
-
- dst.w = src0.w \times src1.w + src2.w
-
-
- SUB - Subtract
-
- .. math::
-
- dst.x = src0.x - src1.x
-
- dst.y = src0.y - src1.y
-
- dst.z = src0.z - src1.z
-
- dst.w = src0.w - src1.w
-
-
- LRP - Linear Interpolate
-
- .. math::
-
- dst.x = src0.x \times src1.x + (1 - src0.x) \times src2.x
-
- dst.y = src0.y \times src1.y + (1 - src0.y) \times src2.y
-
- dst.z = src0.z \times src1.z + (1 - src0.z) \times src2.z
-
- dst.w = src0.w \times src1.w + (1 - src0.w) \times src2.w
-
-
- CND - Condition
-
- .. math::
-
- dst.x = (src2.x > 0.5) ? src0.x : src1.x
-
- dst.y = (src2.y > 0.5) ? src0.y : src1.y
-
- dst.z = (src2.z > 0.5) ? src0.z : src1.z
-
- dst.w = (src2.w > 0.5) ? src0.w : src1.w
-
-
- DP2A - 2-component Dot Product And Add
-
- .. math::
-
- dst.x = src0.x \times src1.x + src0.y \times src1.y + src2.x
-
- dst.y = src0.x \times src1.x + src0.y \times src1.y + src2.x
-
- dst.z = src0.x \times src1.x + src0.y \times src1.y + src2.x
-
- dst.w = src0.x \times src1.x + src0.y \times src1.y + src2.x
-
-
- FRAC - Fraction
-
- .. math::
-
- dst.x = src.x - \lfloor src.x\rfloor
-
- dst.y = src.y - \lfloor src.y\rfloor
-
- dst.z = src.z - \lfloor src.z\rfloor
-
- dst.w = src.w - \lfloor src.w\rfloor
-
-
- CLAMP - Clamp
-
- .. math::
-
- dst.x = clamp(src0.x, src1.x, src2.x)
-
- dst.y = clamp(src0.y, src1.y, src2.y)
-
- dst.z = clamp(src0.z, src1.z, src2.z)
-
- dst.w = clamp(src0.w, src1.w, src2.w)
-
-
- FLR - Floor
-
- This is identical to ARL.
-
- .. math::
-
- dst.x = \lfloor src.x\rfloor
-
- dst.y = \lfloor src.y\rfloor
-
- dst.z = \lfloor src.z\rfloor
-
- dst.w = \lfloor src.w\rfloor
-
-
- ROUND - Round
-
- .. math::
-
- dst.x = round(src.x)
-
- dst.y = round(src.y)
-
- dst.z = round(src.z)
-
- dst.w = round(src.w)
-
-
- EX2 - Exponential Base 2
-
- .. math::
-
- dst.x = 2^{src.x}
-
- dst.y = 2^{src.x}
-
- dst.z = 2^{src.x}
-
- dst.w = 2^{src.x}
-
-
- LG2 - Logarithm Base 2
-
- .. math::
-
- dst.x = \log_2{src.x}
-
- dst.y = \log_2{src.x}
-
- dst.z = \log_2{src.x}
-
- dst.w = \log_2{src.x}
-
-
- POW - Power
-
- .. math::
-
- dst.x = src0.x^{src1.x}
-
- dst.y = src0.x^{src1.x}
-
- dst.z = src0.x^{src1.x}
-
- dst.w = src0.x^{src1.x}
-
- XPD - Cross Product
-
- .. math::
-
- dst.x = src0.y \times src1.z - src1.y \times src0.z
-
- dst.y = src0.z \times src1.x - src1.z \times src0.x
-
- dst.z = src0.x \times src1.y - src1.x \times src0.y
-
- dst.w = 1
-
-
- ABS - Absolute
-
- .. math::
-
- dst.x = |src.x|
-
- dst.y = |src.y|
-
- dst.z = |src.z|
-
- dst.w = |src.w|
-
-
- RCC - Reciprocal Clamped
-
- XXX cleanup on aisle three
-
- .. math::
-
- dst.x = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
-
- dst.y = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
-
- dst.z = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
-
- dst.w = (1 / src.x) > 0 ? clamp(1 / src.x, 5.42101e-020, 1.884467e+019) : clamp(1 / src.x, -1.884467e+019, -5.42101e-020)
-
-
- DPH - Homogeneous Dot Product
-
- .. math::
-
- dst.x = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
-
- dst.y = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
-
- dst.z = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
-
- dst.w = src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z + src1.w
-
-
- COS - Cosine
-
- .. math::
-
- dst.x = \cos{src.x}
-
- dst.y = \cos{src.x}
-
- dst.z = \cos{src.x}
-
- dst.w = \cos{src.x}
-
-
- DDX - Derivative Relative To X
-
- .. math::
-
- dst.x = partialx(src.x)
-
- dst.y = partialx(src.y)
-
- dst.z = partialx(src.z)
-
- dst.w = partialx(src.w)
-
-
- DDY - Derivative Relative To Y
-
- .. math::
-
- dst.x = partialy(src.x)
-
- dst.y = partialy(src.y)
-
- dst.z = partialy(src.z)
-
- dst.w = partialy(src.w)
-
-
- KILP - Predicated Discard
-
- discard
-
-
- PK2H - Pack Two 16-bit Floats
-
- TBD
-
-
- PK2US - Pack Two Unsigned 16-bit Scalars
-
- TBD
-
-
- PK4B - Pack Four Signed 8-bit Scalars
-
- TBD
-
-
- PK4UB - Pack Four Unsigned 8-bit Scalars
-
- TBD
-
-
- RFL - Reflection Vector
-
- .. math::
-
- dst.x = 2 \times (src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z) / (src0.x \times src0.x + src0.y \times src0.y + src0.z \times src0.z) \times src0.x - src1.x
-
- dst.y = 2 \times (src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z) / (src0.x \times src0.x + src0.y \times src0.y + src0.z \times src0.z) \times src0.y - src1.y
-
- dst.z = 2 \times (src0.x \times src1.x + src0.y \times src1.y + src0.z \times src1.z) / (src0.x \times src0.x + src0.y \times src0.y + src0.z \times src0.z) \times src0.z - src1.z
-
- dst.w = 1
-
- Considered for removal.
-
-
- SEQ - Set On Equal
-
- .. math::
-
- dst.x = (src0.x == src1.x) ? 1 : 0
- dst.y = (src0.y == src1.y) ? 1 : 0
- dst.z = (src0.z == src1.z) ? 1 : 0
- dst.w = (src0.w == src1.w) ? 1 : 0
-
-
- SFL - Set On False
-
- .. math::
-
- dst.x = 0
- dst.y = 0
- dst.z = 0
- dst.w = 0
-
- Considered for removal.
-
- SGT - Set On Greater Than
-
- .. math::
-
- dst.x = (src0.x > src1.x) ? 1 : 0
- dst.y = (src0.y > src1.y) ? 1 : 0
- dst.z = (src0.z > src1.z) ? 1 : 0
- dst.w = (src0.w > src1.w) ? 1 : 0
-
-
- SIN - Sine
-
- .. math::
-
- dst.x = \sin{src.x}
-
- dst.y = \sin{src.x}
-
- dst.z = \sin{src.x}
-
- dst.w = \sin{src.x}
-
-
- SLE - Set On Less Equal Than
-
- .. math::
-
- dst.x = (src0.x <= src1.x) ? 1 : 0
- dst.y = (src0.y <= src1.y) ? 1 : 0
- dst.z = (src0.z <= src1.z) ? 1 : 0
- dst.w = (src0.w <= src1.w) ? 1 : 0
-
-
- SNE - Set On Not Equal
-
- .. math::
-
- dst.x = (src0.x != src1.x) ? 1 : 0
- dst.y = (src0.y != src1.y) ? 1 : 0
- dst.z = (src0.z != src1.z) ? 1 : 0
- dst.w = (src0.w != src1.w) ? 1 : 0
-
-
- STR - Set On True
-
- .. math::
-
- dst.x = 1
- dst.y = 1
- dst.z = 1
- dst.w = 1
-
-
- TEX - Texture Lookup
-
- TBD
-
-
- TXD - Texture Lookup with Derivatives
-
- TBD
-
-
- TXP - Projective Texture Lookup
-
- TBD
-
-
- UP2H - Unpack Two 16-Bit Floats
-
- TBD
-
- Considered for removal.
-
- UP2US - Unpack Two Unsigned 16-Bit Scalars
-
- TBD
-
- Considered for removal.
-
- UP4B - Unpack Four Signed 8-Bit Values
-
- TBD
-
- Considered for removal.
-
- UP4UB - Unpack Four Unsigned 8-Bit Scalars
-
- TBD
-
- Considered for removal.
-
- X2D - 2D Coordinate Transformation
-
- .. math::
-
- dst.x = src0.x + src1.x \times src2.x + src1.y \times src2.y
- dst.y = src0.y + src1.x \times src2.z + src1.y \times src2.w
- dst.z = src0.x + src1.x \times src2.x + src1.y \times src2.y
- dst.w = src0.y + src1.x \times src2.z + src1.y \times src2.w
-
- Considered for removal.
-
-
- From GL_NV_vertex_program2
- ^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- ARA - Address Register Add
-
- TBD
-
- Considered for removal.
-
- ARR - Address Register Load With Round
-
- .. math::
-
- dst.x = round(src.x)
-
- dst.y = round(src.y)
-
- dst.z = round(src.z)
-
- dst.w = round(src.w)
-
-
- BRA - Branch
-
- pc = target
-
- Considered for removal.
-
- CAL - Subroutine Call
-
- push(pc)
- pc = target
-
-
- RET - Subroutine Call Return
-
- pc = pop()
-
- Potential restrictions:
- * Only occurs at end of function.
-
- SSG - Set Sign
-
- .. math::
-
- dst.x = (src.x > 0) ? 1 : (src.x < 0) ? -1 : 0
-
- dst.y = (src.y > 0) ? 1 : (src.y < 0) ? -1 : 0
-
- dst.z = (src.z > 0) ? 1 : (src.z < 0) ? -1 : 0
-
- dst.w = (src.w > 0) ? 1 : (src.w < 0) ? -1 : 0
-
-
- CMP - Compare
-
- .. math::
-
- dst.x = (src0.x < 0) ? src1.x : src2.x
-
- dst.y = (src0.y < 0) ? src1.y : src2.y
-
- dst.z = (src0.z < 0) ? src1.z : src2.z
-
- dst.w = (src0.w < 0) ? src1.w : src2.w
-
-
- KIL - Conditional Discard
-
- .. math::
-
- if (src.x < 0 || src.y < 0 || src.z < 0 || src.w < 0)
- discard
- endif
-
-
- SCS - Sine Cosine
-
- .. math::
-
- dst.x = \cos{src.x}
-
- dst.y = \sin{src.x}
-
- dst.z = 0
-
- dst.y = 1
-
-
- TXB - Texture Lookup With Bias
-
- TBD
-
-
- NRM - 3-component Vector Normalise
-
- .. math::
-
- dst.x = src.x / (src.x \times src.x + src.y \times src.y + src.z \times src.z)
-
- dst.y = src.y / (src.x \times src.x + src.y \times src.y + src.z \times src.z)
-
- dst.z = src.z / (src.x \times src.x + src.y \times src.y + src.z \times src.z)
-
- dst.w = 1
-
-
- DIV - Divide
-
- .. math::
-
- dst.x = \frac{src0.x}{src1.x}
-
- dst.y = \frac{src0.y}{src1.y}
-
- dst.z = \frac{src0.z}{src1.z}
-
- dst.w = \frac{src0.w}{src1.w}
-
-
- DP2 - 2-component Dot Product
-
- .. math::
-
- dst.x = src0.x \times src1.x + src0.y \times src1.y
-
- dst.y = src0.x \times src1.x + src0.y \times src1.y
-
- dst.z = src0.x \times src1.x + src0.y \times src1.y
-
- dst.w = src0.x \times src1.x + src0.y \times src1.y
-
-
- TXL - Texture Lookup With LOD
-
- TBD
-
-
- BRK - Break
-
- TBD
-
-
- IF - If
-
- TBD
-
-
- BGNFOR - Begin a For-Loop
-
- dst.x = floor(src.x)
- dst.y = floor(src.y)
- dst.z = floor(src.z)
-
- if (dst.y <= 0)
- pc = [matching ENDFOR] + 1
- endif
-
- Note: The destination must be a loop register.
- The source must be a constant register.
-
- Considered for cleanup / removal.
-
-
- REP - Repeat
-
- TBD
-
-
- ELSE - Else
-
- TBD
-
-
- ENDIF - End If
-
- TBD
-
-
- ENDFOR - End a For-Loop
-
- dst.x = dst.x + dst.z
- dst.y = dst.y - 1.0
-
- if (dst.y > 0)
- pc = [matching BGNFOR instruction] + 1
- endif
-
- Note: The destination must be a loop register.
-
- Considered for cleanup / removal.
-
- ENDREP - End Repeat
-
- TBD
-
-
- PUSHA - Push Address Register On Stack
-
- push(src.x)
- push(src.y)
- push(src.z)
- push(src.w)
-
- Considered for cleanup / removal.
-
- POPA - Pop Address Register From Stack
-
- dst.w = pop()
- dst.z = pop()
- dst.y = pop()
- dst.x = pop()
-
- Considered for cleanup / removal.
-
-
- From GL_NV_gpu_program4
- ^^^^^^^^^^^^^^^^^^^^^^^^
-
- Support for these opcodes indicated by a special pipe capability bit (TBD).
-
- CEIL - Ceiling
-
- .. math::
-
- dst.x = \lceil src.x\rceil
-
- dst.y = \lceil src.y\rceil
-
- dst.z = \lceil src.z\rceil
-
- dst.w = \lceil src.w\rceil
-
-
- I2F - Integer To Float
-
- .. math::
-
- dst.x = (float) src.x
-
- dst.y = (float) src.y
-
- dst.z = (float) src.z
-
- dst.w = (float) src.w
-
-
- NOT - Bitwise Not
-
- .. math::
-
- dst.x = ~src.x
-
- dst.y = ~src.y
-
- dst.z = ~src.z
-
- dst.w = ~src.w
-
-
- TRUNC - Truncate
-
- XXX how is this different from floor?
-
- .. math::
-
- dst.x = trunc(src.x)
-
- dst.y = trunc(src.y)
-
- dst.z = trunc(src.z)
-
- dst.w = trunc(src.w)
-
-
- SHL - Shift Left
-
- .. math::
-
- dst.x = src0.x << src1.x
-
- dst.y = src0.y << src1.x
-
- dst.z = src0.z << src1.x
-
- dst.w = src0.w << src1.x
-
-
- SHR - Shift Right
-
- .. math::
-
- dst.x = src0.x >> src1.x
-
- dst.y = src0.y >> src1.x
-
- dst.z = src0.z >> src1.x
-
- dst.w = src0.w >> src1.x
-
-
- AND - Bitwise And
-
- .. math::
-
- dst.x = src0.x & src1.x
-
- dst.y = src0.y & src1.y
-
- dst.z = src0.z & src1.z
-
- dst.w = src0.w & src1.w
-
-
- OR - Bitwise Or
-
- .. math::
-
- dst.x = src0.x | src1.x
-
- dst.y = src0.y | src1.y
-
- dst.z = src0.z | src1.z
-
- dst.w = src0.w | src1.w
-
-
- MOD - Modulus
-
- .. math::
-
- dst.x = src0.x \bmod src1.x
-
- dst.y = src0.y \bmod src1.y
-
- dst.z = src0.z \bmod src1.z
-
- dst.w = src0.w \bmod src1.w
-
-
- XOR - Bitwise Xor
-
- .. math::
-
- dst.x = src0.x ^ src1.x
-
- dst.y = src0.y ^ src1.y
-
- dst.z = src0.z ^ src1.z
-
- dst.w = src0.w ^ src1.w
-
-
- SAD - Sum Of Absolute Differences
-
- .. math::
-
- dst.x = |src0.x - src1.x| + src2.x
-
- dst.y = |src0.y - src1.y| + src2.y
-
- dst.z = |src0.z - src1.z| + src2.z
-
- dst.w = |src0.w - src1.w| + src2.w
-
-
- TXF - Texel Fetch
-
- TBD
-
-
- TXQ - Texture Size Query
-
- TBD
-
-
- CONT - Continue
-
- TBD
-
-
- From GL_NV_geometry_program4
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- EMIT - Emit
-
- TBD
-
-
- ENDPRIM - End Primitive
-
- TBD
-
-
- From GLSL
- ^^^^^^^^^^
-
-
- BGNLOOP - Begin a Loop
-
- TBD
-
-
- BGNSUB - Begin Subroutine
-
- TBD
-
-
- ENDLOOP - End a Loop
-
- TBD
-
-
- ENDSUB - End Subroutine
-
- TBD
-
-
-
- NOP - No Operation
-
- Do nothing.
-
- NRM4 - 4-component Vector Normalise
-
- .. math::
-
- dst.x = \frac{src.x}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
-
- dst.y = \frac{src.y}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
-
- dst.z = \frac{src.z}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
-
- dst.w = \frac{src.w}{src.x \times src.x + src.y \times src.y + src.z \times src.z + src.w \times src.w}
-
-
- ps_2_x
- ^^^^^^^^^^^^
-
-
- CALLNZ - Subroutine Call If Not Zero
-
- TBD
-
-
- IFC - If
-
- TBD
-
-
- BREAKC - Break Conditional
-
- TBD
-
-
- Explanation of symbols used
- ------------------------------
-
-
- Functions
- ^^^^^^^^^^^^^^
-
-
- :math:`|x|` Absolute value of `x`.
-
- :math:`\lceil x \rceil` Ceiling of `x`.
-
- clamp(x,y,z) Clamp x between y and z.
- (x < y) ? y : (x > z) ? z : x
-
- :math:`\lfloor x\rfloor` Floor of `x`.
-
- :math:`\log_2{x}` Logarithm of `x`, base 2.
-
- max(x,y) Maximum of x and y.
- (x > y) ? x : y
-
- min(x,y) Minimum of x and y.
- (x < y) ? x : y
-
- partialx(x) Derivative of x relative to fragment's X.
-
- partialy(x) Derivative of x relative to fragment's Y.
-
- pop() Pop from stack.
-
- :math:`x^y` `x` to the power `y`.
-
- push(x) Push x on stack.
-
- round(x) Round x.
-
- trunc(x) Truncate x.
-
-
- Keywords
- ^^^^^^^^^^^^^
-
-
- discard Discard fragment.
-
- dst First destination register.
-
- dst0 First destination register.
-
- pc Program counter.
-
- src First source register.
-
- src0 First source register.
-
- src1 Second source register.
-
- src2 Third source register.
-
- target Label of target instruction.
-
-
- Other tokens
- ---------------
-
-
- Declaration Semantic
- ^^^^^^^^^^^^^^^^^^^^^^^^
-
-
- Follows Declaration token if Semantic bit is set.
-
- Since its purpose is to link a shader with other stages of the pipeline,
- it is valid to follow only those Declaration tokens that declare a register
- either in INPUT or OUTPUT file.
-
- SemanticName field contains the semantic name of the register being declared.
- There is no default value.
-
- SemanticIndex is an optional subscript that can be used to distinguish
- different register declarations with the same semantic name. The default value
- is 0.
-
- The meanings of the individual semantic names are explained in the following
- sections.
-
- TGSI_SEMANTIC_POSITION
- """"""""""""""""""""""
-
- Position, sometimes known as HPOS or WPOS for historical reasons, is the
- location of the vertex in space, in ``(x, y, z, w)`` format. ``x``, ``y``, and ``z``
- are the Cartesian coordinates, and ``w`` is the homogenous coordinate and used
- for the perspective divide, if enabled.
-
- As a vertex shader output, position should be scaled to the viewport. When
- used in fragment shaders, position will ---
-
- XXX --- wait a minute. Should position be in [0,1] for x and y?
-
- XXX additionally, is there a way to configure the perspective divide? it's
- accelerated on most chipsets AFAIK...
-
- Position, if not specified, usually defaults to ``(0, 0, 0, 1)``, and can
- be partially specified as ``(x, y, 0, 1)`` or ``(x, y, z, 1)``.
-
- XXX usually? can we solidify that?
-
- TGSI_SEMANTIC_COLOR
- """""""""""""""""""
-
- Colors are used to, well, color the primitives. Colors are always in
- ``(r, g, b, a)`` format.
-
- If alpha is not specified, it defaults to 1.
-
- TGSI_SEMANTIC_BCOLOR
- """"""""""""""""""""
-
- Back-facing colors are only used for back-facing polygons, and are only valid
- in vertex shader outputs. After rasterization, all polygons are front-facing
- and COLOR and BCOLOR end up occupying the same slots in the fragment, so
- all BCOLORs effectively become regular COLORs in the fragment shader.
-
- TGSI_SEMANTIC_FOG
- """""""""""""""""
-
- The fog coordinate historically has been used to replace the depth coordinate
- for generation of fog in dedicated fog blocks. Gallium, however, does not use
- dedicated fog acceleration, placing it entirely in the fragment shader
- instead.
-
- The fog coordinate should be written in ``(f, 0, 0, 1)`` format. Only the first
- component matters when writing from the vertex shader; the driver will ensure
- that the coordinate is in this format when used as a fragment shader input.
-
- TGSI_SEMANTIC_PSIZE
- """""""""""""""""""
-
- PSIZE, or point size, is used to specify point sizes per-vertex. It should
- be in ``(p, n, x, f)`` format, where ``p`` is the point size, ``n`` is the minimum
- size, ``x`` is the maximum size, and ``f`` is the fade threshold.
-
- XXX this is arb_vp. is this what we actually do? should double-check...
-
- When using this semantic, be sure to set the appropriate state in the
- :ref:`rasterizer` first.
-
- TGSI_SEMANTIC_GENERIC
- """""""""""""""""""""
-
- Generic semantics are nearly always used for texture coordinate attributes,
- in ``(s, t, r, q)`` format. ``t`` and ``r`` may be unused for certain kinds
- of lookups, and ``q`` is the level-of-detail bias for biased sampling.
-
- These attributes are called "generic" because they may be used for anything
- else, including parameters, texture generation information, or anything that
- can be stored inside a four-component vector.
-
- TGSI_SEMANTIC_NORMAL
- """"""""""""""""""""
-
- XXX no clue.
-
- TGSI_SEMANTIC_FACE
- """"""""""""""""""
-
- FACE is the facing bit, to store the facing information for the fragment
- shader. ``(f, 0, 0, 1)`` is the format. The first component will be positive
- when the fragment is front-facing, and negative when the component is
- back-facing.
-
- TGSI_SEMANTIC_EDGEFLAG
- """"""""""""""""""""""
-
- XXX no clue
|