Difference between revisions of "VDP1 (Saturn)"
From Sega Retro
(→Errata) |
|||
(37 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{cleanup}} | |
+ | {{ICBob | ||
+ | | image=315-5688 VDP1 01.jpg | ||
+ | | title= | ||
+ | | designer= | ||
+ | | date= | ||
+ | }} | ||
'''Video Display Processor 1''' ('''VDP1''') is one of two graphics processing units housed within the [[Sega Saturn]] console. It is a custom integrated circuit used only in Saturn hardware, and the Saturn-derived [[Sega Titan Video]] [[arcade]] hardware. | '''Video Display Processor 1''' ('''VDP1''') is one of two graphics processing units housed within the [[Sega Saturn]] console. It is a custom integrated circuit used only in Saturn hardware, and the Saturn-derived [[Sega Titan Video]] [[arcade]] hardware. | ||
Line 10: | Line 16: | ||
==Overview== | ==Overview== | ||
− | The VDP1 was based on the [[:Category:Sega Model series|Sega Model series]], with a quad polygon engine based on the [[Model 1]], along with the [[Model 2]]'s [[wikipedia:Texture mapping|textured mapping]] capability. The VDP1 is capable of drawing more polygons than the Model 1, but less than the Model 2. The VDP1 | + | The VDP1 was based on the [[:Category:Sega Model series|Sega Model series]], with a quad polygon engine based on the [[Model 1]], along with the [[Model 2]]'s [[wikipedia:Texture mapping|textured mapping]] capability. However, the way it maps textures onto quads is different from the Model 2. While the Model 2 maps a texture across multiple polygons, the VDP1 maps a single texture onto a single polygon. This allows the Saturn to render [[sprite]]s and texture-mapped polygons in the same manner.{{fileref|ST-013-R3-061694.pdf}} The VDP1's texture-mapped polygons are thus also similar to the [[Sega System 32]]'s textures. |
+ | |||
+ | The VDP1 is capable of drawing more polygons than the Model 1, but less than the Model 2. The VDP1 renders quad polygons, which, despite being used by the most powerful gaming system at the time ([[Sega Model 2]] arcade system), was not industry standard for 3D graphics, compared to the more widely used triangle polygons. The VDP1's quad polygons are drawn with [[wikipedia:Texture mapping#Forward texture mapping|forward texture mapping]] (a form of perspective correction), bilinear approximation (reduces texture warping), and medium polygon accuracy (resulting in seamless polygons).{{ref|https://web.archive.org/web/20060303164344/http://www.shinforce.com/saturn/information/3D-Capabilities.htm}} | ||
− | The VDP1 had issues with transparency. The VDP1 supports per-pixel transparency between different polygons/sprites in the VDP1 framebuffer, or between VDP1 and VDP2 layers, but not both at the same time, with the VDP2's transparency overriding the VDP1's transparency. In addition, the VDP1 takes six times longer to draw transparent pixels than opaque pixels.{{fileref|ST-013-R3-061694.pdf|page=110}} There are several ways to overcome the VDP1's transparency issues. The most common method used by Saturn games is to fake transparency with [[wikipedia:Dither|dithering]], using a mesh that gets blended by a television's Composite or S-Video cable. Another method is to use the VDP2's hardware transparency, by using a VDP2 bitmap layer as an additional transparent framebuffer, copying transparent assets from the VDP1 framebuffer to a VDP2 bitmap framebuffer layer (e.g. the transparent polygons in ''[[Burning Rangers]]''). Another method is software transparency, programming the CPU with software code. | + | The VDP1 had issues with transparency. The VDP1 supports per-pixel transparency between different polygons/sprites in the VDP1 framebuffer, or between VDP1 and VDP2 layers, but not both at the same time, with the VDP2's transparency overriding the VDP1's transparency. In addition, the VDP1 takes six times longer to draw transparent pixels than opaque pixels.{{fileref|ST-013-R3-061694.pdf|page=110}} There are several ways to overcome the VDP1's transparency issues. The most common method used by Saturn games is to fake transparency with [[wikipedia:Dither|dithering]], using a mesh that gets blended by a television's Composite or S-Video cable. Another method is to use the VDP2's hardware transparency, by using a VDP2 bitmap layer as an additional transparent framebuffer, copying transparent assets from the VDP1 framebuffer to a VDP2 bitmap framebuffer layer (e.g. the transparent polygons in ''[[Burning Rangers]]''). Another method possible is software transparency, programming the CPU with software code, but there are no known games to do so. |
The Saturn's VDP1 was the basis for [[wikipedia:Nvidia|Nvidia]]'s first graphics processor, the [[NV1]], which was one of the first 3D graphics accelerators on PC, released in 1995. Like the Saturn, it uses quad polygons and supports forward texture mapping with limited perspective correction, and several Saturn ports are available for it. However, the NV1 has a fillrate of 12.5 MPixels/s and a rendering performance of 50,000 polygons/sec, less than the VDP1's 28.4375–57.2728 MPixels/s fillrate and 500,000 polygons/sec rendering performance. In comparison, the most powerful PC graphics card of 1995, [[Yamaha]]'s Tasmania 3D, which was based on triangle polygons, had a 25 MPixels/s fillrate and 300,000 polygons/sec rendering throughput, more than the NV1, but less than the VDP1. | The Saturn's VDP1 was the basis for [[wikipedia:Nvidia|Nvidia]]'s first graphics processor, the [[NV1]], which was one of the first 3D graphics accelerators on PC, released in 1995. Like the Saturn, it uses quad polygons and supports forward texture mapping with limited perspective correction, and several Saturn ports are available for it. However, the NV1 has a fillrate of 12.5 MPixels/s and a rendering performance of 50,000 polygons/sec, less than the VDP1's 28.4375–57.2728 MPixels/s fillrate and 500,000 polygons/sec rendering performance. In comparison, the most powerful PC graphics card of 1995, [[Yamaha]]'s Tasmania 3D, which was based on triangle polygons, had a 25 MPixels/s fillrate and 300,000 polygons/sec rendering throughput, more than the NV1, but less than the VDP1. | ||
Line 19: | Line 27: | ||
==Technical specifications== | ==Technical specifications== | ||
+ | :''See also [[Sega Saturn/Technical specifications]]'' | ||
+ | |||
{{multicol| | {{multicol| | ||
− | * VDP1 @ 28.63636 MHz: Handles sprite/texture and polygon drawing,{{fileref|ST-013-R3-061694.pdf}} color calculation and shading,{{fileref|Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf}} geometry{{ | + | * VDP1 @ 28.63636 MHz: Handles sprite/texture and polygon drawing,{{fileref|ST-013-R3-061694.pdf}} color calculation and shading,{{fileref|Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf}} geometry{{magref|nextgeneration|24|64}} |
− | + | :* Versions: Sega 315‑5883 ([[Hitachi]] HD64440) Video Display Processor 1 (VDP1),{{ref|[https://github.com/mamedev/mame/blob/master/src/mame/drivers/saturn.cpp Sega Saturn (MAME)]}} Sega 315‑5689 VDP1{{fileref|Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf}} | |
− | + | :* Adjustable video clock rate: 28.63636 MHz or 26.8465875 MHz (NTSC),{{fileref|ST-013-R3-061694.pdf|page=52}}{{intref|Sega Saturn hardware notes (2004-04-27)}} 28.4375 MHz or 26.8426 MHz (PAL){{fileref|ST-013-R3-061694.pdf|page=52}} | |
− | + | :* Parallel bus structure: 3 parallel data buses (dual framebuffers, texture cache), 48-bit bus width (16-bit per bus),{{fileref|Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf|page=34}} 171.8184 MB/s bandwidth{{ref|57.27272 MB/s per bus|group=fn}} | |
− | + | :* Parallel bus cycles: 85.90908 million bus cycles/sec{{ref|28.63636 MHz texture cache VRAM, 28.63636 MHz draw/render framebuffer, 28.63636 MHz display/erase framebuffer{{fileref|ST-013-R3-061694.pdf|page=6}}|group=fn}} | |
* Rendering engine for primitives: textured and untextured polygons, untextured polylines and lines | * Rendering engine for primitives: textured and untextured polygons, untextured polylines and lines | ||
* Sprites are textured polygons with specific rendering modes: | * Sprites are textured polygons with specific rendering modes: | ||
− | + | :* Normal sprite (one point), shrunk/scaled sprite (two points), quadrangle (four points) | |
* Other rendering modes: | * Other rendering modes: | ||
− | + | :* Overwrite (replace framebuffer contents) | |
− | + | :* Shadow (underlying framebuffer pixels rewritten with 1/2 brightness, primitive not drawn) | |
− | + | :* Half luminosity (primitive rendered with 1/2 brightness) | |
− | + | :* Half transparency (primitive and underlying framebuffer pixels averaged together) | |
− | + | :* [[Gouraud shading]] for RGB-format textures only | |
* Dual 256 KB frame buffers | * Dual 256 KB frame buffers | ||
− | + | :* Programmable frame buffer depth of 8 or 16 bits per pixel | |
− | + | :* Automatic erase feature to clear framebuffer with single color | |
* 60 frames of animation per second | * 60 frames of animation per second | ||
− | * Color palette: 32,768 colors (15-bit RGB) to 16,777,216 (24-bit VDP2 CRAM palette, accessible by VDP1){{fileref|TUTORIAL.pdf|page=11}} | + | * Color [[palette]]: 32,768 colors (15-bit RGB) to 16,777,216 (24-bit [[VDP2]] CRAM palette, accessible by VDP1){{fileref|TUTORIAL.pdf|page=11}} |
− | + | :* Colors on screen: 32,768 colors (15-bit RGB) to 1,048,576 colors (15-bit RGB, 32 transparency levels using VDP2 palette){{fileref|ST-TECH.pdf|page=147}} | |
− | + | :* Colors per [[pixel]]: 32,768 colors (16bpp, 15-bit RGB), 256 colors (8bpp, 8-bit palette) | |
− | * Features: [[wikipedia:Alpha blending|Alpha blending]], [[wikipedia:Clipping (computer graphics)|clipping]], luminance,{{ref|[https://github.com/mamedev/mame/blob/master/src/devices/video/stvvdp1.cpp STV VDP1 (MAME)]}} shadows,{{fileref|ST-TECH.pdf|page=135}} transparency{{fileref|ST-013-R3-061694.pdf|page=34}} (32 levels | + | * Features: [[wikipedia:Alpha blending|Alpha blending]], [[wikipedia:Clipping (computer graphics)|clipping]], luminance,{{ref|[https://github.com/mamedev/mame/blob/master/src/devices/video/stvvdp1.cpp STV VDP1 (MAME)]}} shadows,{{fileref|ST-TECH.pdf|page=135}} transparency{{fileref|ST-013-R3-061694.pdf|page=34}} (3 alpha levels, or 32 alpha levels using VDP2 palette),{{fileref|ST-TECH.pdf|page=147}} per-pixel transparency{{fileref|ST-013-R3-061694.pdf|page=110}} |
− | + | :* Polygon capabilities: Texture mapping,{{fileref|ST-013-R3-061694.pdf}} [[wikipedia:Computer graphics lighting|lighting]],{{fileref|ST-238-R1-051795.pdf}}{{fileref|ST-238-R1-051795.pdf|page=232}} shading, wire‑frame, [[wikipedia:Flat shading|flat shading]], [[wikipedia:Gouraud shading|Gouraud shading]],{{fileref|ST-013-R3-061694.pdf|page=110}}{{fileref|Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf}}{{fileref|ST-238-R1-051795.pdf|page=232}} 15-bit color Gouraud shading,{{fileref|ST-013-R3-061694.pdf|page=41}} 15-bit colored lighting, quad polygons, [[wikipedia:Spatial anti-aliasing|edge anti‑aliasing]],{{fileref|ST-013-R3-061694.pdf|page=24}} [[wikipedia:Texture mapping#Forward texture mapping|forward texture mapping]] (form of perspective correction), bilinear approximation (reduces texture warping), medium polygon accuracy (seamless polygons){{ref|https://web.archive.org/web/20060303164344/http://www.shinforce.com/saturn/information/3D-Capabilities.htm}} | |
* [[wikipedia:Framebuffer|Framebuffer]] capabilities: Double buffering, dual 256 KB framebuffers, rotation & scaling,{{ref|[https://github.com/mamedev/mame/blob/master/src/devices/video/stvvdp1.cpp STV VDP1 (MAME)]}} VDP1 framebuffer can be rotated as bitmap layer by VDP2{{fileref|ST-058-R2-060194.pdf|page=177}} | * [[wikipedia:Framebuffer|Framebuffer]] capabilities: Double buffering, dual 256 KB framebuffers, rotation & scaling,{{ref|[https://github.com/mamedev/mame/blob/master/src/devices/video/stvvdp1.cpp STV VDP1 (MAME)]}} VDP1 framebuffer can be rotated as bitmap layer by VDP2{{fileref|ST-058-R2-060194.pdf|page=177}} | ||
− | + | :* Framebuffer [[resolution]]: 512×256, 512×512, 1024×256{{fileref|ST-013-R3-061694.pdf|page=149}} | |
− | + | :* [[wikipedia:Overscan|Overscan]] resolution: 1708×263 (NTSC), 1820×313 (PAL), 852×525 (31KC), 848×562 (HDTV){{fileref|ST-013-R3-061694.pdf|page=64}} | |
− | * [[Sprite|Sprite/Texture]] capabilities: Rotation & scaling, flipping, distortion,{{fileref|ST-013-R3-061694.pdf}}{{ref|[https://github.com/mamedev/mame/blob/master/src/devices/video/stvvdp1.cpp STV VDP1 (MAME)]}} warping, vertical and horizontal line scrolling, virtually unlimited [[Palette|color lookup tables]],{{ | + | * [[Sprite|Sprite/Texture]] capabilities: Rotation & scaling, flipping, distortion,{{fileref|ST-013-R3-061694.pdf}}{{ref|[https://github.com/mamedev/mame/blob/master/src/devices/video/stvvdp1.cpp STV VDP1 (MAME)]}} warping, vertical and horizontal line scrolling, virtually unlimited [[Palette|color lookup tables]],{{magref|nextgeneration|24|64}}{{ref|http://archive.is/cS0uM|http://www.sega-saturn.com/saturn/other/satspecs.htm}} [[Sega System 24|System 24]]/[[Sega System 32|32]] sprite rendering system{{intref|Sega System 24 Hardware Notes (2013-06-16)}} |
− | + | :* Sprite/Texture size: 8×1 to 504×255 [[texel]]s{{fileref|ST-013-R3-061694.pdf|page=119}} | |
− | + | :* Colors per sprite/texture in Lo-Res: 16, 64, 128, 256, and 32,768{{fileref|ST-013-R3-061694.pdf|page=18}} | |
− | + | :* Colors per sprite/texture in Hi-Res: 16, 64, 128, and 256{{fileref|ST-013-R3-061694.pdf|page=29}} | |
− | + | :* Maximum [[texel]]s per scanline: 1812 (NTSC),{{fileref|ST-013-R3-061694.pdf|page=52}} 1820 (PAL){{fileref|ST-013-R3-061694.pdf|page=64}} | |
− | + | :* Maximum sprites/textures per scanline: 226 (NTSC), 227 (PAL) | |
− | * [[wikipedia:Texture memory| | + | * [[wikipedia:Texture memory|Texture cache]] [[VRAM]]: 512 KB{{fileref|ST-013-R3-061694.pdf|page=81}} |
− | + | :* Sprite/Polygon size: 32 [[byte]]s (flat shading),{{fileref|ST-013-R3-061694.pdf|page=40}}{{fileref|ST-013-R3-061694.pdf|page=75}} 40 bytes (Gouraud shading),{{fileref|ST-013-R3-061694.pdf|page=39}} 64–96 bytes (shadows),{{fileref|ST-013-R3-061694.pdf|page=110}} 72–104 bytes (shadows, Gouraud shading) | |
− | + | :* Texture size: 4 bytes (8×1 texels, 16 colors) to 251.02 KB (504×255 texels, 32,758 colors){{fileref|ST-013-R3-061694.pdf|page=75}} | |
− | + | :* Maximum sprites per frame: 16,383 (virtually unlimited),{{magref|nextgeneration|24|64}} 13,106 (Gouraud shading), 5461–8191 (shadows) | |
− | + | :* Maximum polygons per frame: 16,384 (flat shading), 16,383 (texture mapping), 13,107 (Gouraud shading), 13,106 (texture mapping, Gouraud shading), 8192 (shadows), 8191 (texture mapping, shadows), 7281 (texture mapping, shadows, Gouraud shading) | |
− | * Framebuffer [[fillrate]]: 28.63636 [[Pixel|MPixels/s]] 16bpp | + | * Framebuffer [[fillrate]]: 28.63636 [[Pixel|MPixels/s]] (16bpp),{{ref|1 cycle per [[pixel]]{{fileref|ST-013-R3-061694.pdf|page=52}}{{fileref|ST-013-R3-061694.pdf|page=35}}{{fileref|ST-013-R3-061694.pdf|page=64}}|group=fn}} 35.6465 MPixels/s (8bpp){{ref|28.63636 MPixels/s draw, 14.418 MPixels/s erase/write{{fileref|ST-013-R3-061694.pdf|page=65}}{{fileref|ST-013-R3-061694.pdf|page=61}}|group=fn}} |
− | * | + | :* Gouraud shading: 28 MPixels/s (512×512 polygons), <br> 16 MPixels/s (10×10 polygons){{ref|164,576 Gouraud-shaded 10×10 polygons/sec: 57.27272 million parallel bus cycles/sec, 248 cycles overhead per polygon (16 cycles command table fetch,{{fileref|TUTORIAL.pdf|page=15}} 232 cycles Gouraud shading),{{fileref|TUTORIAL.pdf|page=8}} 348 cycles per polygon (100 cycles drawing per 100-pixel polygon){{intref|Saturn VDP1 hardware notes (2003-05-17)}}|group=fn}} |
− | + | :* Shadows/Translucency: 28 MPixels/s (VDP2 palette), 5 MPixels/s (RGB){{ref|Takes six times longer when using VDP1's RGB mode.{{fileref|ST-013-R3-061694.pdf|page=110}} When using VDP2 palette mode, the VDP1 draws shadowed/translucent objects at full speed.|group=fn}} | |
− | * | + | * [[Texel|Texture fillrate]]: 19 [[Texel|MTexels/s]] (504×255 textures), 14 MTexels/s (10×10 textures), 12 MTexels/s (8×8 textures){{ref|Drawing process is asynchronous,{{fileref|TUTORIAL.pdf|page=15}} commands/textures read from texture cache and pixels/texels written to rendering framebuffer in parallel (57.27272 million parallel bus cycles/sec),{{fileref|ST-013-R3-061694.pdf|page=44}} 148 textured 504×255 polygons/sec (386,905 parallel cycles per polygon), 136,363 textured 10×10 polygons/sec (420 parallel cycles per polygon), 189,644 textured 8×8 polygons/sec (302 parallel cycles per polygon){{fileref|TUTORIAL.pdf|page=8}}|group=fn}} |
− | + | :* Gouraud shading: 19 MTexels/s (504×255 textures), 9 MTexels/s (10×10 textures){{ref|57.27272 million parallel bus cycles/sec, 147 textured 504×255 polygons/sec (387,137 parallel cycles per polygon), 87,841 textured 10×10 polygons/sec (652 parallel cycles per polygon){{fileref|TUTORIAL.pdf|page=8}}{{intref|Saturn VDP1 hardware notes (2003-05-17)}}|group=fn}} | |
− | + | * Polygon rendering performance: Lighting{{fileref|ST-013-R3-061694.pdf|page=40}}{{ref|Flat shading: 16 cycles per polygon in 28.63636 MHz texture cache,{{fileref|TUTORIAL.pdf|page=15}} 1 cycle per pixel in 28.63636 MHz framebuffer|group=fn}} | |
− | + | :* 800,000 polygons/s: Flat shading, 32-[[pixel]] polygons | |
− | + | :* 500,000 polygons/s: Flat shading,{{magref|sv|24|14}}{{magref|nextgeneration|24|64}} 50-pixel polygons | |
− | + | :* 200,000 polygons/s: Gouraud shading, 32-pixel polygons{{ref|57.27272 million parallel bus cycles/sec, 248 cycles overhead per polygon (16 cycles command table fetch,{{fileref|TUTORIAL.pdf|page=15}} 232 cycles Gouraud shading),{{fileref|TUTORIAL.pdf|page=8}} 32 cycles drawing per 32-pixel polygon{{intref|Saturn VDP1 hardware notes (2003-05-17)}}|group=fn}} | |
− | + | * Texture mapping performance: Lighting{{fileref|ST-013-R3-061694.pdf|page=41}}{{intref|Saturn VDP1 hardware notes (2003-05-17)}} | |
− | + | :* 300,000 polygons/s: 32-[[texel]] textures{{ref|57.27272 million parallel bus cycles/sec, 171 parallel cycles per polygon{{fileref|TUTORIAL.pdf|page=8}}|group=fn}} | |
− | + | :* 200,000 polygons/s: 70-texel textures{{ref|200,000 texture-mapped polygons/sec,{{magref|sv|24|14}}{{magref|nextgeneration|24|64}} 57.27272 million parallel bus cycles/sec, 285 parallel cycles per polygon{{fileref|TUTORIAL.pdf|page=8}}|group=fn}} | |
+ | :* 140,000 polygons/s: Gouraud shading, 32-texel textures{{ref|57.27272 million parallel bus cycles/sec, 403 parallel cycles per polygon{{fileref|TUTORIAL.pdf|page=8}}{{intref|Saturn VDP1 hardware notes (2003-05-17)}}|group=fn}} | ||
}} | }} | ||
==Errata== | ==Errata== | ||
− | VDP1 transparency | + | The VDP1 supports per-pixel transparency (0% mask / 50% half / 100% opaque) between different polygons/sprites in the VDP1 framebuffer (such as shadows and a lot of particle effects in ''[[Loaded]]''), or between (at 4 to 32 levels of ratio transparency) VDP1 and VDP2 layers (including a lot of effects in games such as ''[[Silhouette Mirage]]'' and ''[[Guardian Heroes]]''), but not both at the same time, with the VDP2's transparency overriding the VDP1's transparency. There are several ways to overcome this issue. The most common method used by Saturn games is to fake transparency with [[wikipedia:Dither|dithering]], using a mesh that gets blended by a television's Composite or S-Video cable. Another method is using a VDP2 bitmap layer as an additional transparent framebuffer, copying transparent assets from the VDP1 framebuffer to a VDP2 bitmap framebuffer layer (e.g. the transparent polygons in ''[[Burning Rangers]]''). Another method possible is some type of software transparency approach, programming the CPU with software code, but there are no known games to do it. |
− | + | Another issue is that the VDP1 can take up to six times longer to draw translucent pixels than opaque pixels.{{fileref|ST-013-R3-061694.pdf|page=110}} The VDP2, in comparison, has no have penalty with use of transparency. The VDP1 can overcome its transparency performance issue by drawing paletted sprites/polygons, which use the VDP2's palette and transparency, without affecting performance. However, this wouldn't allow multi-layered transparency between sprites/polygons, which would require the use of the methods mentioned above. | |
− | + | The VDP1's half-transparency rendering feature also causes strips of pixels to be rewritten to the framebuffer for all 3D primitives, including polylines (only in corners), polygons, and distorted sprites, applying the transparency effect multiple times. It can be seen in a number of commercial games. Two examples include ''[[FIFA Road to World Cup 98 (Saturn)|FIFA Road to World Cup 98]]'' (glass wall in indoor stadium) and ''[[Lupin the 3rd: Pyramid no Kenja]]'' (enemies shadows and radar range). | |
==Foototes== | ==Foototes== | ||
Line 82: | Line 93: | ||
<references group="fn"/> | <references group="fn"/> | ||
}} | }} | ||
+ | |||
+ | ==Documentation== | ||
+ | <gallery> | ||
+ | ST-013-R3-061694.pdf|User's Manual (ST-013-R3-061694) | ||
+ | ST-013-SP1-052794.pdf|User's Manual Supplement (ST-013-SP1-052794) | ||
+ | </gallery> | ||
==References== | ==References== | ||
Line 89: | Line 106: | ||
[[Category:Saturn hardware]] | [[Category:Saturn hardware]] | ||
− |
Latest revision as of 14:26, 2 October 2020
![]() |
This article needs cleanup. This article needs to be edited to conform to a higher standard of article quality. After the article has been cleaned up, you may remove this message. For help, see the How to Edit a Page article. |
![]() |
VDP1 (Saturn) |
---|
Video Display Processor 1 (VDP1) is one of two graphics processing units housed within the Sega Saturn console. It is a custom integrated circuit used only in Saturn hardware, and the Saturn-derived Sega Titan Video arcade hardware.
VDP1 is typically responsible for rendering all "foreground" graphics, such as sprites and polygons (quads) along with texture mapping and Gouraud shading. It works in conjunction with a second graphics processor, VDP2, to render an image onto the screen.
![]() |
This article needs to be rewritten. This article needs to be rewritten to conform to a higher standard of article quality. After the article has been rewritten, you may remove this message. For help, see the How to Edit a Page article. |
The Sega Saturn is equipped with dual custom VDP chips for graphics processing. The VDP 1 chip is primarily responsible for sprite generation. Polygon generation is accomplished through manipulation of the sprite engine. Texture mapping and Gouraud shading is also handled by the VDP1. The VDP1 relies on a dual frame buffer that handles rotation and stores textures in special 512K cache.
Both the VDP1 and VDP2 32-bit background and scroll plane video display processor have direct access to the both SH2s, as well as direct memory access (DMA) to both the main and video RAM.
Overview
The VDP1 was based on the Sega Model series, with a quad polygon engine based on the Model 1, along with the Model 2's textured mapping capability. However, the way it maps textures onto quads is different from the Model 2. While the Model 2 maps a texture across multiple polygons, the VDP1 maps a single texture onto a single polygon. This allows the Saturn to render sprites and texture-mapped polygons in the same manner.[1] The VDP1's texture-mapped polygons are thus also similar to the Sega System 32's textures.
The VDP1 is capable of drawing more polygons than the Model 1, but less than the Model 2. The VDP1 renders quad polygons, which, despite being used by the most powerful gaming system at the time (Sega Model 2 arcade system), was not industry standard for 3D graphics, compared to the more widely used triangle polygons. The VDP1's quad polygons are drawn with forward texture mapping (a form of perspective correction), bilinear approximation (reduces texture warping), and medium polygon accuracy (resulting in seamless polygons).[2]
The VDP1 had issues with transparency. The VDP1 supports per-pixel transparency between different polygons/sprites in the VDP1 framebuffer, or between VDP1 and VDP2 layers, but not both at the same time, with the VDP2's transparency overriding the VDP1's transparency. In addition, the VDP1 takes six times longer to draw transparent pixels than opaque pixels.[3] There are several ways to overcome the VDP1's transparency issues. The most common method used by Saturn games is to fake transparency with dithering, using a mesh that gets blended by a television's Composite or S-Video cable. Another method is to use the VDP2's hardware transparency, by using a VDP2 bitmap layer as an additional transparent framebuffer, copying transparent assets from the VDP1 framebuffer to a VDP2 bitmap framebuffer layer (e.g. the transparent polygons in Burning Rangers). Another method possible is software transparency, programming the CPU with software code, but there are no known games to do so.
The Saturn's VDP1 was the basis for Nvidia's first graphics processor, the NV1, which was one of the first 3D graphics accelerators on PC, released in 1995. Like the Saturn, it uses quad polygons and supports forward texture mapping with limited perspective correction, and several Saturn ports are available for it. However, the NV1 has a fillrate of 12.5 MPixels/s and a rendering performance of 50,000 polygons/sec, less than the VDP1's 28.4375–57.2728 MPixels/s fillrate and 500,000 polygons/sec rendering performance. In comparison, the most powerful PC graphics card of 1995, Yamaha's Tasmania 3D, which was based on triangle polygons, had a 25 MPixels/s fillrate and 300,000 polygons/sec rendering throughput, more than the NV1, but less than the VDP1.
The VDP1's 3D polygons could be programmed to utilize per-vertex colored lighting and RGB point lights, such as in Panzer Dragoon Saga.
Technical specifications
- See also Sega Saturn/Technical specifications
- VDP1 @ 28.63636 MHz: Handles sprite/texture and polygon drawing,[1] color calculation and shading,[4] geometry[5]
- Versions: Sega 315‑5883 (Hitachi HD64440) Video Display Processor 1 (VDP1),[6] Sega 315‑5689 VDP1[4]
- Adjustable video clock rate: 28.63636 MHz or 26.8465875 MHz (NTSC),[7][8] 28.4375 MHz or 26.8426 MHz (PAL)[7]
- Parallel bus structure: 3 parallel data buses (dual framebuffers, texture cache), 48-bit bus width (16-bit per bus),[9] 171.8184 MB/s bandwidth[fn 1]
- Parallel bus cycles: 85.90908 million bus cycles/sec[fn 2]
- Rendering engine for primitives: textured and untextured polygons, untextured polylines and lines
- Sprites are textured polygons with specific rendering modes:
- Normal sprite (one point), shrunk/scaled sprite (two points), quadrangle (four points)
- Other rendering modes:
- Overwrite (replace framebuffer contents)
- Shadow (underlying framebuffer pixels rewritten with 1/2 brightness, primitive not drawn)
- Half luminosity (primitive rendered with 1/2 brightness)
- Half transparency (primitive and underlying framebuffer pixels averaged together)
- Gouraud shading for RGB-format textures only
- Dual 256 KB frame buffers
- Programmable frame buffer depth of 8 or 16 bits per pixel
- Automatic erase feature to clear framebuffer with single color
- 60 frames of animation per second
- Color palette: 32,768 colors (15-bit RGB) to 16,777,216 (24-bit VDP2 CRAM palette, accessible by VDP1)[11]
- Features: Alpha blending, clipping, luminance,[13] shadows,[14] transparency[15] (3 alpha levels, or 32 alpha levels using VDP2 palette),[12] per-pixel transparency[3]
- Polygon capabilities: Texture mapping,[1] lighting,[16][17] shading, wire‑frame, flat shading, Gouraud shading,[3][4][17] 15-bit color Gouraud shading,[18] 15-bit colored lighting, quad polygons, edge anti‑aliasing,[19] forward texture mapping (form of perspective correction), bilinear approximation (reduces texture warping), medium polygon accuracy (seamless polygons)[2]
- Framebuffer capabilities: Double buffering, dual 256 KB framebuffers, rotation & scaling,[13] VDP1 framebuffer can be rotated as bitmap layer by VDP2[20]
- Framebuffer resolution: 512×256, 512×512, 1024×256[21]
- Overscan resolution: 1708×263 (NTSC), 1820×313 (PAL), 852×525 (31KC), 848×562 (HDTV)[22]
- Sprite/Texture capabilities: Rotation & scaling, flipping, distortion,[1][13] warping, vertical and horizontal line scrolling, virtually unlimited color lookup tables,[5][23] System 24/32 sprite rendering system[24]
- Texture cache VRAM: 512 KB[28]
- Sprite/Polygon size: 32 bytes (flat shading),[29][30] 40 bytes (Gouraud shading),[31] 64–96 bytes (shadows),[3] 72–104 bytes (shadows, Gouraud shading)
- Texture size: 4 bytes (8×1 texels, 16 colors) to 251.02 KB (504×255 texels, 32,758 colors)[30]
- Maximum sprites per frame: 16,383 (virtually unlimited),[5] 13,106 (Gouraud shading), 5461–8191 (shadows)
- Maximum polygons per frame: 16,384 (flat shading), 16,383 (texture mapping), 13,107 (Gouraud shading), 13,106 (texture mapping, Gouraud shading), 8192 (shadows), 8191 (texture mapping, shadows), 7281 (texture mapping, shadows, Gouraud shading)
- Texture fillrate: 19 MTexels/s (504×255 textures), 14 MTexels/s (10×10 textures), 12 MTexels/s (8×8 textures)[fn 7]
- Gouraud shading: 19 MTexels/s (504×255 textures), 9 MTexels/s (10×10 textures)[fn 8]
Errata
The VDP1 supports per-pixel transparency (0% mask / 50% half / 100% opaque) between different polygons/sprites in the VDP1 framebuffer (such as shadows and a lot of particle effects in Loaded), or between (at 4 to 32 levels of ratio transparency) VDP1 and VDP2 layers (including a lot of effects in games such as Silhouette Mirage and Guardian Heroes), but not both at the same time, with the VDP2's transparency overriding the VDP1's transparency. There are several ways to overcome this issue. The most common method used by Saturn games is to fake transparency with dithering, using a mesh that gets blended by a television's Composite or S-Video cable. Another method is using a VDP2 bitmap layer as an additional transparent framebuffer, copying transparent assets from the VDP1 framebuffer to a VDP2 bitmap framebuffer layer (e.g. the transparent polygons in Burning Rangers). Another method possible is some type of software transparency approach, programming the CPU with software code, but there are no known games to do it.
Another issue is that the VDP1 can take up to six times longer to draw translucent pixels than opaque pixels.[3] The VDP2, in comparison, has no have penalty with use of transparency. The VDP1 can overcome its transparency performance issue by drawing paletted sprites/polygons, which use the VDP2's palette and transparency, without affecting performance. However, this wouldn't allow multi-layered transparency between sprites/polygons, which would require the use of the methods mentioned above.
The VDP1's half-transparency rendering feature also causes strips of pixels to be rewritten to the framebuffer for all 3D primitives, including polylines (only in corners), polygons, and distorted sprites, applying the transparency effect multiple times. It can be seen in a number of commercial games. Two examples include FIFA Road to World Cup 98 (glass wall in indoor stadium) and Lupin the 3rd: Pyramid no Kenja (enemies shadows and radar range).
Foototes
- ↑ [57.27272 MB/s per bus 57.27272 MB/s per bus]
- ↑ [28.63636 MHz texture cache VRAM, 28.63636 MHz draw/render framebuffer, 28.63636 MHz display/erase framebuffer[10] 28.63636 MHz texture cache VRAM, 28.63636 MHz draw/render framebuffer, 28.63636 MHz display/erase framebuffer[10]]
- ↑ [1 cycle per pixel[7][32][22] 1 cycle per pixel[7][32][22]]
- ↑ [28.63636 MPixels/s draw, 14.418 MPixels/s erase/write[33][34] 28.63636 MPixels/s draw, 14.418 MPixels/s erase/write[33][34]]
- ↑ [164,576 Gouraud-shaded 10×10 polygons/sec: 57.27272 million parallel bus cycles/sec, 248 cycles overhead per polygon (16 cycles command table fetch,[35] 232 cycles Gouraud shading),[36] 348 cycles per polygon (100 cycles drawing per 100-pixel polygon)[37] 164,576 Gouraud-shaded 10×10 polygons/sec: 57.27272 million parallel bus cycles/sec, 248 cycles overhead per polygon (16 cycles command table fetch,[35] 232 cycles Gouraud shading),[36] 348 cycles per polygon (100 cycles drawing per 100-pixel polygon)[37]]
- ↑ [Takes six times longer when using VDP1's RGB mode.[3] When using VDP2 palette mode, the VDP1 draws shadowed/translucent objects at full speed. Takes six times longer when using VDP1's RGB mode.[3] When using VDP2 palette mode, the VDP1 draws shadowed/translucent objects at full speed.]
- ↑ [Drawing process is asynchronous,[35] commands/textures read from texture cache and pixels/texels written to rendering framebuffer in parallel (57.27272 million parallel bus cycles/sec),[38] 148 textured 504×255 polygons/sec (386,905 parallel cycles per polygon), 136,363 textured 10×10 polygons/sec (420 parallel cycles per polygon), 189,644 textured 8×8 polygons/sec (302 parallel cycles per polygon)[36] Drawing process is asynchronous,[35] commands/textures read from texture cache and pixels/texels written to rendering framebuffer in parallel (57.27272 million parallel bus cycles/sec),[38] 148 textured 504×255 polygons/sec (386,905 parallel cycles per polygon), 136,363 textured 10×10 polygons/sec (420 parallel cycles per polygon), 189,644 textured 8×8 polygons/sec (302 parallel cycles per polygon)[36]]
- ↑ [57.27272 million parallel bus cycles/sec, 147 textured 504×255 polygons/sec (387,137 parallel cycles per polygon), 87,841 textured 10×10 polygons/sec (652 parallel cycles per polygon)[36][37] 57.27272 million parallel bus cycles/sec, 147 textured 504×255 polygons/sec (387,137 parallel cycles per polygon), 87,841 textured 10×10 polygons/sec (652 parallel cycles per polygon)[36][37]]
- ↑ [Flat shading: 16 cycles per polygon in 28.63636 MHz texture cache,[35] 1 cycle per pixel in 28.63636 MHz framebuffer Flat shading: 16 cycles per polygon in 28.63636 MHz texture cache,[35] 1 cycle per pixel in 28.63636 MHz framebuffer]
- ↑ [57.27272 million parallel bus cycles/sec, 248 cycles overhead per polygon (16 cycles command table fetch,[35] 232 cycles Gouraud shading),[36] 32 cycles drawing per 32-pixel polygon[37] 57.27272 million parallel bus cycles/sec, 248 cycles overhead per polygon (16 cycles command table fetch,[35] 232 cycles Gouraud shading),[36] 32 cycles drawing per 32-pixel polygon[37]]
- ↑ [57.27272 million parallel bus cycles/sec, 171 parallel cycles per polygon[36] 57.27272 million parallel bus cycles/sec, 171 parallel cycles per polygon[36]]
- ↑ [200,000 texture-mapped polygons/sec,[39][5] 57.27272 million parallel bus cycles/sec, 285 parallel cycles per polygon[36] 200,000 texture-mapped polygons/sec,[39][5] 57.27272 million parallel bus cycles/sec, 285 parallel cycles per polygon[36]]
- ↑ [57.27272 million parallel bus cycles/sec, 403 parallel cycles per polygon[36][37] 57.27272 million parallel bus cycles/sec, 403 parallel cycles per polygon[36][37]]
Documentation
References
- ↑ 1.0 1.1 1.2 1.3 File:ST-013-R3-061694.pdf
- ↑ 2.0 2.1 http://www.shinforce.com/saturn/information/3D-Capabilities.htm (Wayback Machine: 2006-03-03 16:43)
- ↑ 3.0 3.1 3.2 3.3 3.4 3.5 File:ST-013-R3-061694.pdf, page 110
- ↑ 4.0 4.1 4.2 File:Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf
- ↑ 5.0 5.1 5.2 5.3 5.4 Next Generation, "December 1996" (US; 1996-11-19), page 64
- ↑ Sega Saturn (MAME)
- ↑ 7.0 7.1 7.2 7.3 File:ST-013-R3-061694.pdf, page 52
- ↑ Sega Saturn hardware notes (2004-04-27)
- ↑ File:Sega Service Manual - Sega Saturn (PAL) - 013-1 - June 1995.pdf, page 34
- ↑ File:ST-013-R3-061694.pdf, page 6
- ↑ File:TUTORIAL.pdf, page 11
- ↑ 12.0 12.1 File:ST-TECH.pdf, page 147
- ↑ 13.0 13.1 13.2 STV VDP1 (MAME)
- ↑ File:ST-TECH.pdf, page 135
- ↑ File:ST-013-R3-061694.pdf, page 34
- ↑ File:ST-238-R1-051795.pdf
- ↑ 17.0 17.1 File:ST-238-R1-051795.pdf, page 232
- ↑ 18.0 18.1 File:ST-013-R3-061694.pdf, page 41
- ↑ File:ST-013-R3-061694.pdf, page 24
- ↑ File:ST-058-R2-060194.pdf, page 177
- ↑ File:ST-013-R3-061694.pdf, page 149
- ↑ 22.0 22.1 22.2 File:ST-013-R3-061694.pdf, page 64
- ↑ http://www.sega-saturn.com/saturn/other/satspecs.htm (archive.today)
- ↑ Sega System 24 Hardware Notes (2013-06-16)
- ↑ File:ST-013-R3-061694.pdf, page 119
- ↑ File:ST-013-R3-061694.pdf, page 18
- ↑ File:ST-013-R3-061694.pdf, page 29
- ↑ File:ST-013-R3-061694.pdf, page 81
- ↑ 29.0 29.1 File:ST-013-R3-061694.pdf, page 40
- ↑ 30.0 30.1 File:ST-013-R3-061694.pdf, page 75
- ↑ File:ST-013-R3-061694.pdf, page 39
- ↑ File:ST-013-R3-061694.pdf, page 35
- ↑ File:ST-013-R3-061694.pdf, page 65
- ↑ File:ST-013-R3-061694.pdf, page 61
- ↑ 35.0 35.1 35.2 35.3 File:TUTORIAL.pdf, page 15
- ↑ 36.0 36.1 36.2 36.3 36.4 36.5 36.6 File:TUTORIAL.pdf, page 8
- ↑ 37.0 37.1 37.2 37.3 37.4 Saturn VDP1 hardware notes (2003-05-17)
- ↑ File:ST-013-R3-061694.pdf, page 44
- ↑ 39.0 39.1 Sega Visions, "May 1995" (US; 1995-xx-xx), page 14