Status – Week 282
description
Transcript of Status – Week 282
Status – Week Status – Week 282282
Victor MoyaVictor Moya
3D Graphics Pipeline3D Graphics Pipeline
GeometryGeometry
Vertex operations:Vertex operations: (1) Transform coordinates and normal (1) Transform coordinates and normal
Model => World.Model => World. World => Eye.World => Eye.
(2) Normalize the length of the normal.(2) Normalize the length of the normal. (3) Compute vertex lightning.(3) Compute vertex lightning. (4) Transform texture coordinates.(4) Transform texture coordinates. (5) Transform coordinates to clip coordinates (5) Transform coordinates to clip coordinates
(projection).(projection). (8) Divide coordinate by w.(8) Divide coordinate by w. (9) Apply affine viewport transform (x, y, z).(9) Apply affine viewport transform (x, y, z).
GeometryGeometry
Primitive operations:Primitive operations: (6) Primitive assembly (6) Primitive assembly (7) Clipping:(7) Clipping: (10) Backface cull: eliminate back-(10) Backface cull: eliminate back-
facing triangles. facing triangles. Primitive generation: new pipeline Primitive generation: new pipeline
stage (ATI TruForm).stage (ATI TruForm).
ClippingClipping
Clip geometry primitives with the Clip geometry primitives with the view frustrum (6 planes).view frustrum (6 planes).
Clip geometry primitives with the Clip geometry primitives with the user clip planes.user clip planes.
Techniques used:Techniques used: Guard-Band Clipping.Guard-Band Clipping. Homogenous rasterization avoids Homogenous rasterization avoids
clipping in the geometry stage.clipping in the geometry stage.
Guard-Band ClippingGuard-Band Clipping
Homogeneus coordinatesHomogeneus coordinates
““Triangle Scan Conversion using Triangle Scan Conversion using 2D Homogeneus Coordinates”, 2D Homogeneus Coordinates”, Olano and Greer.Olano and Greer.
RasterizationRasterization
Setup (per-triangle).Setup (per-triangle). Sampling (triangle = {fragments}.Sampling (triangle = {fragments}. Interpolation (interpolate colors Interpolation (interpolate colors
and coordinates).and coordinates).
RasterizationRasterization
Converts primitives to fragments.Converts primitives to fragments. Primitive: point, line, polygon, …Primitive: point, line, polygon, … Fragment: transient data structure Fragment: transient data structure
short x, y;short x, y;
long depth;long depth;
short r, g, b, a;short r, g, b, a;
Fragment selection.Fragment selection. Parameter Assignment (color, depth ...).Parameter Assignment (color, depth ...).
Programmable PipelineProgrammable Pipeline
Vertex ProgramVertex Program
Vertex ProgramVertex Program
NV_vertex_program2NV_vertex_program2 ARL (new support for four-component A0 and A1 instead of just ARL (new support for four-component A0 and A1 instead of just
A0.x)A0.x) ARR (similar to ARL, but rounds instead of truncating before ARR (similar to ARL, but rounds instead of truncating before
storing the integer result in an address register)storing the integer result in an address register) BRA, CAL, RET (branching instructions)BRA, CAL, RET (branching instructions) COS, SIN (high-precision trigonometric functions)COS, SIN (high-precision trigonometric functions) FLR, FRC (floor and fraction of floating-point values)FLR, FRC (floor and fraction of floating-point values) EX2, LG2 (high-precision exponentiation and logarithm functions)EX2, LG2 (high-precision exponentiation and logarithm functions) ARA (adds pairs of components of an address register; useful for ARA (adds pairs of components of an address register; useful for
looping and other operations)looping and other operations) SEQ, SFL, SGT, SLE, SNE, STR (“set on” instructions similar to SEQ, SFL, SGT, SLE, SNE, STR (“set on” instructions similar to
SLT, SGE)SLT, SGE) SSG (“set sign” operation; generates a vector holding –1.0 for SSG (“set sign” operation; generates a vector holding –1.0 for
negative operand components, 0 for zero-value components, negative operand components, 0 for zero-value components, and +1.0 for positive components)and +1.0 for positive components)
NV_vertex_program Overview
1. Condition codes 2. Branching & subroutines 3. Even faster performance 4. Nineteen new instructions 5. New source modifiers 6. Clip plane support 7. More registers & instructions
NV_vertex_program2 Resource NV_vertex_program2 Resource LimitsLimits
256 vertex program parameters256 vertex program parameters Up from 96Up from 96 16 temporary registers16 temporary registers Up from 12Up from 12 Two 4-component address registersTwo 4-component address registers Up from one single-component address registerUp from one single-component address register 256 static instructions per program256 static instructions per program Up from 128Up from 128 Given branching, 65536 dynamic instructions Given branching, 65536 dynamic instructions
can execute before termination to avoid infinite can execute before termination to avoid infinite loopsloops
NV_vertex_program2 Source NV_vertex_program2 Source ModifiersModifiers
Source operand absolute valueSource operand absolute value Example: MOV R0, |R1|;Example: MOV R0, |R1|; In addition to source negation & In addition to source negation &
swizzlingswizzling Example: MAD R0, -|R1|.yzwy, |R2|, Example: MAD R0, -|R1|.yzwy, |R2|,
-R3,w;-R3,w; Swizzle, negate, & absolute value Swizzle, negate, & absolute value
operations are “free” source operations are “free” source modifiersmodifiers
NV_vertex_program2 Condition NV_vertex_program2 Condition Codes (1)Codes (1)
Condition code stateCondition code state 4-component register stores condition code values4-component register stores condition code values Four possible valuesFour possible values LT –less than zeroLT –less than zero EQ – equal to zeroEQ – equal to zero GT –greater than zeroGT –greater than zero UN– unordered, for comparisons involving NaNUN– unordered, for comparisons involving NaN Most instructions optionally update condition code stateMost instructions optionally update condition code state Indicated with “C” suffix: DP4C, MOVC, etcIndicated with “C” suffix: DP4C, MOVC, etc “ “CC” pseudo-register used to just update condition CC” pseudo-register used to just update condition
codescodes
NV_vertex_program2 Condition NV_vertex_program2 Condition Codes (2)Codes (2)
Optional condition code based destination Optional condition code based destination maskingmasking
Example: MOV R1.xy(NE.z), R0;Example: MOV R1.xy(NE.z), R0; Copy R0components to R1’s X & Y components Copy R0components to R1’s X & Y components
except when condition code’s Z component is except when condition code’s Z component is EQEQ
Condition code rules: EQ, equal; GE, greater or Condition code rules: EQ, equal; GE, greater or equal; GT, greater than; LE, less or equal; LT, equal; GT, greater than; LE, less or equal; LT, less than; NE, not equal; FL, false; and TR, trueless than; NE, not equal; FL, false; and TR, true
Note that condition code masking rule can Note that condition code masking rule can swizzle condition code componentsswizzle condition code components
ATI R300. Vertex Shader.ATI R300. Vertex Shader.
3DLabs P10. Pipeline.3DLabs P10. Pipeline.
Matrox Parhelia. Pipeline.Matrox Parhelia. Pipeline.