GPU

From Free60 Project

The Xbox 360 has a custom ATI R500 based GPU called: "Xenos". It also functions as the system's Northbridge.

Specs

  • 337 million transistors total
  • 500 MHz parent GPU (90 nm process, 232 million transistors)
    • Unified shader architecture (This means that each pipeline is capable of running either pixel or vertex shaders).
    • 48-way parallel floating-point dynamically-scheduled shader pipelines (4 ALU's per pipe for Vertex or Pixel Shader processing)
      • Shader performance: 96 billion shader operations per second
      • 192 Shader operations per cycle across the entire shader array
      • 4 Shader operations per pipeline per cycle
      • Support for DirectX 9.0 Shader Model 3.0, limited support for future DirectX 10 shader models
    • Pixel fillrate: 16 gigasamples per second fillrate using 4X MSAA
    • Dot product operations: 9.6 billion per second theoretical maximum (Microsoft figure), 33.6 billion per second when combined with CPU power (theoretical maximum)
    • Maximum polygon performance: 500 million triangles per second
    • 16 Filtered & 16 unfiltered texture samples per clock
  • 500 MHz 10 MB daughter embedded DRAM Framebuffer (90 nm process, 105 million transistors)
    • NEC designed eDRAM has internal logic for Color, Alpha blending, Z/Stencil buffering, and Anti-aliasing
  • 256 GB/s eDRAM internal logic to eDRAM internal memory bandwidth
  • 32 GB/s GPU to eDRAM bandwidth (2 GHz, 2 accesses per clock cycle on a 64 bit DDR bus)
  • 22.4 GB/s memory interface bus bandwidth (700 MHz,— 2 accesses per clock cycle (one per edge) on a 128 bit bus)

Linux Support

  • Currently, we have support for the framebuffer console.
  • We also have an unaccelerated X driver.
  • We don't yet have support for acceleration, neither 2D nor 3D, but there is ongoing work (http://x226.org/?p=38)
  • Rudimentary video mode setup code exists in XeLL and the Linux framebuffer driver. There are though problems with interlaced modes.

Framebuffer Code

Unfortunately, the framebuffer memory is not linear (i.e. pixels are not stored one after another, line after line). The memory is organized in tiles of 32x32 pixels, where in each tile blocks of 4x1 pixels are scattered around. Every pixel is stored as a 32 bit RGBx tuple.

The tiling breaks most framebuffer applications which require linear access, causing heavily distorted pictures. This could maybe be fixed by writing custom blit routines in xenos_fb. Are there any apps using the framebuffer blit functions, or is everybody mmap()ing? -- Ge0rG 15:03, 21 Jan 2008 (PST)