3 # netrpc - use your PS3 as a slave for Python code
5 # Copyright (C) 2010-2011 Hector Martin "marcan" <hector@marcansoft.com>
7 # This code is licensed to you under the terms of the GNU GPL, version 2;
8 # see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
15 ps3host
= os
.environ
.get("PS3HOST", "ps3")
16 p
= LV1Client(ps3host
)
26 mem_handle
, ddr_lpar
= p
.lv1_gpu_memory_allocate(254<<20, 0, 0, 0, 0);
27 p
.add_mmio(ddr_lpar
, 254<<20)
30 ctx_handle
, ctrl_lpar
, drv_lpar
, rep_lpar
, rep_size
= p
.lv1_gpu_context_allocate(mem_handle
, 0)
32 p
.add_mmio(ctrl_lpar
, ctrl_size
)
34 print "Memory handle: 0x%x"%mem_handle
35 print "Context handle: 0x%x"%ctx
_handle
40 xdr_size
= 1024*1024*16
41 xdr_lpar
, muid
= p
.lv1_allocate_memory(xdr_size
, 20, 0, 0)
47 xfb_size
= xdr_size
- fifo_size
48 xfb_ioif
= xdr_ioif
+ fifo_size
49 xfb_lpar
= xdr_lpar
+ fifo_size
51 p
.lv1_gpu_context_iomap(ctx_handle
, xdr_ioif
, xdr_lpar
, xdr_size
, \
52 CBE_IOPTE_PP_W | CBE_IOPTE_PP_R | CBE_IOPTE_M
)
54 #p.lv1_gpu_fb_setup(ctx_handle, fifo_lpar, fifo_size, fifo_ioif)
56 fifo
= RSXFIFO(p
, ctx_handle
, ctrl_lpar
, fifo_lpar
, fifo_ioif
, fifo_size
)
60 fb
= RSXFB(p
, off
, ddr_lpar
, 800, 600)
62 off
= (off
+0xff)&~
0xff
63 fragprog_buf
= RSXBuffer(p
, off
, ddr_lpar
, 0x1000)
65 print "Clearing FB..."
66 p
.memset32(ddr_lpar
, ~
0xdeadbeef, fb
.size
)
67 print "Testing FIFO..."
69 for i
in range(0x1000):
77 print "Initializing 3D..."
79 render
= RSX3D(fifo
, fb
, fragprog_buf
)
86 print "Rendering some random triangles..."
88 render
.begin_triangles()
97 cx
= random
.randrange(64, 512-64)
98 cy
= random
.randrange(64, 512-64)
99 cr
= random
.uniform(0, 2*math
.pi
)
103 xp
= x
*math
.cos(cr
) - y
*math
.sin(cr
)
104 yp
= x
*math
.sin(cr
) + y
*math
.cos(cr
)
105 render
.vertex3(xp
*size
+ cx
, yp
*size
+ cy
, 0)
112 print "Reading FB..."
114 #p.lv1_gpu_fb_blit(ctx_handle, 0, fifo_ioif, (fb.w<<16)|fb.h, fb.pitch)
120 if xdr_lpar
is not None:
121 p
.lv1_release_memory(xdr_lpar
)