# HG changeset patch # User root@henri.cr.ie.u-ryukyu.ac.jp # Date 1285868978 -32400 # Node ID e40dd238435777205592139185c211a576c6a0c4 # Parent df5185513c2d8525488e349b7fb34176e10730c0 fix light data update diff -r df5185513c2d -r e40dd2384357 Renderer/Engine/main.cc --- 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++; } diff -r df5185513c2d -r e40dd2384357 Renderer/Engine/spe/DataUpdate.cc --- 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; iget_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; } diff -r df5185513c2d -r e40dd2384357 Renderer/Engine/task/DataUpdate.cc --- 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; iget_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; } diff -r df5185513c2d -r e40dd2384357 Renderer/Engine/viewer.cc --- 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(); diff -r df5185513c2d -r e40dd2384357 Renderer/Engine/viewerPS3.cc --- 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 );