# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 337274cf474a8d2d6871c416a4911d5e
+config: e48279c15771d329f916579cf997b5a9
tags: fbb0d17656682115ca4d033fb2f83ba1
* :ref:`Shader`: These have two sets of methods. ``*_fs_state`` is for
fragment shaders, and ``*_vs_state`` is for vertex shaders.
+
+Resource Binding State
+^^^^^^^^^^^^^^^^^^^^^^
+
+This state describes how resources in various flavours (textures,
+buffers, surfaces) are bound to the driver.
+
+
+* ``set_constant_buffer``
+* ``set_framebuffer_state``
+* ``set_fragment_sampler_textures``
+* ``set_vertex_sampler_textures``
+* ``set_vertex_buffers``
+
+
Non-CSO State
^^^^^^^^^^^^^
* ``set_edgeflags``
* ``set_blend_color``
* ``set_clip_state``
-* ``set_constant_buffer``
-* ``set_framebuffer_state``
* ``set_polygon_stipple``
* ``set_scissor_state``
* ``set_viewport_state``
-* ``set_fragment_sampler_textures``
-* ``set_vertex_sampler_textures``
-* ``set_vertex_buffers``
* ``set_vertex_elements``
+
+Clearing
+^^^^^^^^
+
+``clear`` initializes some or all of the surfaces currently bound to
+the framebuffer to particular RGBA, depth, or stencil values.
+
+Clear is one of the most difficult concepts to nail down to a single
+interface and it seems likely that we will want to add additional
+clear paths, for instance clearing surfaces not bound to the
+framebuffer, or read-modify-write clears such as depth-only or
+stencil-only clears of packed depth-stencil buffers.
+
+
+Drawing
+^^^^^^^
+
+``draw_arrays``
+
+``draw_elements``
+
+``draw_range_elements``
+
+
Queries
^^^^^^^
+Queries gather some statistic from the 3D pipeline over one or more
+draws. Queries may be nested, though no state tracker currently
+exercises this.
+
Queries can be created with ``create_query`` and deleted with
``destroy_query``. To enable a query, use ``begin_query``, and when finished,
use ``end_query`` to stop the query. Finally, ``get_query_result`` is used
to retrieve the results.
-VBO Drawing
-^^^^^^^^^^^
+Flushing
+^^^^^^^^
-``draw_arrays``
+``flush``
-``draw_elements``
-``draw_range_elements``
+Resource Busy Queries
+^^^^^^^^^^^^^^^^^^^^^
-``flush``
+``is_texture_referenced``
-Surface Drawing
-^^^^^^^^^^^^^^^
+``is_buffer_referenced``
+
+
+
+Blitting
+^^^^^^^^
These methods emulate classic blitter controls. They are not guaranteed to be
available; if they are set to NULL, then they are not present.
+These methods operate directly on ``pipe_surface`` objects, and stand
+apart from any 3D state in the context. Blitting functionality may be
+moved to a separate abstraction at some point in the future.
+
``surface_fill`` performs a fill operation on a section of a surface.
``surface_copy`` blits a region of a surface to a region of another surface,
provided that both surfaces are the same format. The source and destination
may be the same surface, and overlapping blits are permitted.
-``clear`` initializes entire buffers to an RGBA, depth, or stencil value,
-depending on the formats of the buffers. Use ``set_framebuffer_state`` to
-specify the buffers to clear.
+The interfaces to these calls are likely to change to make it easier
+for a driver to batch multiple blits with the same source and
+destination.
+
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.
+
+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 - src2.x) + src2.x
+
+ dst.y = src0.y \times (src1.y - src2.y) + src2.y
+
+ dst.z = src0.z \times (src1.z - src2.z) + src2.z
+
+ dst.w = src0.w \times (src1.w - src2.w) + 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.w}
+
+
+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.w}
+
+
+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.
+
+
+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:
+ \times 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.
+
+
+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
+
+
+GL_NV_geometry_program4
+-----------------------------
+
+
+EMIT - Emit
+
+ TBD
+
+
+ENDPRIM - End Primitive
+
+ TBD
+
+
+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.
+
+
+FACE
+^^^^
+
+ Valid only in a fragment shader INPUT declaration.
+
+ FACE.x is negative when the primitive is back facing. FACE.x is positive
+ when the primitive is front facing.
fragment shaders, and <tt class="docutils literal"><span class="pre">*_vs_state</span></tt> is for vertex shaders.</li>
</ul>
</div>
+<div class="section" id="resource-binding-state">
+<h3>Resource Binding State<a class="headerlink" href="#resource-binding-state" title="Permalink to this headline">¶</a></h3>
+<p>This state describes how resources in various flavours (textures,
+buffers, surfaces) are bound to the driver.</p>
+<ul class="simple">
+<li><tt class="docutils literal"><span class="pre">set_constant_buffer</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">set_framebuffer_state</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">set_fragment_sampler_textures</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">set_vertex_sampler_textures</span></tt></li>
+<li><tt class="docutils literal"><span class="pre">set_vertex_buffers</span></tt></li>
+</ul>
+</div>
<div class="section" id="non-cso-state">
<h3>Non-CSO State<a class="headerlink" href="#non-cso-state" title="Permalink to this headline">¶</a></h3>
<p>These pieces of state are too small, variable, and/or trivial to have CSO
<li><tt class="docutils literal"><span class="pre">set_edgeflags</span></tt></li>
<li><tt class="docutils literal"><span class="pre">set_blend_color</span></tt></li>
<li><tt class="docutils literal"><span class="pre">set_clip_state</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">set_constant_buffer</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">set_framebuffer_state</span></tt></li>
<li><tt class="docutils literal"><span class="pre">set_polygon_stipple</span></tt></li>
<li><tt class="docutils literal"><span class="pre">set_scissor_state</span></tt></li>
<li><tt class="docutils literal"><span class="pre">set_viewport_state</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">set_fragment_sampler_textures</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">set_vertex_sampler_textures</span></tt></li>
-<li><tt class="docutils literal"><span class="pre">set_vertex_buffers</span></tt></li>
<li><tt class="docutils literal"><span class="pre">set_vertex_elements</span></tt></li>
</ul>
</div>
+<div class="section" id="clearing">
+<h3>Clearing<a class="headerlink" href="#clearing" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">clear</span></tt> initializes some or all of the surfaces currently bound to
+the framebuffer to particular RGBA, depth, or stencil values.</p>
+<p>Clear is one of the most difficult concepts to nail down to a single
+interface and it seems likely that we will want to add additional
+clear paths, for instance clearing surfaces not bound to the
+framebuffer, or read-modify-write clears such as depth-only or
+stencil-only clears of packed depth-stencil buffers.</p>
+</div>
+<div class="section" id="drawing">
+<h3>Drawing<a class="headerlink" href="#drawing" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">draw_arrays</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">draw_elements</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">draw_range_elements</span></tt></p>
+</div>
<div class="section" id="queries">
<h3>Queries<a class="headerlink" href="#queries" title="Permalink to this headline">¶</a></h3>
+<p>Queries gather some statistic from the 3D pipeline over one or more
+draws. Queries may be nested, though no state tracker currently
+exercises this.</p>
<p>Queries can be created with <tt class="docutils literal"><span class="pre">create_query</span></tt> and deleted with
<tt class="docutils literal"><span class="pre">destroy_query</span></tt>. To enable a query, use <tt class="docutils literal"><span class="pre">begin_query</span></tt>, and when finished,
use <tt class="docutils literal"><span class="pre">end_query</span></tt> to stop the query. Finally, <tt class="docutils literal"><span class="pre">get_query_result</span></tt> is used
to retrieve the results.</p>
</div>
-<div class="section" id="vbo-drawing">
-<h3>VBO Drawing<a class="headerlink" href="#vbo-drawing" title="Permalink to this headline">¶</a></h3>
-<p><tt class="docutils literal"><span class="pre">draw_arrays</span></tt></p>
-<p><tt class="docutils literal"><span class="pre">draw_elements</span></tt></p>
-<p><tt class="docutils literal"><span class="pre">draw_range_elements</span></tt></p>
+<div class="section" id="flushing">
+<h3>Flushing<a class="headerlink" href="#flushing" title="Permalink to this headline">¶</a></h3>
<p><tt class="docutils literal"><span class="pre">flush</span></tt></p>
</div>
-<div class="section" id="surface-drawing">
-<h3>Surface Drawing<a class="headerlink" href="#surface-drawing" title="Permalink to this headline">¶</a></h3>
+<div class="section" id="resource-busy-queries">
+<h3>Resource Busy Queries<a class="headerlink" href="#resource-busy-queries" title="Permalink to this headline">¶</a></h3>
+<p><tt class="docutils literal"><span class="pre">is_texture_referenced</span></tt></p>
+<p><tt class="docutils literal"><span class="pre">is_buffer_referenced</span></tt></p>
+</div>
+<div class="section" id="blitting">
+<h3>Blitting<a class="headerlink" href="#blitting" title="Permalink to this headline">¶</a></h3>
<p>These methods emulate classic blitter controls. They are not guaranteed to be
available; if they are set to NULL, then they are not present.</p>
+<p>These methods operate directly on <tt class="docutils literal"><span class="pre">pipe_surface</span></tt> objects, and stand
+apart from any 3D state in the context. Blitting functionality may be
+moved to a separate abstraction at some point in the future.</p>
<p><tt class="docutils literal"><span class="pre">surface_fill</span></tt> performs a fill operation on a section of a surface.</p>
<p><tt class="docutils literal"><span class="pre">surface_copy</span></tt> blits a region of a surface to a region of another surface,
provided that both surfaces are the same format. The source and destination
may be the same surface, and overlapping blits are permitted.</p>
-<p><tt class="docutils literal"><span class="pre">clear</span></tt> initializes entire buffers to an RGBA, depth, or stencil value,
-depending on the formats of the buffers. Use <tt class="docutils literal"><span class="pre">set_framebuffer_state</span></tt> to
-specify the buffers to clear.</p>
+<p>The interfaces to these calls are likely to change to make it easier
+for a driver to batch multiple blits with the same source and
+destination.</p>
</div>
</div>
</div>
<li><a class="reference external" href="">Context</a><ul>
<li><a class="reference external" href="#methods">Methods</a><ul>
<li><a class="reference external" href="#cso-state">CSO State</a></li>
+<li><a class="reference external" href="#resource-binding-state">Resource Binding State</a></li>
<li><a class="reference external" href="#non-cso-state">Non-CSO State</a></li>
+<li><a class="reference external" href="#clearing">Clearing</a></li>
+<li><a class="reference external" href="#drawing">Drawing</a></li>
<li><a class="reference external" href="#queries">Queries</a></li>
-<li><a class="reference external" href="#vbo-drawing">VBO Drawing</a></li>
-<li><a class="reference external" href="#surface-drawing">Surface Drawing</a></li>
+<li><a class="reference external" href="#flushing">Flushing</a></li>
+<li><a class="reference external" href="#resource-busy-queries">Resource Busy Queries</a></li>
+<li><a class="reference external" href="#blitting">Blitting</a></li>
</ul>
</li>
</ul>
<li class="toctree-l2"><a class="reference external" href="intro.html#what-is-gallium">What is Gallium?</a></li>
</ul>
</li>
-<li class="toctree-l1"><a class="reference external" href="tgsi.html">TGSI</a></li>
+<li class="toctree-l1"><a class="reference external" href="tgsi.html">TGSI</a><ul>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#from-gl-nv-vertex-program">From GL_NV_vertex_program</a></li>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#gl-nv-vertex-program2">GL_NV_vertex_program2</a></li>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#gl-nv-gpu-program4">GL_NV_gpu_program4</a></li>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#gl-nv-geometry-program4">GL_NV_geometry_program4</a></li>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#glsl">GLSL</a></li>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#ps-2-x">ps_2_x</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference external" href="tgsi.html#explanation-of-symbols-used">Explanation of symbols used</a><ul>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#functions">Functions</a></li>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#keywords">Keywords</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference external" href="tgsi.html#other-tokens">Other tokens</a><ul>
+<li class="toctree-l2"><a class="reference external" href="tgsi.html#declaration-semantic">Declaration Semantic</a></li>
+</ul>
+</li>
<li class="toctree-l1"><a class="reference external" href="screen.html">Screen</a><ul>
<li class="toctree-l2"><a class="reference external" href="screen.html#methods">Methods</a></li>
</ul>
-Search.setIndex({desctypes:{},terms:{represent:4,all:[4,9,11],edg:2,queri:9,four:10,per:5,abil:9,follow:9,depend:[5,9],intermedi:4,sourc:9,straightforward:7,set_vertex_el:9,fan:5,level:10,list:6,emul:9,prefilt:10,small:9,dimens:10,impli:5,second:[5,11],pass:[1,11],light_twosid:5,zfail_op:11,index:0,what:[0,7,8],sprite_coord_mod:5,section:9,access:9,delet:9,rgba:[9,10],method:[0,3,9],themselv:5,inher:4,vertic:5,sinc:4,valu:[9,11],line_stipple_factor:5,search:0,vbo:9,shader:[0,1,4,5,6,9,11],permit:[5,9],chang:5,gourard:5,primit:5,modul:0,"boolean":3,visibl:5,oval:5,unit:10,encapsul:7,gl_rasterization_rul:5,from:[5,10],offset_unit:5,two:[6,9,11],call:9,get_paramf:3,type:6,desir:1,get_nam:3,raster:[0,1,5,9],pipe_primitive_quad:5,flag:5,templat:3,fill_ccw:5,point_size_min:5,poly_smooth:5,graphic:[4,7],retriev:9,setup:3,work:1,obvious:5,can:[1,3,9],control:[11,8,5,9,10],create_blend_st:9,indic:0,minimum:[5,10],alwai:[11,5,10],point_size_per_vertex:5,multipl:2,anoth:9,write:[7,11],how:[5,10],flatshad:[1,5],simpl:9,after:10,cso:[0,1,9],set_constant_buff:9,mai:[5,9],fail_op:11,pipe_stencil_op:11,principl:1,essenti:7,bind:9,element:5,inform:2,valuemask:11,order:11,rotat:5,through:[5,11],still:5,paramet:3,group:9,directli:9,bypass:5,main:5,pixel:5,non:9,"return":[1,3],thei:[1,11,5,9,10],fragment:[8,5,9,11],initi:9,get_vendor:3,line_smooth:5,cull_mod:5,introduct:[0,7],name:[3,9],token:6,each:[5,10],side:11,doxi:10,offset_ccw:5,clamp:10,chunk:5,special:9,out:[1,11,10],variabl:9,content:0,hardwar:[7,5,11],got:3,offset_cw:5,given:3,compare_func:10,begin_queri:9,"_rasterizer_st":9,reusabl:1,filter:10,turn:5,get_param:3,clump:11,first:5,oper:[9,11],rang:10,max_lod:10,render:[8,9],carri:11,independ:3,instruct:4,done:11,size:5,differ:5,stencil:[0,1,9,11],tradition:11,too:9,circl:5,scheme:9,moar:[3,5],store:11,min_img_filt:10,option:[5,10],pipe_tex_filt:10,specifi:[5,9],create_queri:9,part:[1,4,3],line_stipple_en:5,target:8,provid:[7,9],see:3,structur:11,texel:10,stippl:5,opaqu:1,result:[8,9],pre:5,fashion:7,clip:5,ani:1,"_blend_stat":9,bitfield:5,max_anisotropi:10,manner:[3,7],have:[11,5,9,10],tabl:0,need:5,"null":9,techniqu:2,unresolv:8,alias:[2,5],destroi:9,fill_cw:5,note:[1,5],take:2,set_viewport_st:9,pipe_func:11,pipelin:[5,9],shade:5,normal:10,buffer:[2,8,9,11],object:[1,7,3,9],most:[5,9],mipmap:10,alpha:[0,1,9,11],pipe_primitive_polygon:5,segment:5,tradit:10,clear:9,tgsi:[0,4],determin:5,blend:[0,1,8,9],end_queri:9,destroy_blend_st:9,wrap_:10,trivial:9,onli:4,front_wind:5,point_sprit:5,should:[8,5],get:3,set_scissor_st:9,stop:9,tungsten:4,tgsi_token:6,set_fragment_sampler_textur:9,enabl:[5,9,11],draw_el:9,pipe_primitive_triangle_fan:5,anisotrop:10,set:[5,9,10],set_framebuffer_st:9,smooth:[2,5],msaa:[2,5],wrap_t:10,wrap_r:10,fail:11,purest:9,pattern:5,state:[1,5,8,9,10,11],"import":[4,5],awai:5,triplet:9,screen:[0,3],min_mip_filt:10,entir:[5,9],lod_bia:10,both:[9,11],last:5,region:9,"_fs_state":9,min_lod:10,context:[0,1,3,9],line_last_pixel:5,mani:10,destroy_queri:9,load:10,undocu:[8,5,10],point:[3,5],color:[5,10],anti:[2,5],provok:5,devic:[3,7,9],three:11,been:11,get_query_result:9,treat:10,basic:2,sprite:5,normalized_coord:10,xxx:[3,11,8,5,10],coordin:10,minifi:10,togeth:11,func:11,present:9,multi:2,servic:7,properti:1,rectangular:5,behavior:8,glossari:[2,0],blit:9,set_edgeflag:9,destin:9,"_vs_state":9,sever:[7,5],set_blend_color:9,surface_fil:9,welcom:0,bind_fragment_sampler_st:9,perform:9,same:9,member:[1,5,6,8,10,11],handl:[1,9],compare_mod:10,zpass_op:11,document:[0,11],finish:9,driver:[4,7],effect:[1,5,10],refin:10,weird:10,multisampl:5,off:[8,5],center:5,surface_copi:9,scissor:5,exampl:9,poly_stipple_en:5,thi:[2,8,5,10],interpol:5,set_clip_st:9,dimension:10,usual:5,identifi:3,execut:11,tcl:5,simpli:5,languag:4,expos:10,except:5,sampler:[0,1,9,10],bypass_vs_clip_and_viewport:[1,5],pipe_tex_wrap:10,vendor:3,which:[1,7],format:[3,9],agnost:7,piec:9,bia:10,magnifi:10,amp:11,bit:5,specif:[1,3,9,5],integ:3,point_siz:5,api:[1,4,7,10],either:9,page:0,mag_img_filt:10,pipe_primitive_quad_strip:5,draw_range_el:9,some:10,back:3,sampl:[2,10],flush:9,guarante:9,bore:3,textur:[3,10],overlap:9,point_smooth:5,larg:7,select:10,refer:[11,10],core:[1,7],run:5,border_color:10,"_depth_stencil_alpha_st":9,appli:10,describ:4,writemask:11,actual:[5,11],gallium:[0,1,4,7,6],bind_vertex_sampler_st:9,set_vertex_buff:9,discard:11,disabl:10,"final":[8,9],"float":3,bound:[1,9,10],wrap:10,mere:5,flatshade_first:[1,5],lod:10,support:6,transform:5,avail:9,width:5,set_polygon_stippl:9,individu:10,"function":11,blend_en:8,set_vertex_sampler_textur:9,point_size_max:5,line:5,viewport:5,notat:10,draw_arrai:9,whether:[11,5,10],wish:5,caller:5,bind_blend_st:9,maximum:[5,10],line_stipple_pattern:5,offset_scal:5,constant:1,creat:[1,3,9],classic:9,certain:11,dure:11,repres:[3,9],implement:5,fill:[1,9],polygon:[2,5],when:[5,9,10],detail:10,test:[5,11],ref_valu:11,draw:9,is_format_support:3,vertex:[5,9],surfac:9,receiv:11,blitter:9,algorithm:5,rule:5,depth:[2,0,1,9,11],time:1,line_width:5,texture_cr:3},titles:["Welcome to Gallium’s documentation!","CSO","Glossary","Screen","TGSI","Rasterizer","Shader","Introduction","Blend","Context","Sampler","Depth, Stencil, & Alpha"],modules:{},descrefs:{},filenames:["index","cso","glossary","screen","tgsi","cso/rasterizer","cso/shader","intro","cso/blend","context","cso/sampler","cso/dsa"]})
\ No newline at end of file
+Search.setIndex({desctypes:{},terms:{represent:4,all:[4,9,11],concept:9,edg:2,queri:[4,9],particular:9,four:[4,10],scalar:4,per:5,abil:9,follow:[4,9],depend:5,name:[3,4,9],intermedi:4,ps_2_x:[0,4],those:4,logarithm:4,sourc:[4,9],normalis:4,straightforward:7,fals:4,set_vertex_el:9,lrp:4,fan:5,partialx:4,level:10,pk4b:4,list:6,emul:9,prefilt:10,cosin:4,sine:4,small:9,div:4,round:4,cmp:4,dimens:10,impli:5,flr:4,up4b:4,sign:4,tex:4,second:[4,5,11],pass:[1,11],light_twosid:5,zfail_op:11,index:0,what:[0,7,8],sprite_coord_mod:5,sub:4,compar:4,neg:4,section:[4,9],current:9,delet:9,rgba:[9,10],method:[0,3,9],themselv:5,deriv:4,absolut:4,coeffici:4,inher:4,path:9,vertic:5,modifi:9,sinc:4,valu:[4,9,11],trunc:4,line_stipple_factor:5,search:0,shift:4,vbo:[],shader:[0,1,4,5,6,9,11],permit:[5,9],weird:10,gourard:5,semant:[0,4],txl:4,"boolean":3,txf:4,modul:0,txd:4,sgt:4,textur:[3,4,9,10],src2:4,src0:4,api:[1,4,7,10],brk:4,is_texture_referenc:9,visibl:5,oval:5,sge:4,txq:4,encapsul:7,gl_rasterization_rul:5,from:[0,4,5,9,10],offset_unit:5,subtract:4,regist:4,two:[4,6,9,11],program:4,call:[4,9],get_paramf:3,stage:4,type:6,more:9,desir:1,get_nam:3,raster:[0,1,5,9],pipe_primitive_quad:5,flag:5,indic:[0,4],fill_ccw:5,unpack:4,point_size_min:5,must:4,poly_smooth:5,graphic:[4,7],retriev:9,setup:3,work:1,obvious:5,can:[1,4,3,9],cal:4,purpos:4,root:4,fetch:4,control:[11,8,5,9,10],create_blend_st:9,pipe_surfac:9,templat:3,minimum:[4,5,10],want:9,dp2a:4,unsign:4,occur:4,gl_nv_vertex_program:[0,4],alwai:[11,5,10],point_size_per_vertex:5,multipl:[2,9],divid:4,anoth:9,write:[7,9,11],how:[4,5,9,10],flatshad:[1,5],simpl:9,sin:4,"42101e":[],product:4,sne:4,resourc:9,max:4,after:10,cso:[0,1,9],set_constant_buff:9,mad:4,mai:[5,9],end:4,fail_op:11,pipe_stencil_op:11,principl:1,essenti:7,third:4,bind:9,counter:4,element:5,endprim:4,inform:2,valuemask:11,order:11,rotat:5,over:9,move:[4,9],through:[5,11],sqrt:[],still:5,paramet:3,group:9,directli:9,bypass:5,main:5,easier:9,non:9,"return":[1,4,3],greater:4,thei:[1,11,5,9,10],fragment:[4,8,5,9,11],initi:9,get_vendor:3,"break":4,line_smooth:5,cull_mod:5,front:4,nop:4,introduct:[0,7],"884467e":[],separ:9,token:[0,4,6],each:[5,10],side:11,doxi:10,offset_ccw:5,clamp:[4,10],chunk:5,continu:4,bra:4,frac:4,special:[4,9],out:[1,11,10],variabl:9,dst:4,ret:4,content:0,vector:4,rel:4,hardwar:[7,5,11],got:3,linear:4,offset_cw:5,given:3,compare_func:10,endsub:4,base:4,begin_queri:9,"_rasterizer_st":9,reusabl:1,endrep:4,filter:10,turn:5,get_param:3,clump:11,first:[4,5],oper:[4,9,11],glsl:[0,4],rang:10,max_lod:10,render:[8,9],carri:11,independ:3,restrict:4,clear:9,instruct:4,done:11,size:[4,5],differ:[4,5],stencil:[0,1,9,11],exponenti:4,tradition:11,too:9,circl:5,scheme:9,moar:[3,5],store:11,nrm4:4,min_img_filt:10,option:[4,5,10],pipe_tex_filt:10,specifi:5,create_queri:9,part:[1,4,3],than:4,line_stipple_en:5,target:[4,8],keyword:[0,4],provid:[7,9],remov:4,see:3,structur:11,texel:[4,10],stippl:5,str:4,opaqu:1,posit:4,result:[8,9],pre:5,fashion:7,clip:5,pk4ub:4,ani:[1,9],"_blend_stat":9,bitfield:5,subroutin:4,max_anisotropi:10,txb:4,manner:[3,7],have:[11,5,9,10],tabl:0,need:5,seem:9,"null":9,bitwis:4,techniqu:2,unresolv:8,alias:[2,5],destroi:9,fill_cw:5,note:[1,4,5],ex2:4,take:2,set_viewport_st:9,pipe_func:11,noth:4,singl:9,pipelin:[4,5,9],xor:4,shade:5,normal:10,buffer:[2,8,9,11],object:[1,7,3,9],most:[5,9],sfl:4,mipmap:10,alpha:[0,1,9,11],pipe_primitive_polygon:5,segment:5,tradit:10,pk2h:4,nail:9,tgsi:[0,4],face:4,pipe:4,declar:[0,4],determin:5,pk2u:4,left:4,blend:[0,1,8,9],sum:4,dot:4,end_queri:9,popa:4,destroy_blend_st:9,wrap_:10,dst0:4,trivial:9,access:9,onli:[4,9],dp4:4,dp3:4,dp2:4,front_wind:5,point_sprit:5,should:[8,5],busi:9,endloop:4,lit:4,variou:9,get:3,set_scissor_st:9,stop:9,ceil:4,mul:4,tungsten:4,ssg:4,tgsi_token:6,tbd:4,set_fragment_sampler_textur:9,shr:4,enabl:[5,9,11],draw_el:9,"default":4,statist:9,contain:4,anisotrop:10,shl:4,valid:4,dph:4,arr:4,set:[4,5,9,10],set_framebuffer_st:9,seq:4,smooth:[2,5],ara:4,msaa:[2,5],wrap_t:10,wrap_r:10,fail:11,arl:4,purest:9,modulu:4,project:4,pattern:5,label:4,state:[1,5,8,9,10,11],between:4,"import":[4,5],subscript:4,triplet:9,screen:[0,3],min_mip_filt:10,entir:5,is_buffer_referenc:9,lod_bia:10,addit:9,both:[9,11],last:5,framebuff:9,x2d:4,region:9,equal:4,min_lod:10,context:[0,1,3,9],line_last_pixel:5,mani:10,destroy_queri:9,load:[4,10],undocu:[8,5,10],point:[3,5,9],color:[5,10],pow:4,address:4,pop:4,distinguish:4,callnz:4,reciproc:4,anti:[2,5],provok:5,lg2:4,asdf:[],light:4,endif:4,devic:[3,7,9],three:[4,11],been:11,compon:4,get_query_result:9,treat:10,basic:2,bgnsub:4,up4ub:4,sprite:5,nrm:4,normalized_coord:10,xxx:[3,4,5,8,10,11],coordin:[4,10],zero:4,minifi:10,texture_cr:3,func:11,predic:4,bgnloop:4,sad:4,present:9,multi:2,ident:4,slt:4,servic:7,properti:1,batch:9,rectangular:5,behavior:8,glossari:[2,0],sle:4,loop:4,pack:[4,9],gl_nv_vertex_program2:[0,4],cont:4,set_edgeflag:9,endfor:4,destin:[4,9],unit:10,primit:[4,5],"_vs_state":9,sever:[7,5],set_blend_color:9,surface_fil:9,welcom:0,bind_fragment_sampler_st:9,perform:9,make:9,cross:4,same:[4,9],member:[1,5,6,8,10,11],handl:[1,9],compare_mod:10,instanc:9,zpass_op:11,document:[0,11],difficult:9,finish:9,nest:9,driver:[4,7,9],effect:[1,5,10],mov:4,capabl:4,rais:[],kil:4,stack:4,squar:4,multisampl:5,off:[8,5],center:5,surface_copi:9,min:4,aisl:4,scissor:5,exampl:9,reflect:4,poly_stipple_en:5,thi:[2,4,5,8,9,10],interpol:[4,5],set_clip_st:9,dimension:10,i2f:4,usual:5,explan:[0,4],distanc:4,identifi:3,execut:11,less:4,kilp:4,up2u:4,up2h:4,tcl:5,simpli:5,semanticnam:4,breakc:4,languag:4,begin:4,gl_nv_geometry_program4:[0,4],expos:10,except:5,add:[4,9],cleanup:4,exercis:9,sampler:[0,1,9,10],els:4,mod:4,bypass_vs_clip_and_viewport:[1,5],match:4,pipe_tex_wrap:10,vendor:3,which:[1,7],format:[3,9],read:9,agnost:7,piec:9,bia:[4,10],bgnfor:4,magnifi:10,amp:11,bit:[4,5],truncat:4,apart:9,like:9,specif:[1,3,9,5],integ:[3,4],point_siz:5,src1:4,either:[4,9],output:4,page:0,mag_img_filt:10,refin:10,pipe_primitive_quad_strip:5,right:4,draw_range_el:9,some:[9,10],blend_en:8,pusha:4,opcod:4,sampl:[2,10],flush:9,guarante:9,bore:3,pixel:5,ddy:4,ddx:4,partiali:4,though:9,overlap:9,point_smooth:5,multipli:4,cnd:4,tracker:9,larg:7,select:10,condit:4,txp:4,refer:[11,10],core:[1,7],run:5,rsq:4,border_color:10,ifc:4,"_depth_stencil_alpha_st":9,appli:10,describ:[4,9],writemask:11,src:4,actual:[5,11],gallium:[0,1,4,7,6],semanticindex:4,bind_vertex_sampler_st:9,set_vertex_buff:9,stand:9,awai:5,discard:[4,11],approxim:4,mean:4,disabl:10,"final":[8,9],"float":[3,4],bound:[1,9,10],down:9,explain:4,wrap:10,chang:[5,9],mere:5,flatshade_first:[1,5],log:4,lod:[4,10],support:[4,6],rcp:4,transform:[4,5],xpd:4,avail:9,width:5,set_polygon_stippl:9,interfac:9,fraction:4,individu:[4,10],rcc:4,"function":[0,4,9,11],homogen:4,back:[3,4],set_vertex_sampler_textur:9,point_size_max:5,link:4,blit:9,line:5,"true":4,viewport:5,gl_nv_gpu_program4:[0,4],notat:10,flavour:9,input:4,draw_arrai:9,whether:[11,5,10],wish:5,caller:5,bind_blend_st:9,maximum:[4,5,10],"abstract":9,line_stipple_pattern:5,emit:4,offset_scal:5,gather:9,constant:[1,4],creat:[1,3,9],classic:9,certain:11,dure:11,rfl:4,repres:[3,9],implement:5,file:4,fill:[1,9],polygon:[2,5],floor:4,when:[4,5,9,10],detail:10,power:4,field:4,other:[0,4],lookup:4,futur:9,branch:4,test:[5,11],ref_valu:11,draw:9,repeat:4,exp:4,is_format_support:3,symbol:[0,4],vertex:[5,9],surfac:9,consid:4,receiv:11,blitter:9,algorithm:5,rule:5,pipe_primitive_triangle_fan:5,depth:[2,0,1,9,11],"_fs_state":9,potenti:4,time:[1,4],push:4,line_width:5,rep:4,togeth:11},titles:["Welcome to Gallium’s documentation!","CSO","Glossary","Screen","TGSI","Rasterizer","Shader","Introduction","Blend","Context","Sampler","Depth, Stencil, & Alpha"],modules:{},descrefs:{},filenames:["index","cso","glossary","screen","tgsi","cso/rasterizer","cso/shader","intro","cso/blend","context","cso/sampler","cso/dsa"]})
\ No newline at end of file
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.</p>
+<div class="section" id="from-gl-nv-vertex-program">
+<h2>From GL_NV_vertex_program<a class="headerlink" href="#from-gl-nv-vertex-program" title="Permalink to this headline">¶</a></h2>
+<p>ARL - Address Register Load</p>
+<div class="math">
+<p><img src="_images/math/a6a788a4144ea0b8be244aad870806646081b809.png" alt="dst.x = \lfloor src.x\rfloor
+
+dst.y = \lfloor src.y\rfloor
+
+dst.z = \lfloor src.z\rfloor
+
+dst.w = \lfloor src.w\rfloor" /></p>
+</div><p>MOV - Move</p>
+<div class="math">
+<p><img src="_images/math/723d0548eae0d4f8738fcf051e2e56bce034e7d4.png" alt="dst.x = src.x
+
+dst.y = src.y
+
+dst.z = src.z
+
+dst.w = src.w" /></p>
+</div><p>LIT - Light Coefficients</p>
+<div class="math">
+<p><img src="_images/math/758e5c32fbcca15fadbbf1ee7cb5967466f056e9.png" alt="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" /></p>
+</div><p>RCP - Reciprocal</p>
+<div class="math">
+<p><img src="_images/math/c9bc0e532b3b63ed42567436058b919bc78442ce.png" alt="dst.x = \frac{1}{src.x}
+
+dst.y = \frac{1}{src.x}
+
+dst.z = \frac{1}{src.x}
+
+dst.w = \frac{1}{src.x}" /></p>
+</div><p>RSQ - Reciprocal Square Root</p>
+<div class="math">
+<p><img src="_images/math/70d1866ff09388f68ff5f0f88719006a59e19187.png" alt="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|}}" /></p>
+</div><p>EXP - Approximate Exponential Base 2</p>
+<div class="math">
+<p><img src="_images/math/61a735a5ca4687a35d98a8d42c127cb425b16eed.png" alt="dst.x = 2^{\lfloor src.x\rfloor}
+
+dst.y = src.x - \lfloor src.x\rfloor
+
+dst.z = 2^{src.x}
+
+dst.w = 1" /></p>
+</div><p>LOG - Approximate Logarithm Base 2</p>
+<div class="math">
+<p><img src="_images/math/f71ea96f5550b90a162f1d7a8b754eeb9b0d126e.png" alt="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" /></p>
+</div><p>MUL - Multiply</p>
+<div class="math">
+<p><img src="_images/math/8d727b11852ddbb13fb91083a0ce71ea2a47306f.png" alt="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" /></p>
+</div><p>ADD - Add</p>
+<div class="math">
+<p><img src="_images/math/419ee673cdf363cbe29df99a84db18bf74b83cc4.png" alt="dst.x = src0.x + src1.x
+
+dst.y = src0.y + src1.y
+
+dst.z = src0.z + src1.z
+
+dst.w = src0.w + src1.w" /></p>
+</div><p>DP3 - 3-component Dot Product</p>
+<div class="math">
+<p><img src="_images/math/cd11030c4826718fe39618e48ae07d9298184a65.png" alt="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" /></p>
+</div><p>DP4 - 4-component Dot Product</p>
+<div class="math">
+<p><img src="_images/math/efbae5a733577ba979c4f08fa0e1de5e31953b92.png" alt="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" /></p>
+</div><p>DST - Distance Vector</p>
+<div class="math">
+<p><img src="_images/math/6d0d5702a6e475d584f295bd4f0fa80a70b70ee5.png" alt="dst.x = 1
+
+dst.y = src0.y \times src1.y
+
+dst.z = src0.z
+
+dst.w = src1.w" /></p>
+</div><p>MIN - Minimum</p>
+<div class="math">
+<p><img src="_images/math/73dec9e78c22629aa3379d21ccc96b1a5c5d2dbd.png" alt="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)" /></p>
+</div><p>MAX - Maximum</p>
+<div class="math">
+<p><img src="_images/math/1ad10aa070bc12ee93fca94040edb8900468ae29.png" alt="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)" /></p>
+</div><p>SLT - Set On Less Than</p>
+<div class="math">
+<p><img src="_images/math/b1db3ad26718bdcf3d1afeb866f1fc595230786d.png" alt="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" /></p>
+</div><p>SGE - Set On Greater Equal Than</p>
+<div class="math">
+<p><img src="_images/math/bb15ac1bdb0b295273a7c57060899063cf618a95.png" alt="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" /></p>
+</div><p>MAD - Multiply And Add</p>
+<div class="math">
+<p><img src="_images/math/cb4e90af76c03c927762a3c33e989ce2c41f5be5.png" alt="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" /></p>
+</div><p>SUB - Subtract</p>
+<div class="math">
+<p><img src="_images/math/d96d8a97260276b9db5e903a05339b869391856f.png" alt="dst.x = src0.x - src1.x
+
+dst.y = src0.y - src1.y
+
+dst.z = src0.z - src1.z
+
+dst.w = src0.w - src1.w" /></p>
+</div><p>LRP - Linear Interpolate</p>
+<div class="math">
+<p><img src="_images/math/cf94ae7663599af8dc7ada12a43b33ca5083044a.png" alt="dst.x = src0.x \times (src1.x - src2.x) + src2.x
+
+dst.y = src0.y \times (src1.y - src2.y) + src2.y
+
+dst.z = src0.z \times (src1.z - src2.z) + src2.z
+
+dst.w = src0.w \times (src1.w - src2.w) + src2.w" /></p>
+</div><p>CND - Condition</p>
+<div class="math">
+<p><img src="_images/math/f9be0a9bff61d950cb768b8d10c66a45377f3124.png" alt="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" /></p>
+</div><p>DP2A - 2-component Dot Product And Add</p>
+<div class="math">
+<p><img src="_images/math/abcd8a9f57fcaecc5e5c14835fa7438b08b4009d.png" alt="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" /></p>
+</div><p>FRAC - Fraction</p>
+<div class="math">
+<p><img src="_images/math/df45d09eb32da9798269d030845962e4d92e26de.png" alt="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" /></p>
+</div><p>CLAMP - Clamp</p>
+<div class="math">
+<p><img src="_images/math/56093f3e51016bf4a7784ed66cb8628202f58b2d.png" alt="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)" /></p>
+</div><p>FLR - Floor</p>
+<p>This is identical to ARL.</p>
+<div class="math">
+<p><img src="_images/math/a6a788a4144ea0b8be244aad870806646081b809.png" alt="dst.x = \lfloor src.x\rfloor
+
+dst.y = \lfloor src.y\rfloor
+
+dst.z = \lfloor src.z\rfloor
+
+dst.w = \lfloor src.w\rfloor" /></p>
+</div><p>ROUND - Round</p>
+<div class="math">
+<p><img src="_images/math/226c98a475a610bdeb91b4fbf51261cf8721d8f6.png" alt="dst.x = round(src.x)
+
+dst.y = round(src.y)
+
+dst.z = round(src.z)
+
+dst.w = round(src.w)" /></p>
+</div><p>EX2 - Exponential Base 2</p>
+<div class="math">
+<p><img src="_images/math/0210d258bc676109314169f2dd4320059387500c.png" alt="dst.x = 2^{src.x}
+
+dst.y = 2^{src.x}
+
+dst.z = 2^{src.x}
+
+dst.w = 2^{src.x}" /></p>
+</div><p>LG2 - Logarithm Base 2</p>
+<div class="math">
+<p><img src="_images/math/1b910bba9c9c6d11618b234335f33413d4f76ee6.png" alt="dst.x = \log_2{src.x}
+
+dst.y = \log_2{src.x}
+
+dst.z = \log_2{src.x}
+
+dst.w = \log_2{src.x}" /></p>
+</div><p>POW - Power</p>
+<div class="math">
+<p><img src="_images/math/290ad5e39fd561a8616e6eb9abc488c8615b36c7.png" alt="dst.x = src0.x^{src1.x}
+
+dst.y = src0.x^{src1.x}
+
+dst.z = src0.x^{src1.x}
+
+dst.w = src0.x^{src1.x}" /></p>
+</div><p>XPD - Cross Product</p>
+<div class="math">
+<p><img src="_images/math/751ec5401cf0d30257850404124ddad65cd5c0b2.png" alt="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" /></p>
+</div><p>ABS - Absolute</p>
+<div class="math">
+<p><img src="_images/math/ad452a9162cb4c5aeb7638cac156cf04155c968a.png" alt="dst.x = |src.x|
+
+dst.y = |src.y|
+
+dst.z = |src.z|
+
+dst.w = |src.w|" /></p>
+</div><p>RCC - Reciprocal Clamped</p>
+<p>XXX cleanup on aisle three</p>
+<div class="math">
+<p><img src="_images/math/f5fe168fde58a4d9fb87b5ef1e8b532f02f3a7cb.png" alt="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)" /></p>
+</div><p>DPH - Homogeneous Dot Product</p>
+<div class="math">
+<p><img src="_images/math/2049740526a3bf3b01a0793817069df1d2b217a6.png" alt="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" /></p>
+</div><p>COS - Cosine</p>
+<div class="math">
+<p><img src="_images/math/ade7e8ec73d74fb03022a40c9a69055c7a0a937b.png" alt="dst.x = \cos{src.x}
+
+dst.y = \cos{src.x}
+
+dst.z = \cos{src.x}
+
+dst.w = \cos{src.w}" /></p>
+</div><p>DDX - Derivative Relative To X</p>
+<div class="math">
+<p><img src="_images/math/5846a9ccdaf9e3c8c9ffa099acee7e80c7cc0d4b.png" alt="dst.x = partialx(src.x)
+
+dst.y = partialx(src.y)
+
+dst.z = partialx(src.z)
+
+dst.w = partialx(src.w)" /></p>
+</div><p>DDY - Derivative Relative To Y</p>
+<div class="math">
+<p><img src="_images/math/f89c54b3cac95d930ef70dffa6dc62db5fac05a6.png" alt="dst.x = partialy(src.x)
+
+dst.y = partialy(src.y)
+
+dst.z = partialy(src.z)
+
+dst.w = partialy(src.w)" /></p>
+</div><p>KILP - Predicated Discard</p>
+<blockquote>
+discard</blockquote>
+<p>PK2H - Pack Two 16-bit Floats</p>
+<blockquote>
+TBD</blockquote>
+<p>PK2US - Pack Two Unsigned 16-bit Scalars</p>
+<blockquote>
+TBD</blockquote>
+<p>PK4B - Pack Four Signed 8-bit Scalars</p>
+<blockquote>
+TBD</blockquote>
+<p>PK4UB - Pack Four Unsigned 8-bit Scalars</p>
+<blockquote>
+TBD</blockquote>
+<p>RFL - Reflection Vector</p>
+<div class="math">
+<p><img src="_images/math/6dfa1d81b7272fac743c04c8f5fbd74bb42639b4.png" alt="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" /></p>
+</div><p>Considered for removal.</p>
+<p>SEQ - Set On Equal</p>
+<div class="math">
+<p><img src="_images/math/5eac00cd4b387d141630ace602ed89d9a2ccc0ef.png" alt="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" /></p>
+</div><p>SFL - Set On False</p>
+<div class="math">
+<p><img src="_images/math/15f738543d3cfe86879e953e69536effdc1d97f5.png" alt="dst.x = 0
+dst.y = 0
+dst.z = 0
+dst.w = 0" /></p>
+</div><p>Considered for removal.</p>
+<p>SGT - Set On Greater Than</p>
+<div class="math">
+<p><img src="_images/math/2bbfc816656154cb764d951002e595719a0cfce1.png" alt="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" /></p>
+</div><p>SIN - Sine</p>
+<div class="math">
+<p><img src="_images/math/0e5562f4fdf39c2754c17f761d76dcdb738dd233.png" alt="dst.x = \sin{src.x}
+
+dst.y = \sin{src.x}
+
+dst.z = \sin{src.x}
+
+dst.w = \sin{src.w}" /></p>
+</div><p>SLE - Set On Less Equal Than</p>
+<div class="math">
+<p><img src="_images/math/3f4ffe13f32660772fc7dbde7b56fff6308b347c.png" alt="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" /></p>
+</div><p>SNE - Set On Not Equal</p>
+<div class="math">
+<p><img src="_images/math/7a206759bbd06a8ef2385b8b7cf42b07521d36a8.png" alt="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" /></p>
+</div><p>STR - Set On True</p>
+<div class="math">
+<p><img src="_images/math/9a8aa4392d07b8c3fd7f2bc7ddee9eecd87e2c21.png" alt="dst.x = 1
+dst.y = 1
+dst.z = 1
+dst.w = 1" /></p>
+</div><p>TEX - Texture Lookup</p>
+<blockquote>
+TBD</blockquote>
+<p>TXD - Texture Lookup with Derivatives</p>
+<blockquote>
+TBD</blockquote>
+<p>TXP - Projective Texture Lookup</p>
+<blockquote>
+TBD</blockquote>
+<p>UP2H - Unpack Two 16-Bit Floats</p>
+<blockquote>
+<p>TBD</p>
+<p>Considered for removal.</p>
+</blockquote>
+<p>UP2US - Unpack Two Unsigned 16-Bit Scalars</p>
+<blockquote>
+<p>TBD</p>
+<p>Considered for removal.</p>
+</blockquote>
+<p>UP4B - Unpack Four Signed 8-Bit Values</p>
+<blockquote>
+<p>TBD</p>
+<p>Considered for removal.</p>
+</blockquote>
+<p>UP4UB - Unpack Four Unsigned 8-Bit Scalars</p>
+<blockquote>
+<p>TBD</p>
+<p>Considered for removal.</p>
+</blockquote>
+<p>X2D - 2D Coordinate Transformation</p>
+<div class="math">
+<p><img src="_images/math/f94a20471877c44c7f623279934018e5c7348e83.png" alt="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" /></p>
+</div><p>Considered for removal.</p>
+</div>
+<div class="section" id="gl-nv-vertex-program2">
+<h2>GL_NV_vertex_program2<a class="headerlink" href="#gl-nv-vertex-program2" title="Permalink to this headline">¶</a></h2>
+<p>ARA - Address Register Add</p>
+<blockquote>
+<p>TBD</p>
+<p>Considered for removal.</p>
+</blockquote>
+<p>ARR - Address Register Load With Round</p>
+<div class="math">
+<p><img src="_images/math/226c98a475a610bdeb91b4fbf51261cf8721d8f6.png" alt="dst.x = round(src.x)
+
+dst.y = round(src.y)
+
+dst.z = round(src.z)
+
+dst.w = round(src.w)" /></p>
+</div><p>BRA - Branch</p>
+<blockquote>
+<p>pc = target</p>
+<p>Considered for removal.</p>
+</blockquote>
+<p>CAL - Subroutine Call</p>
+<blockquote>
+push(pc)
+pc = target</blockquote>
+<p>RET - Subroutine Call Return</p>
+<blockquote>
+<p>pc = pop()</p>
+<p>Potential restrictions:
+times Only occurs at end of function.</p>
+</blockquote>
+<p>SSG - Set Sign</p>
+<div class="math">
+<p><img src="_images/math/096db0cc9a735fa08397a0d940cb96025db3e3c8.png" alt="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" /></p>
+</div><p>CMP - Compare</p>
+<div class="math">
+<p><img src="_images/math/53961253955fd2148f7cef66c79f2274c76f1954.png" alt="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" /></p>
+</div><p>KIL - Conditional Discard</p>
+<div class="math">
+<p><img src="_images/math/ef0c42df6cde68a9c411ff8ce9ad1603b2715daf.png" alt="if (src.x < 0 || src.y < 0 || src.z < 0 || src.w < 0)
+ discard
+endif" /></p>
+</div><p>SCS - Sine Cosine</p>
+<div class="math">
+<p><img src="_images/math/1ed3a5293ecdad1b4847367fba55be005fe7f6ba.png" alt="dst.x = \cos{src.x}
+
+dst.y = \sin{src.x}
+
+dst.z = 0
+
+dst.y = 1" /></p>
+</div><p>TXB - Texture Lookup With Bias</p>
+<blockquote>
+TBD</blockquote>
+<p>NRM - 3-component Vector Normalise</p>
+<div class="math">
+<p><img src="_images/math/a6403ef2be1ec6b8eafb37e12b4e44adf240444e.png" alt="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" /></p>
+</div><p>DIV - Divide</p>
+<div class="math">
+<p><img src="_images/math/f8d904588ef4d267803f5aee2f5789d9eda5b0e4.png" alt="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}" /></p>
+</div><p>DP2 - 2-component Dot Product</p>
+<div class="math">
+<p><img src="_images/math/052e6cb10c4892efcc9dfdd69fd3480adbae7bba.png" alt="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" /></p>
+</div><p>TXL - Texture Lookup With LOD</p>
+<blockquote>
+TBD</blockquote>
+<p>BRK - Break</p>
+<blockquote>
+TBD</blockquote>
+<p>IF - If</p>
+<blockquote>
+TBD</blockquote>
+<p>BGNFOR - Begin a For-Loop</p>
+<blockquote>
+<p>dst.x = floor(src.x)
+dst.y = floor(src.y)
+dst.z = floor(src.z)</p>
+<dl class="docutils">
+<dt>if (dst.y <= 0)</dt>
+<dd>pc = [matching ENDFOR] + 1</dd>
+</dl>
+<p>endif</p>
+<dl class="docutils">
+<dt>Note: The destination must be a loop register.</dt>
+<dd>The source must be a constant register.</dd>
+</dl>
+<p>Considered for cleanup / removal.</p>
+</blockquote>
+<p>REP - Repeat</p>
+<blockquote>
+TBD</blockquote>
+<p>ELSE - Else</p>
+<blockquote>
+TBD</blockquote>
+<p>ENDIF - End If</p>
+<blockquote>
+TBD</blockquote>
+<p>ENDFOR - End a For-Loop</p>
+<blockquote>
+<p>dst.x = dst.x + dst.z
+dst.y = dst.y - 1.0</p>
+<dl class="docutils">
+<dt>if (dst.y > 0)</dt>
+<dd>pc = [matching BGNFOR instruction] + 1</dd>
+</dl>
+<p>endif</p>
+<p>Note: The destination must be a loop register.</p>
+<p>Considered for cleanup / removal.</p>
+</blockquote>
+<p>ENDREP - End Repeat</p>
+<blockquote>
+TBD</blockquote>
+<p>PUSHA - Push Address Register On Stack</p>
+<blockquote>
+<p>push(src.x)
+push(src.y)
+push(src.z)
+push(src.w)</p>
+<p>Considered for cleanup / removal.</p>
+</blockquote>
+<p>POPA - Pop Address Register From Stack</p>
+<blockquote>
+<p>dst.w = pop()
+dst.z = pop()
+dst.y = pop()
+dst.x = pop()</p>
+<p>Considered for cleanup / removal.</p>
+</blockquote>
+</div>
+<div class="section" id="gl-nv-gpu-program4">
+<h2>GL_NV_gpu_program4<a class="headerlink" href="#gl-nv-gpu-program4" title="Permalink to this headline">¶</a></h2>
+<p>Support for these opcodes indicated by a special pipe capability bit (TBD).</p>
+<p>CEIL - Ceiling</p>
+<div class="math">
+<p><img src="_images/math/03e47c613e946131569cb8ab9b88ae7b31a7a436.png" alt="dst.x = \lceil src.x\rceil
+
+dst.y = \lceil src.y\rceil
+
+dst.z = \lceil src.z\rceil
+
+dst.w = \lceil src.w\rceil" /></p>
+</div><p>I2F - Integer To Float</p>
+<div class="math">
+<p><img src="_images/math/fa38e14d5e8d8fcf15c70890e66ae5727443e531.png" alt="dst.x = (float) src.x
+
+dst.y = (float) src.y
+
+dst.z = (float) src.z
+
+dst.w = (float) src.w" /></p>
+</div><p>NOT - Bitwise Not</p>
+<div class="math">
+<p><img src="_images/math/ae28f3acd0883602c612198d7bcd7fc277972f31.png" alt="dst.x = ~src.x
+
+dst.y = ~src.y
+
+dst.z = ~src.z
+
+dst.w = ~src.w" /></p>
+</div><p>TRUNC - Truncate</p>
+<p>XXX how is this different from floor?</p>
+<div class="math">
+<p><img src="_images/math/4a413dd124842171577a13c5de2f45c92f1a0c59.png" alt="dst.x = trunc(src.x)
+
+dst.y = trunc(src.y)
+
+dst.z = trunc(src.z)
+
+dst.w = trunc(src.w)" /></p>
+</div><p>SHL - Shift Left</p>
+<div class="math">
+<p><img src="_images/math/6d8f34db37f5d0909f568cbd49dbb9bbd376629d.png" alt="dst.x = src0.x << src1.x
+
+dst.y = src0.y << src1.x
+
+dst.z = src0.z << src1.x
+
+dst.w = src0.w << src1.x" /></p>
+</div><p>SHR - Shift Right</p>
+<div class="math">
+<p><img src="_images/math/8bb711dcf8af2b6a34bd4cb19311c1c2c445ef5e.png" alt="dst.x = src0.x >> src1.x
+
+dst.y = src0.y >> src1.x
+
+dst.z = src0.z >> src1.x
+
+dst.w = src0.w >> src1.x" /></p>
+</div><p>AND - Bitwise And</p>
+<div class="math">
+<p><img src="_images/math/a37f2da4dd31c01e7c3afd0adab9bdf27c9d4805.png" alt="dst.x = src0.x & src1.x
+
+dst.y = src0.y & src1.y
+
+dst.z = src0.z & src1.z
+
+dst.w = src0.w & src1.w" /></p>
+</div><p>OR - Bitwise Or</p>
+<div class="math">
+<p><img src="_images/math/84549dcb2fc79ba332fa86d8b6bdac239d32097f.png" alt="dst.x = src0.x | src1.x
+
+dst.y = src0.y | src1.y
+
+dst.z = src0.z | src1.z
+
+dst.w = src0.w | src1.w" /></p>
+</div><p>MOD - Modulus</p>
+<div class="math">
+<p><img src="_images/math/10d8720201a3a554b1610687157a80fae1871f6d.png" alt="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" /></p>
+</div><p>XOR - Bitwise Xor</p>
+<div class="math">
+<p><img src="_images/math/0f7e82c35f1b87f2d11da3fbc639085a54a5e7ec.png" alt="dst.x = src0.x ^ src1.x
+
+dst.y = src0.y ^ src1.y
+
+dst.z = src0.z ^ src1.z
+
+dst.w = src0.w ^ src1.w" /></p>
+</div><p>SAD - Sum Of Absolute Differences</p>
+<div class="math">
+<p><img src="_images/math/a4a04906e15ff687e62dcad0046baa9ae05eabb5.png" alt="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" /></p>
+</div><p>TXF - Texel Fetch</p>
+<blockquote>
+TBD</blockquote>
+<p>TXQ - Texture Size Query</p>
+<blockquote>
+TBD</blockquote>
+<p>CONT - Continue</p>
+<blockquote>
+TBD</blockquote>
+</div>
+<div class="section" id="gl-nv-geometry-program4">
+<h2>GL_NV_geometry_program4<a class="headerlink" href="#gl-nv-geometry-program4" title="Permalink to this headline">¶</a></h2>
+<p>EMIT - Emit</p>
+<blockquote>
+TBD</blockquote>
+<p>ENDPRIM - End Primitive</p>
+<blockquote>
+TBD</blockquote>
+</div>
+<div class="section" id="glsl">
+<h2>GLSL<a class="headerlink" href="#glsl" title="Permalink to this headline">¶</a></h2>
+<p>BGNLOOP - Begin a Loop</p>
+<blockquote>
+TBD</blockquote>
+<p>BGNSUB - Begin Subroutine</p>
+<blockquote>
+TBD</blockquote>
+<p>ENDLOOP - End a Loop</p>
+<blockquote>
+TBD</blockquote>
+<p>ENDSUB - End Subroutine</p>
+<blockquote>
+TBD</blockquote>
+<p>NOP - No Operation</p>
+<blockquote>
+Do nothing.</blockquote>
+<p>NRM4 - 4-component Vector Normalise</p>
+<div class="math">
+<p><img src="_images/math/740c183de3654a7e7ee772a640badd3b2844da81.png" alt="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}" /></p>
+</div></div>
+<div class="section" id="ps-2-x">
+<h2>ps_2_x<a class="headerlink" href="#ps-2-x" title="Permalink to this headline">¶</a></h2>
+<p>CALLNZ - Subroutine Call If Not Zero</p>
+<blockquote>
+TBD</blockquote>
+<p>IFC - If</p>
+<blockquote>
+TBD</blockquote>
+<p>BREAKC - Break Conditional</p>
+<blockquote>
+TBD</blockquote>
+</div>
+</div>
+<div class="section" id="explanation-of-symbols-used">
+<h1>Explanation of symbols used<a class="headerlink" href="#explanation-of-symbols-used" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="functions">
+<h2>Functions<a class="headerlink" href="#functions" title="Permalink to this headline">¶</a></h2>
+<blockquote>
+<p><img class="math" src="_images/math/49428192d366caf373c0af3c3261687f12b4c883.png" alt="|x|"/> Absolute value of <cite>x</cite>.</p>
+<p><img class="math" src="_images/math/1a7cd7095a9b123f81967d8d3b14d1e02b0174e7.png" alt="\lceil x \rceil"/> Ceiling of <cite>x</cite>.</p>
+<dl class="docutils">
+<dt>clamp(x,y,z) Clamp x between y and z.</dt>
+<dd>(x < y) ? y : (x > z) ? z : x</dd>
+</dl>
+<p><img class="math" src="_images/math/441416e660d25335f27e55334ac2a06e51541c97.png" alt="\lfloor x\rfloor"/> Floor of <cite>x</cite>.</p>
+<p><img class="math" src="_images/math/1ce288a883e98c3d1027d27f6246e7d3fdc4d78c.png" alt="\log_2{x}"/> Logarithm of <cite>x</cite>, base 2.</p>
+<dl class="docutils">
+<dt>max(x,y) Maximum of x and y.</dt>
+<dd>(x > y) ? x : y</dd>
+<dt>min(x,y) Minimum of x and y.</dt>
+<dd>(x < y) ? x : y</dd>
+</dl>
+<p>partialx(x) Derivative of x relative to fragment’s X.</p>
+<p>partialy(x) Derivative of x relative to fragment’s Y.</p>
+<p>pop() Pop from stack.</p>
+<p><img class="math" src="_images/math/8f9af910fe749481919573c0dd2b132118f19d19.png" alt="x^y"/> <cite>x</cite> to the power <cite>y</cite>.</p>
+<p>push(x) Push x on stack.</p>
+<p>round(x) Round x.</p>
+<p>trunc(x) Truncate x.</p>
+</blockquote>
+</div>
+<div class="section" id="keywords">
+<h2>Keywords<a class="headerlink" href="#keywords" title="Permalink to this headline">¶</a></h2>
+<blockquote>
+<p>discard Discard fragment.</p>
+<p>dst First destination register.</p>
+<p>dst0 First destination register.</p>
+<p>pc Program counter.</p>
+<p>src First source register.</p>
+<p>src0 First source register.</p>
+<p>src1 Second source register.</p>
+<p>src2 Third source register.</p>
+<p>target Label of target instruction.</p>
+</blockquote>
+</div>
+</div>
+<div class="section" id="other-tokens">
+<h1>Other tokens<a class="headerlink" href="#other-tokens" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="declaration-semantic">
+<h2>Declaration Semantic<a class="headerlink" href="#declaration-semantic" title="Permalink to this headline">¶</a></h2>
+<blockquote>
+<p>Follows Declaration token if Semantic bit is set.</p>
+<p>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.</p>
+<p>SemanticName field contains the semantic name of the register being declared.
+There is no default value.</p>
+<p>SemanticIndex is an optional subscript that can be used to distinguish
+different register declarations with the same semantic name. The default value
+is 0.</p>
+<p>The meanings of the individual semantic names are explained in the following
+sections.</p>
+</blockquote>
+<div class="section" id="face">
+<h3>FACE<a class="headerlink" href="#face" title="Permalink to this headline">¶</a></h3>
+<blockquote>
+<p>Valid only in a fragment shader INPUT declaration.</p>
+<p>FACE.x is negative when the primitive is back facing. FACE.x is positive
+when the primitive is front facing.</p>
+</blockquote>
+</div>
+</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference external" href="">TGSI</a><ul>
+<li><a class="reference external" href="#from-gl-nv-vertex-program">From GL_NV_vertex_program</a></li>
+<li><a class="reference external" href="#gl-nv-vertex-program2">GL_NV_vertex_program2</a></li>
+<li><a class="reference external" href="#gl-nv-gpu-program4">GL_NV_gpu_program4</a></li>
+<li><a class="reference external" href="#gl-nv-geometry-program4">GL_NV_geometry_program4</a></li>
+<li><a class="reference external" href="#glsl">GLSL</a></li>
+<li><a class="reference external" href="#ps-2-x">ps_2_x</a></li>
+</ul>
+</li>
+<li><a class="reference external" href="#explanation-of-symbols-used">Explanation of symbols used</a><ul>
+<li><a class="reference external" href="#functions">Functions</a></li>
+<li><a class="reference external" href="#keywords">Keywords</a></li>
+</ul>
+</li>
+<li><a class="reference external" href="#other-tokens">Other tokens</a><ul>
+<li><a class="reference external" href="#declaration-semantic">Declaration Semantic</a><ul>
+<li><a class="reference external" href="#face">FACE</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
<h4>Previous topic</h4>
<p class="topless"><a href="intro.html"
title="previous chapter">Introduction</a></p>