[Mesa-dev] [PATCH] gallium: more tgsi documentation updates
Jose Fonseca
jfonseca at vmware.com
Sat May 4 00:27:52 PDT 2013
Looks good AFAICT
----- Original Message -----
> From: Roland Scheidegger <sroland at vmware.com>
>
> Adds the remaining integer opcodes, and some opcodes are moved to more
> appropriate places, along with getting rid of the (already nearly empty)
> ps_2_x section. Though the CAP bits for some of these are still a bit in
> the air so the documentation isn't quite as watertight as is desirable.
> ---
> src/gallium/docs/source/tgsi.rst | 381
> +++++++++++++++++++++++++-------------
> 1 file changed, 251 insertions(+), 130 deletions(-)
>
> diff --git a/src/gallium/docs/source/tgsi.rst
> b/src/gallium/docs/source/tgsi.rst
> index b2f7a85..b479fcf 100644
> --- a/src/gallium/docs/source/tgsi.rst
> +++ b/src/gallium/docs/source/tgsi.rst
> @@ -473,7 +473,7 @@ This instruction replicates its result.
>
> .. opcode:: KILP - Predicated Discard
>
> - discard
> + Not really predicated, just unconditional discard
>
>
> .. opcode:: PK2H - Pack Two 16-bit Floats
> @@ -720,25 +720,6 @@ This instruction replicates its result.
> dst.w = round(src.w)
>
>
> -.. opcode:: BRA - Branch
> -
> - pc = target
> -
> -.. note::
> -
> - Considered for removal.
> -
> -.. opcode:: CAL - Subroutine Call
> -
> - push(pc)
> - pc = target
> -
> -
> -.. opcode:: RET - Subroutine Call Return
> -
> - pc = pop()
> -
> -
> .. opcode:: SSG - Set Sign
>
> .. math::
> @@ -856,99 +837,6 @@ This instruction replicates its result.
> dst = texture_sample(unit, coord, lod)
>
>
> -.. opcode:: BRK - Break
> -
> - Unconditionally moves the point of execution to the instruction after the
> - next endloop or endswitch. The instruction must appear within a
> loop/endloop
> - or switch/endswitch.
> -
> -
> -.. opcode:: BREAKC - Break Conditional
> -
> - Conditionally moves the point of execution to the instruction after the
> - next endloop or endswitch. The instruction must appear within a
> loop/endloop
> - or switch/endswitch.
> - Condition evaluates to true if src0.x != 0 where src0.x is interpreted
> - as an integer register.
> -
> -
> -.. opcode:: CONT - Continue
> -
> - TBD
> -
> -.. note::
> -
> - Support for CONT is determined by a special capability bit,
> - ``TGSI_CONT_SUPPORTED``. See :ref:`Screen` for more information.
> -
> -
> -.. opcode:: IF - Float If
> -
> - Start an IF ... ELSE .. ENDIF block. Condition evaluates to true if
> -
> - src0.x != 0.0
> -
> - where src0.x is interpreted as a floating point register.
> -
> -
> -.. opcode:: UIF - Bitwise If
> -
> - Start an UIF ... ELSE .. ENDIF block. Condition evaluates to true if
> -
> - src0.x != 0
> -
> - where src0.x is interpreted as an integer register.
> -
> -
> -.. opcode:: ELSE - Else
> -
> - Starts an else block, after an IF or UIF statement.
> -
> -
> -.. opcode:: ENDIF - End If
> -
> - Ends an IF or UIF block.
> -
> -
> -.. opcode:: SWITCH - Switch
> -
> - Starts a C-style switch expression. The switch consists of one or
> multiple
> - CASE statements, and at most one DEFAULT statement. Execution of a
> statement
> - ends when a BRK is hit, but just like in C falling through to other cases
> - without a break is allowed. Similarly, DEFAULT label is allowed anywhere
> not
> - just as last statement, and fallthrough is allowed into/from it.
> - CASE src arguments are evaluated at bit level against the SWITCH src
> argument.
> -
> - Example:
> - SWITCH src[0].x
> - CASE src[0].x
> - (some instructions here)
> - (optional BRK here)
> - DEFAULT
> - (some instructions here)
> - (optional BRK here)
> - CASE src[0].x
> - (some instructions here)
> - (optional BRK here)
> - ENDSWITCH
> -
> -
> -.. opcode:: CASE - Switch case
> -
> - This represents a switch case label. The src arg must be an integer
> immediate.
> -
> -
> -.. opcode:: DEFAULT - Switch default
> -
> - This represents the default case in the switch, which is taken if no
> other
> - case matches.
> -
> -
> -.. opcode:: ENDSWITCH - End of switch
> -
> - Ends a switch expression.
> -
> -
> .. opcode:: PUSHA - Push Address Register On Stack
>
> push(src.x)
> @@ -980,6 +868,28 @@ This instruction replicates its result.
> Considered for removal.
>
>
> +.. opcode:: BRA - Branch
> +
> + pc = target
> +
> +.. note::
> +
> + Considered for removal.
> +
> +
> +.. opcode:: CALLNZ - Subroutine Call If Not Zero
> +
> + TBD
> +
> +.. note::
> +
> + Considered for cleanup.
> +
> +.. note::
> +
> + Considered for removal.
> +
> +
> Compute ISA
> ^^^^^^^^^^^^^^^^^^^^^^^^
>
> @@ -1380,8 +1290,6 @@ Support for these opcodes indicated by
> PIPE_SHADER_CAP_INTEGERS (all of them?)
> dst.w = src0.w >> (unsigned) src1.x
>
>
> -
> -
> .. opcode:: UCMP - Integer Conditional Move
>
> .. math::
> @@ -1395,6 +1303,115 @@ Support for these opcodes indicated by
> PIPE_SHADER_CAP_INTEGERS (all of them?)
> dst.w = src0.w ? src1.w : src2.w
>
>
> +
> +.. opcode:: ISSG - Integer Set Sign
> +
> +.. math::
> +
> + dst.x = (src0.x < 0) ? -1 : (src0.x > 0) ? 1 : 0
> +
> + dst.y = (src0.y < 0) ? -1 : (src0.y > 0) ? 1 : 0
> +
> + dst.z = (src0.z < 0) ? -1 : (src0.z > 0) ? 1 : 0
> +
> + dst.w = (src0.w < 0) ? -1 : (src0.w > 0) ? 1 : 0
> +
> +
> +
> +.. opcode:: ISLT - Signed Integer Set On Less Than
> +
> +.. math::
> +
> + dst.x = (src0.x < src1.x) ? ~0 : 0
> +
> + dst.y = (src0.y < src1.y) ? ~0 : 0
> +
> + dst.z = (src0.z < src1.z) ? ~0 : 0
> +
> + dst.w = (src0.w < src1.w) ? ~0 : 0
> +
> +
> +.. opcode:: USLT - Unsigned Integer Set On Less Than
> +
> +.. math::
> +
> + dst.x = (src0.x < src1.x) ? ~0 : 0
> +
> + dst.y = (src0.y < src1.y) ? ~0 : 0
> +
> + dst.z = (src0.z < src1.z) ? ~0 : 0
> +
> + dst.w = (src0.w < src1.w) ? ~0 : 0
> +
> +
> +.. opcode:: ISGE - Signed Integer Set On Greater Equal Than
> +
> +.. math::
> +
> + dst.x = (src0.x >= src1.x) ? ~0 : 0
> +
> + dst.y = (src0.y >= src1.y) ? ~0 : 0
> +
> + dst.z = (src0.z >= src1.z) ? ~0 : 0
> +
> + dst.w = (src0.w >= src1.w) ? ~0 : 0
> +
> +
> +.. opcode:: USGE - Unsigned Integer Set On Greater Equal Than
> +
> +.. math::
> +
> + dst.x = (src0.x >= src1.x) ? ~0 : 0
> +
> + dst.y = (src0.y >= src1.y) ? ~0 : 0
> +
> + dst.z = (src0.z >= src1.z) ? ~0 : 0
> +
> + dst.w = (src0.w >= src1.w) ? ~0 : 0
> +
> +
> +.. opcode:: USEQ - Integer Set On Equal
> +
> +.. math::
> +
> + dst.x = (src0.x == src1.x) ? ~0 : 0
> +
> + dst.y = (src0.y == src1.y) ? ~0 : 0
> +
> + dst.z = (src0.z == src1.z) ? ~0 : 0
> +
> + dst.w = (src0.w == src1.w) ? ~0 : 0
> +
> +
> +.. opcode:: USNE - Integer Set On Not Equal
> +
> +.. math::
> +
> + dst.x = (src0.x != src1.x) ? ~0 : 0
> +
> + dst.y = (src0.y != src1.y) ? ~0 : 0
> +
> + dst.z = (src0.z != src1.z) ? ~0 : 0
> +
> + dst.w = (src0.w != src1.w) ? ~0 : 0
> +
> +
> +.. opcode:: INEG - Integer Negate
> +
> + Two's complement.
> +
> +.. math::
> +
> + dst.x = -src.x
> +
> + dst.y = -src.y
> +
> + dst.z = -src.z
> +
> + dst.w = -src.w
> +
> +
> +
> .. opcode:: IABS - Integer Absolute Value
>
> .. math::
> @@ -1416,12 +1433,14 @@ in any other type of shader.
>
> .. opcode:: EMIT - Emit
>
> - TBD
> + Generate a new vertex for the current primitive using the values in the
> + output registers.
>
>
> .. opcode:: ENDPRIM - End Primitive
>
> - TBD
> + Complete the current primitive (consisting of the emitted vertices),
> + and start a new one.
>
>
> GLSL ISA
> @@ -1429,25 +1448,48 @@ GLSL ISA
>
> These opcodes are part of :term:`GLSL`'s opcode set. Support for these
> opcodes is determined by a special capability bit, ``GLSL``.
> +Some require glsl version 1.30 (UIF/BREAKC/SWITCH/CASE/DEFAULT/ENDSWITCH).
> +
> +.. opcode:: CAL - Subroutine Call
> +
> + push(pc)
> + pc = target
> +
> +
> +.. opcode:: RET - Subroutine Call Return
> +
> + pc = pop()
> +
> +
> +.. opcode:: CONT - Continue
> +
> + Unconditionally moves the point of execution to the instruction after the
> + last bgnloop. The instruction must appear within a bgnloop/endloop.
> +
> +.. note::
> +
> + Support for CONT is determined by a special capability bit,
> + ``TGSI_CONT_SUPPORTED``. See :ref:`Screen` for more information.
> +
>
> .. opcode:: BGNLOOP - Begin a Loop
>
> - TBD
> + Start a loop. Must have a matching endloop.
>
>
> .. opcode:: BGNSUB - Begin Subroutine
>
> - TBD
> + Starts definition of a subroutine. Must have a matching endsub.
>
>
> .. opcode:: ENDLOOP - End a Loop
>
> - TBD
> + End a loop started with bgnloop.
>
>
> .. opcode:: ENDSUB - End Subroutine
>
> - TBD
> + Ends definition of a subroutine.
>
>
> .. opcode:: NOP - No Operation
> @@ -1455,23 +1497,102 @@ opcodes is determined by a special capability bit,
> ``GLSL``.
> Do nothing.
>
>
> -.. opcode:: NRM4 - 4-component Vector Normalise
> +.. opcode:: BRK - Break
>
> -This instruction replicates its result.
> + Unconditionally moves the point of execution to the instruction after the
> + next endloop or endswitch. The instruction must appear within a
> loop/endloop
> + or switch/endswitch.
>
> -.. math::
>
> - dst = \frac{src.x}{src.x \times src.x + src.y \times src.y + src.z \times
> src.z + src.w \times src.w}
> +.. opcode:: BREAKC - Break Conditional
>
> + Conditionally moves the point of execution to the instruction after the
> + next endloop or endswitch. The instruction must appear within a
> loop/endloop
> + or switch/endswitch.
> + Condition evaluates to true if src0.x != 0 where src0.x is interpreted
> + as an integer register.
>
> -ps_2_x
> -^^^^^^^^^^^^
> +.. note::
>
> -XXX wait what
> + Considered for removal as it's quite inconsistent wrt other opcodes
> + (could emulate with UIF/BRK/ENDIF).
>
> -.. opcode:: CALLNZ - Subroutine Call If Not Zero
>
> - TBD
> +.. opcode:: IF - Float If
> +
> + Start an IF ... ELSE .. ENDIF block. Condition evaluates to true if
> +
> + src0.x != 0.0
> +
> + where src0.x is interpreted as a floating point register.
> +
> +
> +.. opcode:: UIF - Bitwise If
> +
> + Start an UIF ... ELSE .. ENDIF block. Condition evaluates to true if
> +
> + src0.x != 0
> +
> + where src0.x is interpreted as an integer register.
> +
> +
> +.. opcode:: ELSE - Else
> +
> + Starts an else block, after an IF or UIF statement.
> +
> +
> +.. opcode:: ENDIF - End If
> +
> + Ends an IF or UIF block.
> +
> +
> +.. opcode:: SWITCH - Switch
> +
> + Starts a C-style switch expression. The switch consists of one or
> multiple
> + CASE statements, and at most one DEFAULT statement. Execution of a
> statement
> + ends when a BRK is hit, but just like in C falling through to other cases
> + without a break is allowed. Similarly, DEFAULT label is allowed anywhere
> not
> + just as last statement, and fallthrough is allowed into/from it.
> + CASE src arguments are evaluated at bit level against the SWITCH src
> argument.
> +
> + Example:
> + SWITCH src[0].x
> + CASE src[0].x
> + (some instructions here)
> + (optional BRK here)
> + DEFAULT
> + (some instructions here)
> + (optional BRK here)
> + CASE src[0].x
> + (some instructions here)
> + (optional BRK here)
> + ENDSWITCH
> +
> +
> +.. opcode:: CASE - Switch case
> +
> + This represents a switch case label. The src arg must be an integer
> immediate.
> +
> +
> +.. opcode:: DEFAULT - Switch default
> +
> + This represents the default case in the switch, which is taken if no
> other
> + case matches.
> +
> +
> +.. opcode:: ENDSWITCH - End of switch
> +
> + Ends a switch expression.
> +
> +
> +.. opcode:: NRM4 - 4-component Vector Normalise
> +
> +This instruction replicates its result.
> +
> +.. math::
> +
> + dst = \frac{src.x}{src.x \times src.x + src.y \times src.y + src.z \times
> src.z + src.w \times src.w}
> +
>
> .. _doubleopcodes:
>
> --
> 1.7.9.5
>
More information about the mesa-dev
mailing list