PS3 GPU Driver: Difference between revisions

From PS3 Developer wiki
Jump to navigation Jump to search
Line 104: Line 104:
The last touches:
The last touches:
<pre>
<pre>
# Load the ps3gpu driver
kldload ./ps3gpu.ko                          # as root
# Copy xorg.conf
cp xorg_accel.conf /etc/X11/xorg.conf        # as root
cp xorg_accel.conf /etc/X11/xorg.conf        # as root
echo "exec blackbox" > ~/.xinitrc
echo "exec blackbox" > ~/.xinitrc
startx
startx



Revision as of 16:43, 29 September 2012

Introduction

  • FreeBSD character device which gives you direct access to PS3 GPU from user-space.

Features

  • Upto 3 GPU contexts simultaneously (LV1 limit is 3 contexts per LPAR).
  • Direct control of GPU FIFO from user-space.
  • Support of hardware cursors.
  • Dynamic allocation of GART memory.
  • Mapping of GART memory into GPU address space is done by the driver. That means user-space applications do not have to worry about it.
  • Access to GART and VRAM memory through mmap syscall.
  • Heap management for GART and VRAM memory.
  • Support of display buffers.

Kernel Driver

Requirements

  • You have to patch your LV1 and enable 4KB GPU IO page size support else ps3gpu won't work.
  • You can either patch your LV1 permanently (e.g. with my ps3mfw task for LV1) or do it at run-time with my gpu_4kb_iopage.sh script.
  • By default, LV1 supports 1MB and 64KB GPU IO page sizes but we need 4KB page size.
  • gpu_4kb_iopage.sh should work with my petitboot and my Linux kernels and even on FreeBSD if you load ps3physmem driver before using the script.
  • http://gitorious.ps3dev.net/ps3otheros/scripts

Building

  • You can cross-compile the kernel module or build it natively on PS3 FreeBSD.
  • The kernel module and the kernel should match. That means the kernel module should be build against the same kernel source else the kernel module cannot be loaded (The same applies on Linux).
cd /usr/devel
env MAKEOBJDIRPREFIX=/usr/obj/PS3 SYSDIR=/usr/devel/sys make TARGET=powerpc TARGET_ARCH=powerpc64 buildenv
cd /home/glevand/ps3gpu
make
ls -l ps3gpu.ko

Test

kldload ./ps3gpu.ko

cd ps3gpu_test
make

sudo ./ps3gpu_test
context id 0
control handle 0x10000000000 size 4096
fifo handle 0x40000000000 gpu addr 0x08d000000
FIFO put 0x0d000000 get 0x0d000000 ref 0xdeadbabe
reset GPU state handle 0x50000000000 gpu addr 0x0d010000
FIFO put 0x0d00000c get 0x0d00000c ref 0xcafef00d
VRAM handle 0x60000000000 gpu addr 0x00000000
cursor handle 0x70000000000 gpu addr 0x00900000

To restore your console:

vidcontrol < /dev/ttyv0 80x25

Screenshots

X11 Driver

Building

First install xorg port on your PS3. It will take a long time:

cd /usr/ports/x11/xorg
make BATCH=yes install clean

# And install some window manager, e.g. blackbox

cd /usr/ports/x11-wm/blackbox
make BATCH=yes install clean

# Also install scrot to make screenshots

cd /usr/ports/graphics/scrot
make BATCH=yes install clean

Now compile the X11 driver:

cd xf86-video-ps3gpu
./autogen.sh
./configure
make
make install           # as root

The last touches:

# Load the ps3gpu driver
kldload ./ps3gpu.ko                          # as root

# Copy xorg.conf

cp xorg_accel.conf /etc/X11/xorg.conf        # as root

echo "exec blackbox" > ~/.xinitrc

startx

# Now you should see the blackbox desktop !!!

xorg_accel.conf

  • Acceleration enabled.

Section "ServerFlags"
	Option		"AllowEmptyInput" "False"
EndSection

Section "ServerLayout"
	Identifier     "X.org Configured"
	Screen		0 "Screen0" 0 0
	InputDevice    "Mouse0" "CorePointer"
	InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "Files"
       	ModulePath	"/usr/local/lib/xorg/modules"
       	FontPath    	"/usr/local/lib/X11/fonts/misc/"
       	FontPath    	"/usr/local/lib/X11/fonts/TTF/"
       	FontPath    	"/usr/local/lib/X11/fonts/OTF"
       	FontPath    	"/usr/local/lib/X11/fonts/Type1/"
      	FontPath    	"/usr/local/lib/X11/fonts/100dpi/"
	FontPath    	"/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
	Load		"GLcore"
	Load		"dbe"
	Load		"dri"
	Load		"extmod"
	Load		"glx"
	Load		"record"
	Load		"shadow"
	Load		"freetype"
	Load		"type1"
EndSection

Section "InputDevice"
	Identifier	"Keyboard0"
	Driver		"kbd"
EndSection

Section "InputDevice"
	Identifier	"Mouse0"
  	Driver     	"mouse"
  	Option	   	"Protocol" "auto"
  	Option	   	"Device" "/dev/sysmouse"
  	Option	   	"ZAxisMapping" "4 5 6 7"
EndSection

Section "Monitor"
	Identifier	"Monitor0"
	VendorName	"Monitor Vendor"
	ModelName	"Monitor Model"
	HorizSync	30-75
	VertRefresh	60-90
EndSection

Section "Device"
	Identifier	"Card0"
	Driver		"ps3gpu"
	Option		"ShadowFB" "False"
	Option		"SWcursor" "False"
	Option		"NoAccel" "False"
EndSection

Section "Screen"
	Identifier     "Screen0"
	Device         "Card0"
	Monitor        "Monitor0"
	DefaultDepth	24
	SubSection     "Display"
		Modes		"1920x1080"
		Viewport	0 0
		Depth		24
	EndSubSection
EndSection

Test

Screenshots

Future Work

  • Use ps3gpu driver for syscons.

Links