Editing PS3 GPU Driver

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
[[Category:OtherOS]]
=Introduction=
=Introduction=


Line 23: Line 22:
* You have to patch your LV1 and enable 4KB GPU IO page size support else ps3gpu won't work.
* 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.
* 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. The reason for this is that it's very hard to allocate 1MB or 64KB continuous memory chunk in FreeBSD kernel (same applies for Linux).
* 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.
* 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
* http://gitorious.ps3dev.net/ps3otheros/scripts
Line 44: Line 43:
* ps3gpu_test is a user-space application for testing ps3gpu kernel driver.
* ps3gpu_test is a user-space application for testing ps3gpu kernel driver.
* The application demonstrates how to allocate GART and VRAM memory, how to load, set and move cursor and how to flip.
* The application demonstrates how to allocate GART and VRAM memory, how to load, set and move cursor and how to flip.
* It shows you how to use RSX FIFO and send commands.
* It shows you how to use RSX DMA engine for memory copying (used e.g. in X11 driver all the time).
* It shows how to load vertex and fragment programs, draw vertices and flip displlay buffers.
* It shows how to use textures.
* http://gitorious.ps3dev.net/ps3freebsd/ps3gpu_test
* http://gitorious.ps3dev.net/ps3freebsd/ps3gpu_test


Line 56: Line 51:
make
make


sudo ./vram_dma
sudo ./ps3gpu_test
context id 0
context id 0
control handle 0x10000000000 size 4096
control handle 0x10000000000 size 4096
Line 71: Line 66:
vidcontrol < /dev/ttyv0 80x25
vidcontrol < /dev/ttyv0 80x25
</pre>
</pre>
==Tiling==
* We have to use a different video pitch.
* Use e.g. ps3dm VUART driver and ps3vuart-tools to set video pitch allowed for tiling.


==Screenshots==
==Screenshots==
* The square in the middle of the screen is the source.
* The square on the left was copied from the source by RSX DMA using positive pitches, from top to bottom.
* The square on the right was copied from the source by RSX DMA using negative pitches, from bottom to top.
* Unfortunately it's not possible to make a screenshot of hardware cursor by dumping video ram content because hardware cursor is overlayed.
vram_dma Example:
[[Image:Freebsd_ps3gpu_test.jpg|300px|Image: 300 pixels]]
triangle Example:
[[Image:Freebsd_ps3gpu_test_triangle.jpg|300px|Image: 300 pixels]]
quad Example:
[[Image:Freebsd_ps3gpu_test_quad.jpg|300px|Image: 300 pixels]]
texture Example:
[[Image:Freebsd_ps3gpu_test_texture.jpg|300px|Image: 300 pixels]]


=X11 Driver=
=X11 Driver=


* You need this driver to run X11 server on PS3.
* You need this driver to run X11 server on PS3.
* The driver supports hardware acceleration through X11 EXA interface.
* Currently the driver uses only RSX DMA engine to copy memory.
* http://gitorious.ps3dev.net/ps3freebsd/xf86-video-ps3gpu
* http://gitorious.ps3dev.net/ps3freebsd/xf86-video-ps3gpu
* The driver is still work in progress but is usable. Expect to see some artefacts :)
* Please report any problems and bugs to my.


==Building==
==Building==
Line 119: Line 84:


cd /usr/ports/x11-wm/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
make BATCH=yes install clean
</pre>
</pre>
Line 134: Line 94:
make
make
make install          # as root
make install          # as root
</pre>
The last touches:
<pre>
cp xorg_accel.conf /etc/X11/xorg.conf        # as root
echo "exec blackbox" > ~/.xinitrc
startx
# Now you should see the blackbox desktop !!!
</pre>
</pre>


Line 218: Line 187:


==Test==
==Test==
<pre>
# 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 !!!
</pre>


==Screenshots==
==Screenshots==
* X11 and ps3gpu on FreeBSD 9.1 in action.
[[Image:Freebsd_91_x11_ps3gpu.png|300px|Image: 300 pixels]]


=Future Work=
=Future Work=


* Create a cool application which demonstrates some 3D stuff using ps3gpu
* Use ps3gpu driver for syscons.
* Use ps3gpu driver for syscons.


Line 249: Line 197:


* http://www.freebsd.org/cgi/cvsweb.cgi
* http://www.freebsd.org/cgi/cvsweb.cgi
* http://www.virtuousgeek.org/exa-driver.txt
{{BSD}}<noinclude>[[Category:Main]]</noinclude>
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)

Templates used on this page: