Gsprogramming 1

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 48

PlayStation2 Developers

Conference

Silicon Valley 2000


Introduction to GS Programming(1)

! David Coombes
Support Engineer
SCEA Developer Support
david_coombes@playstation.sony.com

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 2
Introduction to GS(1)
! Presentation Outline
– The evils of television
– GS screen modes
– GS memory scheme
– Texturing (Multipass etc)
– Memory Access
– Coordinate systems
– Zbuffer
– Conclusion

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 3
The Evils of Television (1)
! NTSC/PAL TV Picture
– Not hi-def tv or Vesa monitor
– Take this into consideration
– Check frequently
! Picture signal is analog
– No concept of horizontal resolution ( about
740 ish)
– Vertically about 512 lines (NTSC), but not all
are used to display picture

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 4
The Evils of Television (2)
! TV picture is interlaced. A complete picture
is sent every 30th of a second.
! However it is not sent in row order.
– First the odd fields are sent, then the even
– Reduces flicker and smearing
– TV is old analog technology
– Good for smooth analog images
– Not so good for us

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 5
Screen Modes
! To take advantage of the maximum
vertical resolution - have to run at full
frame rate
! Have to supply 256 vertical lines of picture
every 60th of a second
! Brute force solution
– Two 640*448 frame buffers and a 640*448 Z
buffer
– Not interlaced. Uses a LOT of VRAM
– No frame rate constraints
Introduction to the GS (1)  2000 SCEA CONFIDENTIAL
Slide # 6
Field Based Solution
– A single 640*448 frame buffer and a single
640*448 Z buffer
– Interlaced
– Have to run at 60 fps
– Have to render entire screen every 60th of a
second even though only displaying half of it
– Old PlayStation style

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 7
Field Based Solution
GS Renders into odd fields while sending even fields
to the Television and vice versa.1

Interlaced Frame Buffers

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 8
Frame Based Solution
– Two 640*224 frame buffers and a single
640*224 Z buffer
– Interlaced
– Have to run at 60 fps
– All SCEI demos advocate this mode
! Have to do a bit of fiddling to get it to work.
– Half the height of everything (can be done in
final stage of transform)
– Half pixel offset for even frames

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 9
Frame Based Rendering
Double buffering in interlaced mode

Frame Buffer 1

Frame Buffer 2

Frame Buffer 1 and 2 have different vertical offsets

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 10
Screen Modes (Interlaced)
! Do use 24 or 32 bit
– 16 bit z buffer is likely to give problems
! 640*224 (448) frame based interlace
– Most launch titles use this mode. Likely to
become the standard
! 512*224 (448) frame based interlace
– Saves a useful chunk of video memory

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 11
Screen Modes (Non-Interlaced)
! Free frame rate
! Twice the drawing time. Half the resolution
! Your engine had better be pumping out
some amazing visuals…
If you want to compete with 60fps games

! 60fps interlaced strongly recommended!


– Flicker Fusion Frequency ( FFF)

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 12
Textures
! Limited Memory available
! Upload texture from main ram when
needed
– Fast
– Sort models based on texture requirements if
possible
– See other presentation

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 13
Textures
! Use 8 and 4 bit textures where possible
! Still get full range and lighting Looks fine
on a TV
– Gouraud Shading and Bilinear Filtering
! Don’t want too much high frequency noise
in textures anyway (Aliasing)
! Allows for bigger textures without
thrashing page buffer

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 14
Textures
! Can hide 8 bit textures in unused bits of
other pixel modes e.g. PSMT8H
! Storing an 8 bit texture in the unused bits
of the frame buffer

PSMT8H PSMCT24

IDTEX 8 red green blue

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 15
Textures
! Loading 8 bit and 4 bit textures is slow
compared to 16/24/32
! However can munge multiple textures
together for the purposes of loading

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 16
Texture Coordinate Values
! STQ or UV ?
! UV coordinates are not perspective
correct.
! Does this matter?
! Don’t need to calculate or send a q value
! Fine for flat shaded distant objects (LOD)

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 17
Texture Coordinate Values (2)
! STQ
! Generally going to look better as its
perspective correct
! Can use tri-linear mip mapping.

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 18
Textures (Conclusion)
! GS local memory is not that big but….
– Dynamic texture loading is viable
– 4 and 8 bit textures save space

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 19
Multitexture
! No support for multitexture
– You can use the trilinear mip map filter to
bodge this… but it's slow
! Composite multitexture could be built at
run time
! There wasn’t room left on the chip

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 20
Multipass Rendering
! Gouraud + Texture is boring
! Completely diffuse model
! Use Multipass rendering to accumulate
multiple effects
– Dark/light Map
– Specular pass
– Reflection/Refraction

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 21
Multipass Rendering (2)
! No Source * Destination Alpha blend
– Can’t have color dark maps a la Quake.
– Bummer
– Can use Alpha multiply
• Single color light maps
• Combine with a vertex lighting pass

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 22
Vertex Lighting
! Pre-calculated or dynamic, fast cheap and
looks good
! Gouraud shading isn’t perspective correct
! Need heavy Tessellation for highlights
– But that’s ok, PS2 can process lots of
polygons
! Dynamic lighting effects are easier than
with dark maps
! Doesn’t use any VRAM
Introduction to the GS (1)  2000 SCEA CONFIDENTIAL
Slide # 23
Texture Wrap Modes
! Clamp
! Repeat
! Region Clamp
! Region Repeat
! Can be useful, but generally tessellation is
a better option, as have more vertices for
lighting and clipping

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 24
Complex Texturing Conclusion
– Use combination of vertex lighting and
multipass rendering to create complex
rendering.

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 25
GS Local Memory
! Fast local on chip memory
! Unified memory for frame, Z and texture
! 1 Meg of 4byte memory space = 4Mb!
! Non-linear address conversion

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 26
GS Memory Addressing
FBP: Frame buffer start address
Frame
(0x00000)

ZBP: Z buffer start address


Z

TBP: Texture buffer start address


Texture

CBP: Clut buffer start address


CLUT
(0xFFFFF)

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 27
GS Memory Addressing
! 2 port configuration (2560 bit wide bus)
– Texture access is independent of Frame/Z
buffer access
– Each has an 8Kb page buffer
– Frame and Z buffer share the same page
buffer
• So effectively only 4 kb for Z and Frame

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 28
Memory Access Units
! Page 8192 bytes
! Block 256 bytes
! Column 64 bytes (512 bits)
! Data can be read and written to a column
in the frame/z buffer in a single cycle
– 2560 bit wide data bus
• 1024 for frame read 512 write 512
• 1024 for zbuffer read 512 write 512
• 512 texture read

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 29
Block Arrangement Order
64 Pixels

PSMCT32 (Frame buffer)


0 1 4 5 16 17 20 21
2 3 6 7 18 19 22 23
8 9 12 13 24 25 28 29
10 11 14 15 26 27 30 31
64 Pixels

16 17 20 21 0 1 4 5 PSMZ32 (Z buffer)

18 19 22 23 2 3 6 7
24 25 28 29 8 9 12 13
26 27 30 31 10 11 14 15
Introduction to the GS (1)  2000 SCEA CONFIDENTIAL
Slide # 30
PSMCT32 64 pixels PSMZT32 64 pixels

0 1 4 5 16 17 20 21 16 17 20 21 0 1 4 5
2 3 6 7 18 19 22 23 18 19 22 23 2 3 6 7

8 9 12 13 24 25 28 29 24 25 28 29 8 9 12 13

10 11 14 15 26 27 30 31 26 27 30 31 10 11 14 15

8 pixels

Column 0

8 pixels Column 1 Block size 8*8 pixels


Column 2
Column Size 8*2 pixels
Column 3

0 1 4 5 8 9 12 13

2 3 6 7 10 11 14 15

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 31
What does all this mean to me?
! Data is read from the texture page buffer
in 64 byte chunks.
! Reduced textures are costly as they thrash
the page buffer
– Consider mip mapping or lod
! Faster to fill the screen with lots of small
32*32 sprites than 1 big sprite

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 32
Page Buffer Size
! Frame / Z buffer
! 32/24 bit 32*32 pixels
! 16 bit 32*64 pixels
! 8 bit 64*64 pixels
! 4 bit 64*128 pixels

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 33
Page Buffer Size
! Texture page buffer
! 32/24 bit 64*32 pixels
! 16 bit 64*64 pixels
! 8 bit 128*64 pixels
! 4 bit 128*128 pixels

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 34
GS Memory Addressing
Conclusion
! Being aware the the memory addressing
scheme employed on the GS can result in
higher performance
! See GS Supplementary Document
– Details of GS Local Memory

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 35
Drawing Function
! Setup
! Rasterizing ( DDA)
! Texture mapping - Texture read
! Fogging/Anti-aliasing
! Pixel Test -A,Z read
! Alpha Blending -RGB
! Formatting

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 36
Pixel Test
! Reject before reads from frame buffer
– Scissoring
– Alpha Test
– Destination Alpha Test
– Depth Test

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 37
Drawing Function Conclusion
! Scissor test is late in pipeline so there is a
significant penalty for drawing off screen
! However its not as expensive as doing a 6
plane view clip!
! Especially to a tri strip

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 38
Primitive Coordinate System
! X and Y are 16 bit (0.12.4)
! 0..4095.9375
! Coordinates that exceed these values will
wrap and cause nasty artifacts
! Have to clip these coordinates

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 39
Window Coordinate System
! This is the area within the Primitive
Coordinate System that relates to the
window where drawing will occur
(0,0)
4096
Offset

4096

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 40
Window Coordinate System

(0,0)
4096

4096

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 41
Positioning of Window
Coordinate System
(0,0)
4096

4096

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 42
Coordinate System Conclusion
! Make Use of full range of primitive
coordinate system to take load of vector
processors

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 43
Z Buffer
! Programmer can control drawing order
unlike Z-sort
! Have to Z-sort for some instances
– Alpha Blending
– Transparency?

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 44
Z Buffer Accuracy
! Typically using the 1/Z from the
homogenous transform
Screen

More Accuracy for close objects

1/z

View

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 45
Z Buffer Accuracy
! Placing of near and far planes controls
range and therefore resolution and
accuracy of z buffer
! Z buffer is per pixel, so intersecting
polygons in a model display correctly
! This can be useful for low polygon count
models

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 46
Conclusion
! GS is very fast, but has limited
functionality and memory in comparison to
a PC graphics card

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 47
The End

Introduction to the GS (1)  2000 SCEA CONFIDENTIAL


Slide # 48

You might also like