# HG changeset patch # User Shinji KONO # Date 1258223658 -32400 # Node ID 5b178db5988a61348b8edc04b6b2c0d8bbf6a88c # Parent 55ed910d13c21b7cc81228ecb0cf2480f49bd947 Cell fix diff -r 55ed910d13c2 -r 5b178db5988a Renderer/Engine/Func.h --- a/Renderer/Engine/Func.h Sun Nov 15 02:05:33 2009 +0900 +++ b/Renderer/Engine/Func.h Sun Nov 15 03:34:18 2009 +0900 @@ -28,6 +28,8 @@ Switch, ChainMove, + ChainCal, + ChainInit, RUN_FINISH, diff -r 55ed910d13c2 -r 5b178db5988a Renderer/Engine/spe/DrawSpan.cc --- a/Renderer/Engine/spe/DrawSpan.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/Renderer/Engine/spe/DrawSpan.cc Sun Nov 15 03:34:18 2009 +0900 @@ -47,6 +47,12 @@ // static void drawLine2(SchedTask *smanager, SpanPtr span, int startx, int endx, int js, int wait_tag); static int infinity_light_calc(int color,float normal_x, float normal_y, float normal_z); +static float +innerProduct1(float *v0, float *v1) +{ + return (v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2]); +} + /** * テクスチャは、TEXTURE_SPLIT_PIXEL^2 のブロックに分割する @@ -379,7 +385,7 @@ #endif // 法線ベクトルと光源ベクトルとの内積をとる - inner_product = innerProduct(normal_vector,light_vector); + inner_product = innerProduct1(normal_vector,light_vector); // 内積がマイナスの場合は色がない。 flag = (inner_product > 0); diff -r 55ed910d13c2 -r 5b178db5988a Renderer/Engine/spe/spe-main.cc --- a/Renderer/Engine/spe/spe-main.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/Renderer/Engine/spe/spe-main.cc Sun Nov 15 03:34:18 2009 +0900 @@ -25,7 +25,7 @@ SchedRegister( LoadTexture); SchedRegister( SetTexture); SchedRegister( DrawSpan); - SchedRegister( DrawSpanEnd); + // SchedRegister( DrawSpanEnd); SchedRegister( ChainCal); SchedRegister( ChainInit); diff -r 55ed910d13c2 -r 5b178db5988a Renderer/Engine/task/DrawSpan.cc --- a/Renderer/Engine/task/DrawSpan.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/Renderer/Engine/task/DrawSpan.cc Sun Nov 15 03:34:18 2009 +0900 @@ -47,6 +47,12 @@ // static void drawLine2(SchedTask *smanager, SpanPtr span, int startx, int endx, int js, int wait_tag); static int infinity_light_calc(int color,float normal_x, float normal_y, float normal_z); +static float +innerProduct1(float *v0, float *v1) +{ + return (v0[0]*v1[0] + v0[1]*v1[1] + v0[2]*v1[2]); +} + /** * テクスチャは、TEXTURE_SPLIT_PIXEL^2 のブロックに分割する @@ -379,7 +385,7 @@ #endif // 法線ベクトルと光源ベクトルとの内積をとる - inner_product = innerProduct(normal_vector,light_vector); + inner_product = innerProduct1(normal_vector,light_vector); // 内積がマイナスの場合は色がない。 flag = (inner_product > 0); diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Cell/CellTaskManagerImpl.cc --- a/TaskManager/Cell/CellTaskManagerImpl.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Sun Nov 15 03:34:18 2009 +0900 @@ -6,6 +6,7 @@ #include "CellTaskManagerImpl.h" #include "CellTaskListInfo.h" #include "HTaskInfo.h" +#include "SchedTask.h" #include "PpeScheduler.h" #include "types.h" @@ -221,7 +222,7 @@ //__debug_ppe("[PPE] MALLOCED 0x%x from [SPE %d]\n", alloc_info[1],id); speThreads->add_output_tasklist(command, alloc_info[1], alloc_size); - speThreads->send_mail(id, 2, (memaddr *)alloc_info); + speThreads->send_mail(id, 2, alloc_info); } else if (data > MY_SPE_NOP) { //__debug_ppe("[PPE] recv from [SPE %d] : 0x%x\n", id, data); HTaskPtr task = (HTaskPtr)data; @@ -275,7 +276,7 @@ taskListImpl->clear_taskList(speTaskList_bg[id]); //speThreads->send_mail(id, 1, (unsigned int *)&speTaskList[id]); - speThreads->send_mail(id, 1, (memaddr *)&speTaskList[id]); + speThreads->send_mail(id, 1, (unsigned int *)&speTaskList[id]); flag_sendTaskList[id] = 0; } diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Cell/SpeThreads.cc --- a/TaskManager/Cell/SpeThreads.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Cell/SpeThreads.cc Sun Nov 15 03:34:18 2009 +0900 @@ -6,7 +6,7 @@ SpeThreads::~SpeThreads(void) { - memaddr mail = MY_SPE_COMMAND_EXIT; + unsigned int mail = MY_SPE_COMMAND_EXIT; int ret; for (int i = 0; i < spe_num; i++) { @@ -97,13 +97,8 @@ } for (int i = 0; i < spe_num; i++) { -#if 0 - pthread_create(&threads[i], NULL, - &frontend_thread_run, (void*)&args[i]); -#else pthread_create(&threads[i], NULL, &spe_thread_run, (void*)&args[i]); -#endif } } @@ -116,17 +111,13 @@ * @return Received 32-bit mailbox messages * if ([ret] < 0) no data read */ -memaddr +int SpeThreads::get_mail(int speid, int count, unsigned int* ret) { - memaddr mail = spe_out_mbox_read(spe_ctx[speid], ret, 1); - if (sizeof(memaddr)>4) { - mail += spe_out_mbox_read(spe_ctx[speid], ret, 1)<<4; - } - return mail; + return spe_out_mbox_read(spe_ctx[speid], ret, count); } -memaddr +int SpeThreads::check_mail(int speid, int count, unsigned int* ret) { /* @@ -134,11 +125,7 @@ * does not work. */ if (spe_out_mbox_status(spe_ctx[speid]) >= 1) { - memaddr mail = spe_out_mbox_read(spe_ctx[speid], ret, 1); - if (sizeof(memaddr)>4) { - mail += spe_out_mbox_read(spe_ctx[speid], ret, 1)<<4; - } - return mail; + return spe_out_mbox_read(spe_ctx[speid], ret, count); } else { return 0; } @@ -159,14 +146,10 @@ * @param [num] The number of messages */ void -SpeThreads::send_mail(int speid, int num, memaddr *data1) +SpeThreads::send_mail(int speid, int num, unsigned int *data) { - unsigned int *data = (unsigned int *) data1; spe_in_mbox_write(spe_ctx[speid], data, num, SPE_MBOX_ALL_BLOCKING); -// if (sizeof(memaddr)>4) { -// spe_in_mbox_write(spe_ctx[speid], (data>>4), num, SPE_MBOX_ALL_BLOCKING); -// } } void diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Cell/SpeThreads.h --- a/TaskManager/Cell/SpeThreads.h Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Cell/SpeThreads.h Sun Nov 15 03:34:18 2009 +0900 @@ -19,9 +19,9 @@ /* functions */ void init(void); - memaddr get_mail(int speid, int count, unsigned int* ret); // BLOCKING - memaddr check_mail(int speid, int count, unsigned int* ret); // NONBLOCK - void send_mail(int speid, int num, memaddr *data); // BLOCKING + int get_mail(int speid, int count, unsigned int* ret); // BLOCKING + int check_mail(int speid, int count, unsigned int* ret); // NONBLOCK + void send_mail(int speid, int num, unsigned int *data); // BLOCKING static void *spe_thread_run(void *arg); static void *frontend_thread_run(void *arg); void add_output_tasklist(int command, unsigned int buff, int alloc_size); diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Cell/spe/SpeTaskManagerImpl.cc --- a/TaskManager/Cell/spe/SpeTaskManagerImpl.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Cell/spe/SpeTaskManagerImpl.cc Sun Nov 15 03:34:18 2009 +0900 @@ -1,57 +1,13 @@ -#include -#include -#include -#include "FifoTaskManagerImpl.h" +#include "SpeTaskManagerImpl.h" #include "Scheduler.h" -#include "SchedTask.h" -#include "types.h" -#include "error.h" - -FifoTaskManagerImpl::~FifoTaskManagerImpl() -{ - -} -/** - */ -void -FifoTaskManagerImpl::init() -{ -} - -/** - */ -void -FifoTaskManagerImpl::init(MainScheduler *_sched) -{ - scheduler = _sched; -} -void -FifoTaskManagerImpl::run() -{ -} - - -void* -FifoTaskManagerImpl::allocate(int size, int alignment) -{ - void *buff; - posix_memalign(&buff, alignment, size); - return buff; -} +HTaskPtr TaskManagerImpl::create_task(int cmd) {return 0;} +void TaskManagerImpl::set_task_depend(HTaskPtr master, HTaskPtr slave) {} +void TaskManagerImpl::spawn_task(HTaskPtr) {} +void TaskManagerImpl::set_task_cpu(HTaskPtr, CPU_TYPE) {} -void* -FifoTaskManagerImpl::allocate(int size) -{ - void *buff; - posix_memalign(&buff, DEFAULT_ALIGNMENT, size); - return buff; -} +void* TaskManagerImpl::allocate(int size) { return scheduler->allocate(size); } +void* TaskManagerImpl::allocate(int size,int align) { return scheduler->allocate(size,align); } -Scheduler* -FifoTaskManagerImpl::get_scheduler() { - return scheduler; -} - diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Cell/spe/SpeTaskManagerImpl.h --- a/TaskManager/Cell/spe/SpeTaskManagerImpl.h Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Cell/spe/SpeTaskManagerImpl.h Sun Nov 15 03:34:18 2009 +0900 @@ -1,29 +1,38 @@ -#ifndef INCLUDED_FIFO_TASK_MANAGER_IMPL -#define INCLUDED_FIFO_TASK_MANAGER_IMPL +#ifndef INCLUDED_TASK_MANAGER_IMPL +#define INCLUDED_TASK_MANAGER_IMPL -#include "TaskManagerImpl.h" -#include "MainScheduler.h" -#include "Scheduler.h" +#include "MailManager.h" +#include "ListData.h" +#include "TaskListInfo.h" +#include "TaskQueueInfo.h" +#include "HTaskInfo.h" +class Scheduler; +class MemList; -class SpeTaskManagerImpl : public TaskManagerImpl { + +class TaskManagerImpl { public: - /* constructor */ - SpeTaskManagerImpl(int num = 1) : TaskManagerImpl(num) {} - ~SpeTaskManagerImpl(void); + + BASE_NEW_DELETE(TaskManagerImpl); /* variables */ - CellScheduler *scheduler; + SchedTask *schedTaskManager; + Scheduler *scheduler; + + /* constructor */ + TaskManagerImpl(Scheduler *s) { scheduler = s; } + + ~TaskManagerImpl() { } - /* functions */ - // call by system - void init(void); - void run(void); + // user + HTaskPtr create_task(int cmd); + void set_task_depend(HTaskPtr master, HTaskPtr slave); + void spawn_task(HTaskPtr); + void set_task_cpu(HTaskPtr, CPU_TYPE); - // call by user - int add_data(ListDataPtr, uint32, int); + void* allocate(int size); void* allocate(int size,int align); - void* allocate(int size); - Scheduler* get_scheduler(); + Scheduler* get_scheduler() { return scheduler; }; }; diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Cell/spe/main.cc --- a/TaskManager/Cell/spe/main.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Cell/spe/main.cc Sun Nov 15 03:34:18 2009 +0900 @@ -1,5 +1,6 @@ #include #include "CellScheduler.h" +#include "SpeTaskManagerImpl.h" #include "spu_mfcio.h" #include "error.h" @@ -23,7 +24,7 @@ manager->init(); manager->id = (int)argc; - TaskManagerImpl *tm = new SpeTaskManagerImpl(manager); + TaskManagerImpl *tm = new TaskManagerImpl(manager); manager->set_manager(tm); spu_write_decrementer(0x7FFFFFFFU); diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/Makefile.cell --- a/TaskManager/Makefile.cell Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/Makefile.cell Sun Nov 15 03:34:18 2009 +0900 @@ -20,6 +20,7 @@ CELL_SPE_SRCS = \ $(CELL_SPE_DIR)/CellDmaManager.cc \ $(CELL_SPE_DIR)/CellScheduler.cc \ + $(CELL_SPE_DIR)/SpeTaskManagerImpl.cc \ $(CELL_SPE_DIR)/main.cc CELL_SPE_TASK_SRCS = \ diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/kernel/schedule/Scheduler.cc --- a/TaskManager/kernel/schedule/Scheduler.cc Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.cc Sun Nov 15 03:34:18 2009 +0900 @@ -4,6 +4,7 @@ #include "SchedNop.h" #include "error.h" #include +#include "TaskManagerImpl.h" /* * Edit kernel/schedule/xx.cc, Cell/spe/xx.cc will be over writen by this. @@ -392,4 +393,20 @@ s->tag = 0; } +HTask * Scheduler::create_task(int cmd) { return manager->create_task(cmd); } +void Scheduler::set_task_depend(HTask * master, HTask * slave) { + manager->set_task_depend(master, slave) ; +} +void Scheduler::spawn_task(HTask * t) { manager->spawn_task(t); } +void Scheduler::set_task_cpu(HTask * t, CPU_TYPE cpu) { manager->set_task_cpu(t,cpu); } +void* Scheduler::allocate(int size,int align) { return allocate(size); } +long Scheduler::get_random() { +#if defined(__SPU__) + return 0; +#else + return random(); +#endif + +} + /* end */ diff -r 55ed910d13c2 -r 5b178db5988a TaskManager/kernel/schedule/Scheduler.h --- a/TaskManager/kernel/schedule/Scheduler.h Sun Nov 15 02:05:33 2009 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.h Sun Nov 15 03:34:18 2009 +0900 @@ -1,7 +1,7 @@ #ifndef INCLUDED_SCHEDULER #define INCLUDED_SCHEDULER -#include "stdlib.h" +#include #include "base.h" #include "TaskList.h" #include "ListData.h" @@ -10,7 +10,6 @@ #include "SchedTaskList.h" #include "MemList.h" #include "MemHash.h" -#include "TaskManagerImpl.h" #define MAX_USER_TASK 32 @@ -22,10 +21,15 @@ class SchedTaskBase; class SchedTask; class SchedTaskList; -class TaskManager; +class TaskManagerImpl; +class HTask; typedef int (*TaskObjectRun)(SchedTask* smanager, void* r, void *w); +extern "C" { + extern long random(); +} + class Scheduler { public: virtual ~Scheduler(); @@ -122,18 +126,16 @@ /* manager */ - void set_manager(TaskManagerImpl *m) { manager = m; } + void set_manager(TaskManagerImpl *m) { manager = m; }; // user - HTaskPtr create_task(int cmd) { return manager->create_task(cmd); } - void set_task_depend(HTaskPtr master, HTaskPtr slave) { - manager->set_task_depend(master, slave) ; - } - void spawn_task(HTaskPtr t) { manager->spawn_task(t); } - void set_task_cpu(HTaskPtr t, CPU_TYPE cpu) { manager->set_task_cpu(t,cpu); } - void* allocate(int size,int align) { return manager->allocate(size,align); } - int get_random() { return random(); } - Scheduler *get_scheduler() { return this; } + HTask * create_task(int cmd); + void set_task_depend(HTask * master, HTask * slave) ; + void spawn_task(HTask * t) ; + void set_task_cpu(HTask * t, CPU_TYPE cpu) ; + void* allocate(int size,int align) ; + long get_random() ; + Scheduler *get_scheduler() { return this; }; };