changeset 985:e40dd2384357

fix light data update
author root@henri.cr.ie.u-ryukyu.ac.jp
date Fri, 01 Oct 2010 02:49:38 +0900
parents df5185513c2d
children ac437c3cf766 30f2e77ecb36
files Renderer/Engine/main.cc Renderer/Engine/spe/DataUpdate.cc Renderer/Engine/task/DataUpdate.cc Renderer/Engine/viewer.cc Renderer/Engine/viewerPS3.cc
diffstat 5 files changed, 32 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/main.cc	Fri Oct 01 01:25:45 2010 +0900
+++ b/Renderer/Engine/main.cc	Fri Oct 01 02:49:38 2010 +0900
@@ -62,6 +62,8 @@
 	      vtype = VTYPE_GL;
 	    } else if  (strcmp(argv[i+1], "ps3") == 0) {
 	      vtype = VTYPE_PS3;
+	    } else if  (strcmp(argv[i+1], "sdl") == 0) {
+	      vtype = VTYPE_SDL;
 	    }
 	    i++;
 	}
--- a/Renderer/Engine/spe/DataUpdate.cc	Fri Oct 01 01:25:45 2010 +0900
+++ b/Renderer/Engine/spe/DataUpdate.cc	Fri Oct 01 02:49:38 2010 +0900
@@ -10,12 +10,14 @@
 run(SchedTask *s, void *rbuf, void *wbuf)
 {
 
-  void *idata = (void*)s->get_input(rbuf, 0);
-  long size = (long)s->get_param(0);
-  long load_id = (long)s->get_param(1);
-  void *global_data = (void*)s->global_get(load_id);
-
-  memcpy(global_data,idata,size);
+  long count = (long)s->get_param(0);
+  long id_base = (long)s->get_param(1);
+  for(int i=0; i<count; i++) {
+      void *idata = (void*)s->get_input(rbuf, i);
+      long size = (long)s->get_inputSize(i);
+      void *global_data = (void*)s->global_get(id_base+i);
+      memcpy(global_data,idata,size);
+  }
 
   return 0;
 }
--- a/Renderer/Engine/task/DataUpdate.cc	Fri Oct 01 01:25:45 2010 +0900
+++ b/Renderer/Engine/task/DataUpdate.cc	Fri Oct 01 02:49:38 2010 +0900
@@ -9,12 +9,15 @@
 static int
 run(SchedTask *s, void *rbuf, void *wbuf)
 {
-  void *idata = (void*)s->get_input(rbuf, 0);
-  long size = (long)s->get_param(0);
-  long load_id = (long)s->get_param(1);
-  void *global_data = (void*)s->global_get(load_id);
-  
-  memcpy(global_data,idata,size);
+
+  long count = (long)s->get_param(0);
+  long id_base = (long)s->get_param(1);
+  for(int i=0; i<count; i++) {
+      void *idata = (void*)s->get_input(rbuf, i);
+      long size = (long)s->get_inputSize(i);
+      void *global_data = (void*)s->global_get(id_base+i);
+      memcpy(global_data,idata,size);
+  }
 
   return 0;
 }
--- a/Renderer/Engine/viewer.cc	Fri Oct 01 01:25:45 2010 +0900
+++ b/Renderer/Engine/viewer.cc	Fri Oct 01 02:49:38 2010 +0900
@@ -762,24 +762,6 @@
     game_task->spawn();
 }
 
-HTaskPtr
-Viewer::update_task_create(void *data, int size, 
-			   int load_id, int spe_id, HTaskPtr wait)
-{
-
-	HTaskPtr data_update = manager->create_task(DataUpdate);
-	data_update->add_inData(data,size);
-	data_update->set_param(0,size);
-	data_update->set_param(1,load_id);
-	data_update->set_cpu((CPU_TYPE)(spe_id));
-	if (wait != NULL) {
-	  wait->wait_for(data_update);
-	}
-	data_update->spawn();
-
-	return data_update;
-
-}
 
 void
 Viewer::common_draw(HTaskPtr task_next)
@@ -790,8 +772,6 @@
 
     //Light info update
                                                                    
-    //HTaskPtr data_update;
-    HTaskPtr data_update_wait;
     int light_num = 4;
     int size = sizeof(float)*4*light_num; //xyz+alpha(4) * light_num(4) 
     int light_size = size / sizeof(float);
@@ -805,28 +785,20 @@
     }
 
     light_sysswitch[0] = light_sysswitch_stock;
- 
-    data_update_wait = manager->create_task(DataUpdate);
-    data_update_wait->add_inData(light_xyz,size);
-    data_update_wait->set_param(0,size);
-    data_update_wait->set_param(1,Light);
-    data_update_wait->set_cpu((CPU_TYPE)((int)SPE_0));
-      
-    for (int i = 1; i < spe_num; i++) {
-      update_task_create(light_xyz,size,Light,(int)SPE_0+i,data_update_wait);
+
+
+    HTask *data_update_wait = 0;
+    for (int i = 0; i < spe_num; i++) {
+	data_update_wait = manager->create_task(DataUpdate);
+	data_update_wait->set_param(0,3);
+	data_update_wait->set_param(1,Light);              // GlobalSet ID base
+	data_update_wait->set_inData(0,light_xyz,size);                           // Light
+	data_update_wait->set_inData(1,light_switch,light_num * sizeof(int));     // LightSwitch = Light+1
+	data_update_wait->set_inData(2,light_sysswitch,16);                       // LightSysSwitch = Light+2
+        data_update_wait->set_cpu((CPU_TYPE)(SPE_0+i));
+	data_update_wait->spawn();
     }
 
-    size = light_num * sizeof(int);
-
-    for (int i = 0; i < spe_num; i++) {
-      update_task_create(light_switch,size,LightSwitch,(int)SPE_0+i,data_update_wait);
-    }
-
-    size = 16; // LightSysSwitch は 4byte. 残り 12byte は DMA転送の為のパディング
-
-    for (int i = 0; i < spe_num; i++) {
-      update_task_create(light_sysswitch,size,LightSysSwitch,(int)SPE_0+i,data_update_wait);
-    }
     
     ppack->clear();
 
@@ -881,7 +853,6 @@
 	  task_draw_array->spawn_task_array(task_draw->next());
 	  task_draw_array->set_cpu(SPE_ANY);
 	  task_next->wait_for(task_draw_array);
-	  task_draw_array->wait_for(data_update_wait);
 	  task_draw_array->spawn();
 
 	  
@@ -930,7 +901,6 @@
 
 	    task_draw->set_cpu(SPE_ANY);
             task_next->wait_for(task_draw);
-	    task_draw->wait_for(data_update_wait);
             task_draw->spawn();
 
             startx += split_screen_w;
@@ -944,7 +914,6 @@
 
     } 
 
-    data_update_wait->spawn();  
     if (profile) {
 	if (frames % 50 == 49) {
 	   manager->show_profile();
--- a/Renderer/Engine/viewerPS3.cc	Fri Oct 01 01:25:45 2010 +0900
+++ b/Renderer/Engine/viewerPS3.cc	Fri Oct 01 02:49:38 2010 +0900
@@ -80,7 +80,7 @@
 ViewerPS3::flip_screen(uint32_t *old)
 {
         // At the vsync, the previous frame is finished sending to the CRT
-        cp_fb_wait_vsync( &fb );
+        // cp_fb_wait_vsync( &fb );
 
         // Send the frame just drawn to the CRT by the next vblank
         cp_fb_flip( &fb, frame_ndx );