# HG changeset patch # User Shinji KONO # Date 1244615005 -32400 # Node ID f64d75473f957b3327265c1d9d869ed7ed7f7c4b # Parent 776c125af0b2ea125b6cfe60ae5861de50265a55 merge 317 diff -r 776c125af0b2 -r f64d75473f95 Document/Cerium_2009.mm --- a/Document/Cerium_2009.mm Wed Jun 10 15:12:39 2009 +0900 +++ b/Document/Cerium_2009.mm Wed Jun 10 15:23:25 2009 +0900 @@ -17,8 +17,6 @@ - - @@ -31,6 +29,7 @@ + @@ -57,35 +56,32 @@ - - - - - + - - + - - - - - - - - - + + + + + + + + + + + @@ -110,11 +106,7 @@ - - - - - + @@ -127,34 +119,123 @@ - + - - - + + + + + + + + + + - - - - - + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -r 776c125af0b2 -r f64d75473f95 Renderer/DataPack/Test/SpanPack/polygonpack.cpp --- a/Renderer/DataPack/Test/SpanPack/polygonpack.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/Renderer/DataPack/Test/SpanPack/polygonpack.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -84,7 +84,7 @@ int end_y = (int)vMin->y; if (start_y 0 for(i = k; i < div_y+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMid1->x - vMin->x ,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x); tmp_z = calc(vMid1->z - vMin->z ,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z); //printf("x:%f end:%f z:%f zpos:%f\n",tmp_xpos,tmp_end,tmp_z,tmp_zpos); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =((i/(div_y)) * vMid1->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_y)) * vMid->tex_x) + \ diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Cell/CellBufferManager.cc --- a/TaskManager/Cell/CellBufferManager.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Cell/CellBufferManager.cc Wed Jun 10 15:23:25 2009 +0900 @@ -7,8 +7,8 @@ { BufferManager::init(); - // ʤġ - // ʡ + // なんつーか。。。 + // おかしいよな・・・ delete taskListImpl; taskListImpl = new CellTaskListInfo; taskListImpl->init(machineNum*2); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Cell/CellTaskManagerImpl.cc --- a/TaskManager/Cell/CellTaskManagerImpl.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Cell/CellTaskManagerImpl.cc Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,5 @@ +#define DEBUG +#include "error.h" #include #include #include @@ -5,7 +7,6 @@ #include "CellBufferManager.h" #include "PpeScheduler.h" #include "types.h" -#include "error.h" CellTaskManagerImpl::~CellTaskManagerImpl(void) { @@ -13,8 +14,8 @@ delete [] speTaskList; delete [] speTaskList_bg; /** - * bufferManager - * ppeManager Τʤ delete Ƥ餦 + * bufferManager は + * ppeManager のなかで delete してもらう */ // delete bufferManager; delete [] flag_sendTaskList; @@ -43,7 +44,7 @@ flag_sendTaskList[i] = 1; } - // PPE ¦δ򤹤 Manager + // PPE 側の管理をする Manager ppeManager = new FifoTaskManagerImpl(machineNum); ppeManager->init(new PpeScheduler, bufferManager); } @@ -61,22 +62,22 @@ } } -// SPE_ANY ꤵƤ -// 򥤥󥯥ȤĤĸƤ֤Ȥˤ롣 -// ȤäƤ⤤ɤ +// SPE_ANY が指定されていた時に +// これをインクリメントしつつ呼ぶことにする。 +// 乱数使ってもいいけどさ。 int cur_anySpeid = 0; /** - * ActiveTaskQueue Task - * SPE Ϥ TaskList + * ActiveTaskQueue から Task を + * 各 SPE に渡す TaskList に入れる * - * activeTaskQueue FifoTaskManagerImpl ΤỌ̇̄㤤 - * spe Ϥ Task äƤ + * ここの activeTaskQueue は FifoTaskManagerImpl のと意味が違い、 + * spe に渡される Task だけ入っている */ void CellTaskManagerImpl::set_runTaskList(void) { - // ...ľ + // ここ...直すかな TaskListPtr list; TaskQueuePtr queue; TaskQueuePtr d; @@ -99,16 +100,16 @@ cur_anySpeid = (cur_anySpeid < machineNum) ? cur_anySpeid : 0; } else { - // -1 ƤΤ - // htask->cpu_type - CPU_SPE - // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 äƤʤäƤΤ - // Ū (SPE0 = arr[0], SPE1 = arr[1]) ˤ뤿 + // -1 してるのは + // htask->cpu_type - CPU_SPE で + // SPE0 = 1, SPE1 = 2, ... SPE5 = 6 ってなってるので + // 配列的 (SPE0 = arr[0], SPE1 = arr[1]) にするため speid = htask->cpu_type - CPU_SPE - 1; - // SPU οʾ夬ꤵƤ - // Ȥꤢ MAX_USE_SPE_NUM (ºݤư SPE κ) - // ޤƤȤȤˤ롣 - // ȽꤹǤʤ + // SPU の数以上が指定されていれば + // とりあえず MAX_USE_SPE_NUM (実際に動く SPE の最大数) で + // あまり求めてそれを使うことにする。 + // ここで判定するもんでもないか? if (speid >= machineNum) { speid %= machineNum; } @@ -145,18 +146,18 @@ TaskListPtr ppeTaskList = NULL; MailQueuePtr ppeMail = NULL; - // PPE ¦ư TaskList Ǥ - // FifoTaskManagerImpl::run Ⱦ꤯礦褦 - // ʤȤäƤޤ + // PPE 側で動く TaskList です + // FifoTaskManagerImpl::run と上手く合うように + // こんなことやってますよ ppeTaskList = ppeManager->get_runTaskList(); if (!ppeTaskList) { goto cont; } - // SPE Mailbox Check - // PPE ¦ schedule ȴ褿Ȥ˹Ԥ - // (speThreads Blocking Mailbox read - // ޥեȤȤäƤäƤ⤤Ϥ) + // SPE からの Mailbox Check は + // PPE 側の schedule から抜けて来たときに行う + // (speThreads で Blocking Mailbox read と + // セマフォとか使ってやってもいいが、今はこの方式で) do { ppeMail = ppeManager->schedule(ppeTaskList); cont: @@ -165,37 +166,37 @@ } /** - * SPE Υ᡼å + * SPE からのメールをチェックする * * @param [mail_list] - * PPE ¦ư Scheduler Υ᡼ꥹ - * PPE ¦ mail check Ԥ + * PPE 側で動く Scheduler からのメールリスト + * この中で PPE 側の mail check も行う * - * @return PPE Scheduler ФƤΥ᡼롣 - * ˼¹Ԥ TaskList Υɥ쥹䡢λޥɤ + * @return PPE Scheduler に対してのメール。 + * 次に実行する TaskList のアドレスや、終了コマンドを送る */TaskListPtr CellTaskManagerImpl::mail_check(MailQueuePtr mail_list) { - // PPE Scheduler mail check + // PPE Scheduler からの mail check ppeManager->mail_check(mail_list, &waitTaskQueue); do { unsigned int data; - // SPE Scheduler mail check + // SPE Scheduler からの mail check for (int id = 0; id < machineNum; id++) { while (speThreads->check_mail(id, 1, &data)) { /** - * MY_SPE_STATUS_READY: SPE äƤ Task ƽλ - * MY_SPE_NOP: ä˰̣Τʤޥ - * ʳλ(PPEˤΤǥɥ쥹 + * MY_SPE_STATUS_READY: SPE が持ってた Task 全て終了 + * MY_SPE_NOP: 特に意味のないコマンド + * それ以外:終了したタスク(PPEにあるのでアドレス * - * MY_SPE_NOP 0 ʤΤǡ - * Τ褦 data > MY_SPE_NOP ȤƤޤ - * ܤǤ褯狼ʤʤǡľȤǤ + * MY_SPE_NOP が 0 なので、 + * 下のように data > MY_SPE_NOP とかしています。 + * 一目でよくわからない書き方なんで、直したいところですが。。。 */ - // ̾ȤǤȷ褦 => MY_SPE_... Ȥʤ + // 名前あとでちゃんと決めよう => MY_SPE_... とかじゃなくて if (data == MY_SPE_STATUS_READY) { __debug_ppe("[SPE %d] finish\n", id); flag_sendTaskList[id] = 1; @@ -203,7 +204,7 @@ __debug_ppe("[PPE] MALLOC COMMAND from [SPE %d]\n", id); /** - * info[0] = alloc_id; (CellScheduler::mainMem_alloc ) + * info[0] = alloc_id; (CellScheduler::mainMem_alloc 参照) * info[1] = alloc_addr; */ unsigned int alloc_info[3]; @@ -217,10 +218,11 @@ alloc_info[1] = (unsigned int)allocate(alloc_size); /* - * allocate 줿ΰϺ SPE buffer ˥󥯤Ȥ³ - * Ǥ TaskList allocate(new) ϿƤ + * allocate された領域は今の SPE buffer にリンクとして接続する + * ここでは TaskList を allocate(new) して登録してやろうか */ + __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, alloc_info); @@ -231,37 +233,37 @@ } } - // ¸ط򥢥ƥ֤ + // 依存関係を満たしたタスクをアクティブに wakeup_waitTask(); - // SPE TaskList ν + // SPE に送る TaskList の準備 set_runTaskList(); - // TaskList Ԥ SPE TaskList + // TaskList 待ちの SPE に TaskList を送る for (int i = 0; i < machineNum; i++) { if (flag_sendTaskList[i] == 1 && speTaskList_bg[i]->length >= 1 ) { send_taskList(i); } } - // ߤ FifoTaskManager λͤǤ - // PPE Ǽ¹Ԥ륿̵ʤнλ - // Ǥꡢξ⤷ SPE ˥ĤäƤƤ - // ᥤ롼פȴƥץཪλȤʤäƤޤΤ - // ǥȥåפƤޤ + // 現在の FifoTaskManager の仕様では + // ・PPE で実行するタスクが無くなれば終了する + // であり、この場合もし SPE にタスクが残っていても + // メインループから抜けてプログラム終了となってしまうので + // ここでストップかけてます。 } while (!ppeManager->activeTaskQueue && waitTaskQueue); return ppeManager->get_runTaskList(); } /** - * SPE TaskList - * 1. SPE äƤ TaskList λơ TaskList ԤäƤ - * 2. SPE TaskList Task + * 条件を満たしたら SPE に TaskList を送信する + * 条件1. SPE が持ってた TaskList を終了して、次の TaskList を待ってる + * 条件2. SPE に送る TaskList に Task がある * - * SPE Ǽ¹Խλ TaskList [speTaskList] - * 줫¹Ԥ TaskList [speTaskList_bg] ΥХåեؤ - * ĤǤ˼¹ԽλĤ clear Ƥ + * SPE で実行終了した TaskList [speTaskList] と + * これから実行する TaskList [speTaskList_bg] のバッファを入れ替える + * ついでに実行終了したやつは clear しておく。 */ void CellTaskManagerImpl::send_taskList(int id) @@ -286,7 +288,7 @@ posix_memalign(&buff, DEFAULT_ALIGNMENT, size); - // bzero ϥȤ⤤ΤǤꤿʤ + // bzero はコストが高いのでやりたくない bzero(buff, size); return buff; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Cell/SpeThreads.cc --- a/TaskManager/Cell/SpeThreads.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Cell/SpeThreads.cc Wed Jun 10 15:23:25 2009 +0900 @@ -69,8 +69,8 @@ pthread_create(&thread, NULL, &spe_thread_run, (void*)arg_t->ctx); - // mail read blocking Ǥ - // ǸƤᤤ + // mail read の blocking ができれば + // ここで呼んだ方が早い。 pthread_exit(NULL); } @@ -109,7 +109,7 @@ /** - * SPE Υ᡼롣 + * SPE からのメールを受信する。 * * @param [speid] SPE ID * @@ -119,13 +119,16 @@ int SpeThreads::get_mail(int speid, int count, unsigned int* ret) { - while(spe_out_mbox_status(spe_ctx[speid]) < count); return spe_out_mbox_read(spe_ctx[speid], ret, count); } int SpeThreads::check_mail(int speid, int count, unsigned int* ret) { +/* + * spe_out_mbox_status return only 1, waiting for multiple length + * does not work. + */ if (spe_out_mbox_status(spe_ctx[speid]) >= count) { return spe_out_mbox_read(spe_ctx[speid], ret, count); } else { @@ -135,13 +138,13 @@ /** * Inbound Mailbox - * ᡼ PPE -> SPE + * メール送信 PPE -> SPE * - * ʤ٤ NONBLOCKING ʤɡ - * Inbound Mailbox 塼˶ʤǤʤΤ - * Ƥ뤫ǧƤ롣̵Ԥġ + * なるべく NONBLOCKING なんだけど、 + * Inbound Mailbox キューに空きがないと送信できないので + * 送信する数だけ空いているか確認してから送る。空いて無い場合は待つ。 * - * ԤĤʡ ALL_BLOCKING äƼ¤ busy wait äꤹ뤷 + * 結局待つんだよな。しかも ALL_BLOCKING って実は busy wait だったりするし * * @param [speid] SPE ID * @param [data] Send 32-bit mailbox messages @@ -157,10 +160,10 @@ SpeThreads::add_output_tasklist(int command, unsigned int buff, int alloc_size) { /* - * output TaskList ̵п - * TaskList allocate Task ɲ - * command б Task ν¹Ԥ - * SPE data 񤭽Фä PPE ¦ǽ + * output TaskList が無ければ新しく作る + * あれば TaskList に allocate した Task を追加 + * command に対応した Task の初期化を実行する + * SPE に data が書き出し終わった後に PPE 側で初期化 */ } diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Cell/spe/CellScheduler.cc --- a/TaskManager/Cell/spe/CellScheduler.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Cell/spe/CellScheduler.cc Wed Jun 10 15:23:25 2009 +0900 @@ -4,8 +4,8 @@ #include "CellDmaManager.h" #include "error.h" -// 桼ץ -// ʤɡ̯͡ +// ユーザプログラムで定義 +// なんだけど、それは微妙じゃね? extern void task_init(void); void @@ -15,7 +15,9 @@ mainMemNum = 0; - task_init(); + task_init(); // PPE側ではUser 側で既に呼んでいる... + // SPE側はここで呼び出す必要がある + // Fifo ではSPEは無いので呼び出されない } void* @@ -25,11 +27,11 @@ } /** - * ᥤΰ allocate 롣 - * allocate ΰΥɥ쥹 mainMem_get Ǽ뤬 - * mainMem_get ¹ԤǤΤ - * Renew Task ( create Task) 顣 - * alloc Ƥ get Ƥ⡢ɥ쥹äƤʤǤ + * メインメモリ領域を allocate する。 + * allocate した領域のアドレスは mainMem_get で取得するが、 + * mainMem_get を実行できるのは + * Renew Task (タスク内で create した Task) から。 + * alloc してすぐ get しても、アドレス何も入ってないです。 */ void CellScheduler::mainMem_alloc(int id, int size) diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Cell/spe/Task.cc --- a/TaskManager/Cell/spe/Task.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Cell/spe/Task.cc Wed Jun 10 15:23:25 2009 +0900 @@ -1,7 +1,7 @@ #include "Task.h" /** - * ϥǡɲä + * タスクの入力データを追加する * * @param [addr] add input data * @param [size] size of data at [addr] @@ -21,12 +21,12 @@ } /** - * 顼λ -1 ֤äƤȤ - * perror ߤˤۤ狼䤹ʡ + * エラーの時に -1 を返す、ってことするよりは + * perror みたいにしたほうがわかりやすいかな。 * - * ߤ 3 Ĥޤǡ - * ϡ3İʾˤ task->param[] ˤ ɥ쥹 - * Υɥ쥹 ᥤǥȤ줿 int ν硣 + * 現在は 3 個まで。 + * 本当は、3個以上にすると task->param[] には アドレスが入り + * そのアドレスは メインメモリでアロケートされた int の集合。 */ int Task::add_param(int _param) @@ -38,8 +38,8 @@ } /* - * 顼λ -1 ֤äƤȤ - * perror ߤˤۤ狼䤹ʡ + * エラーの時に -1 を返す、ってことするよりは + * perror みたいにしたほうがわかりやすいかな。 */ int Task::add_data(ListDataPtr list, uint32 addr, int size) @@ -48,7 +48,7 @@ list->bound[list->length] = list->size; - // size Ǥ¤٤ + // size でも制限かけるべき? list->size += size; ListElementPtr elm = &list->element[list->length++]; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/ChangeLog --- a/TaskManager/ChangeLog Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/ChangeLog Wed Jun 10 15:23:25 2009 +0900 @@ -1,9 +1,3 @@ -<<<<<<< local -======= -2009-06-10 Shinji KONO - - add light (incomplete) - 2009-06-8 Shinji KONO SchedTask/SchedTaskImpl の分離はあんまり意味がなかった。 @@ -24,7 +18,6 @@ post で、PPE task を渡せると良い。address は parameterとして送る ->>>>>>> other 2009-02-13 Wataru MIYAGUNI * kernel/ppe/Random.cc (reset): fix diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Fifo/FifoDmaManager.cc --- a/TaskManager/Fifo/FifoDmaManager.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Fifo/FifoDmaManager.cc Wed Jun 10 15:23:25 2009 +0900 @@ -18,7 +18,7 @@ } /** - * mask ꤷ DMA žδλԤ + * mask で設定した DMA 転送の完了を待つ */ void FifoDmaManager::dma_wait(uint32 mask) @@ -44,7 +44,7 @@ q = mail_recvQueue; if (q == NULL) { - return 0; // error ͤȽǤǤʤʡ + return 0; // error か 正しい値か判断できないな・・・ } mail_recvQueue = mail_recvQueue->next; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Fifo/FifoTaskManagerImpl.cc --- a/TaskManager/Fifo/FifoTaskManagerImpl.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc Wed Jun 10 15:23:25 2009 +0900 @@ -13,9 +13,9 @@ } /** - * MailManager PPE 塼ȤΥ᡼򴹡 - * FifoScheduler PPE ¦Υ塼 - * BufferManager TaskTaskList ʤɤΥ(ؤʤȤƤʤ + * MailManager は PPE スケジューラとのメール交換、 + * FifoScheduler は PPE 側のスケジューラ + * BufferManager は Task、TaskList などのメモリ管理(大層なことしてないが */ void FifoTaskManagerImpl::init(void) @@ -35,10 +35,10 @@ } /** - * CellTaskManagerImpl ƤФ롣 - * BufferManager ϶ѤǻȤΤǰˡ - * CellTaskManagerImpl FifoTaskManagerImpl Ʊ - * Υǡ˥()ʤΤǤǤk + * これは CellTaskManagerImpl から呼ばれる。 + * BufferManager は共用で使うので引数に。 + * CellTaskManagerImpl と FifoTaskManagerImpl が同時に + * 上のデータにアクセスする事は(今は)ないのでこれでおk */ void FifoTaskManagerImpl::init(MainScheduler *_sched, BufferManager *buff) @@ -57,12 +57,12 @@ } /** - * 塼Ϥ TaskList 롣 + * スケジューラに渡す TaskList を取得する。 * - * @return ¹ԥꥹ + * @return 実行タスクリスト * - * ActiveTaskQueue (¸Ѥ) Υ - * ¹ԥꥹȤ + * ActiveTaskQueue (依存条件は満たし済み) のタスクを + * 実行タスクリストに入れる */ TaskListPtr FifoTaskManagerImpl::get_runTaskList(void) @@ -70,18 +70,18 @@ TaskListPtr list, list_top; TaskQueuePtr queue; TaskQueuePtr d; - HTaskPtr htask; // HTask (PPE ˤ) - TaskPtr task; // Task (SPE Task) + HTaskPtr htask; // HTask (PPE にある) + TaskPtr task; // Task (SPE に送る Task) queue = activeTaskQueue; if (queue == NULL) { return NULL; } - // PPE ¦Ǽ¹Ԥ TaskList + // PPE 側で実行される TaskList list_top = mainTaskList; - // list_top->clear() Ȥ⤷ + // list_top->clear() とかの方がいいかもしれん。 list_top = bufferManager->clear_taskList(list_top); list = list_top; @@ -126,41 +126,41 @@ list = get_runTaskList(); do { - // list ¹Ԥ + // list を実行する mail = schedule(list); - // mail ˤϡppe scheduler mail + // mail には、ppe scheduler からの mail がある mail_check(mail); - // ¸طΤϼ¹Բǽ塼 + // 依存関係を満たしたものは実行可能キューへ wakeup_waitTask(); list = get_runTaskList(); } while (list); } /** - * @param [list] ¹ԥꥹ - * @return FifoScheduler Υ᡼ + * @param [list] 実行タスクリスト + * @return FifoScheduler からのメール * - * [Tasklist] -> [ʼ] -> scheduler->run ȴ + * [Tasklist] -> [番兵] -> scheduler->run を抜ける */ MailQueuePtr FifoTaskManagerImpl::schedule(TaskListPtr list) { MailQueuePtr list_mail; // task list - MailQueuePtr sentinel; // ʼ + MailQueuePtr sentinel; // 番兵 MailQueuePtr in_mail_list = NULL; MailQueuePtr out_mail_list = NULL; - // TaskList Υɥ쥹 + // TaskList のアドレス list_mail = mailManager->create((unsigned int)list); in_mail_list = MailManager::append_mailQueue(in_mail_list, list_mail); - // EXIT_COMMAND (ʼŪʰ̣) + // EXIT_COMMAND (番兵的な意味で) sentinel = mailManager->create(MY_SPE_COMMAND_EXIT); in_mail_list = MailManager::append_mailQueue(in_mail_list, sentinel); - // scheduler ϼä᡼򸵤˼¹Ԥ + // scheduler は受け取ったメールを元に実行する scheduler->send_mailList(in_mail_list); scheduler->run(); out_mail_list = scheduler->recv_mailList(); @@ -169,14 +169,14 @@ } /** - * PPE Scheduler Υ᡼å + * PPE Scheduler からのメールをチェックする * * @param [mail_list] - * PPE ¦ư Scheduler Υ᡼ꥹ - * λ Task 䡢¾(ϤޤƤʤ)ξäƤ + * PPE 側で動く Scheduler からのメールリスト + * 終了した Task や、その他(今はまだ実装してないけど)の情報が入ってる * - * @return Scheduler ˼¹Ԥ Task List - * NULL ʤƤΥ¹ԽλȤ + * @return Scheduler が次に実行する Task List + * NULL なら全てのタスクが実行終了したということ */ void FifoTaskManagerImpl::mail_check(MailQueuePtr mail_list) @@ -189,13 +189,13 @@ data = q->data; /** - * MY_SPE_STATUS_READY: SPE äƤ Task ƽλ - * MY_SPE_NOP: ä˰̣Τʤޥ - * ʳλ(PPEˤΤǥɥ쥹 + * MY_SPE_STATUS_READY: SPE が持ってた Task 全て終了 + * MY_SPE_NOP: 特に意味のないコマンド + * それ以外:終了したタスク(PPEにあるのでアドレス * - * MY_SPE_NOP 0 ʤΤǡ - * Τ褦 data > MY_SPE_NOP ȤƤޤ - * ܤǤ褯狼ʤʤǡľȤǤ + * MY_SPE_NOP が 0 なので、 + * 下のように data > MY_SPE_NOP とかしています。 + * 一目でよくわからない書き方なんで、直したいところですが。。。 */ if (data == MY_SPE_STATUS_READY) { __debug_ppe("mail_check(): Task List finish\n"); @@ -225,9 +225,9 @@ } /** - * Ȥ + * こういう使い方を * Abstract Factory Pattern - * Ȥ餷 + * というらしい。 */ #ifdef __CERIUM_FIFO__ TaskManagerImpl* diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Fifo/MainScheduler.cc --- a/TaskManager/Fifo/MainScheduler.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Fifo/MainScheduler.cc Wed Jun 10 15:23:25 2009 +0900 @@ -17,8 +17,8 @@ } /** - * PPE TaskManager TaskList 䤽¾ޥɤǼ줿 - * ᡼륭塼Ƥ + * PPE TaskManager から TaskList やその他コマンドが格納された + * メールキューが送られてくる */ void MainScheduler::send_mailList(MailQueuePtr mail_list) @@ -28,8 +28,8 @@ } /** - * PPE TaskManager Task νλ䤽¾ޥɤǼ줿 - * ᡼륭塼 + * PPE TaskManager が、 Task の終了やその他コマンドが格納された + * メールキューを受け取る */ MailQueuePtr MainScheduler::recv_mailList(void) @@ -49,8 +49,8 @@ /** - * ᥤΰ allocate 롣 - * Fifo С顢ޤ̤ malloc Ǥk + * メインメモリ領域を allocate する。 + * Fifo バージョンだから、まあ普通に malloc でおk */ void MainScheduler::mainMem_alloc(int id, int size) @@ -60,11 +60,11 @@ #if 0 /** - * MainScheduler.h ˽񤤤Ƥޤ + * MainScheduler.h に書いてます */ void MainScheduler::mainMem_wait(void) { - // ⤷ͤ + // 何もしねえ } #endif diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Makefile.cell --- a/TaskManager/Makefile.cell Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Makefile.cell Wed Jun 10 15:23:25 2009 +0900 @@ -4,8 +4,28 @@ SPETARGET = libspemanager.a CELL_SPE_DIR = $(IMPL_CELL_DIR)/spe -CELL_SPE_SRCS = $(wildcard $(CELL_SPE_DIR)/*.cc) -CELL_SPE_OBJS = $(CELL_SPE_SRCS:.cc=.o) + +CELL_SPE_SCHEDULE_SRC = $(CELL_SPE_DIR)/SchedExit.cc \ + $(CELL_SPE_DIR)/SchedNop2Ready.cc \ + $(CELL_SPE_DIR)/SchedTaskList.cc \ + $(CELL_SPE_DIR)/SchedMail.cc \ + $(CELL_SPE_DIR)/SchedTask.cc \ + $(CELL_SPE_DIR)/Scheduler.cc\ + $(CELL_SPE_DIR)/SchedNop.cc \ + $(CELL_SPE_DIR)/TaskGroup.cc +CELL_SPE_SCHEDULE_OBJ = $(CELL_SPE_SCHEDULE_SRC:.cc=.o) + +CELL_SPE_SRCS = \ + $(CELL_SPE_DIR)/CellDmaManager.cc \ + $(CELL_SPE_DIR)/TaskList.cc \ + $(CELL_SPE_DIR)/CellScheduler.cc \ + $(CELL_SPE_DIR)/TaskQueue.cc \ + $(CELL_SPE_DIR)/Task.cc \ + $(CELL_SPE_DIR)/main.cc + +# $(wildcard $(CELL_SPE_DIR)/*.cc) + +CELL_SPE_OBJS = $(CELL_SPE_SRCS:.cc=.o) $(CELL_SPE_SCHEDULE_OBJ) SPUCC = spu-g++ @@ -14,7 +34,8 @@ SPE_CFLAGS = -fno-exceptions -fno-rtti all: default -default: $(TARGET) $(SPETARGET) + +default: $(CELL_SPE_SCHEDULE_SRC) $(TARGET) $(SPETARGET) PPE_ALL_OBJS = $(KERN_MAIN_OBJS) $(KERN_PPE_OBJS) $(KERN_SCHED_OBJS) $(KERN_SYSTASK_OBJS) $(IMPL_CELL_OBJS) @@ -27,6 +48,9 @@ $(SPETARGET): $(CELL_SPE_OBJS) ar crus $@ $(CELL_SPE_OBJS) +$(CELL_SPE_SCHEDULE_SRC): kernel/schedule/*.cc + cp kernel/schedule/*.cc $(CELL_SPE_DIR)/ + $(CELL_SPE_OBJS): %.o : %.cc $(SPUCC) $(CFLAGS) $(SPE_CFLAGS) $(INCLUDE) -c $< -o $@ @@ -35,5 +59,8 @@ rm -f $(SPETARGET) cellclean: - rm -f $(CELL_SPE_OBJS) - cd $(CELL_SPE_DIR); rm -f *~ \#* + rm -f $(CELL_SPE_OBJS) $(CELL_SPE_SCHEDULE_SRC) + (cd $(CELL_SPE_DIR); rm -f *~ \#*) + + + diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_pack/main.cpp --- a/TaskManager/Test/simple_pack/main.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_pack/main.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -59,8 +59,8 @@ } -// 饹ؿñ˥ݥ󥿤ǰʤΤ -// ϴŪ˸Ƥ֤Ȥ +// クラス関数は単純にポインタで扱えないので +// 現状は間接的に呼ぶことに int sdl_init(void *r, void *w) { __debug("[%s]\n", __FUNCTION__); @@ -119,8 +119,8 @@ task_initialize(); - // ϡdlsym ߤʤΤȤ - // ŪʤĤϤǤʤ + // 本当は、dlsym みたいなものを使いたいんだけど + // 静的なやつはできないん? manager->set_symbol("init", (void*)init); manager->set_symbol("sdl_init", (void*)sdl_init); manager->set_symbol("zRow_init", (void*)zRow_init); @@ -150,9 +150,9 @@ } } - // ֺǽ˹Ԥ init Ѥ task_run äƤ⤤ɡ - // ξϰȤ꤫ޤ argc, argv - // ¤ΤǸꤷƤϤʤ + // 一番最初に行われる init 専用の task_run があってもいいけど。。 + // その場合は引数とか固定か。まあ引数は argc, argv を持つ + // 構造体で固定しても問題はない・・・か? HTaskPtr task_init; int fd_init; initArg = new struct init_arg; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_pack/span.cpp --- a/TaskManager/Test/simple_pack/span.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_pack/span.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -5,7 +5,7 @@ using namespace std; -// f1:x$B$NA}2CNL(B f2:y$B$NA}2CNL(B i:....... base:$B4pK\$H$J$kD:E@$N(By$B:BI8(B +// f1:xの増加量 f2:yの増加量 i:....... base:基本となる頂点のy座標 static float calc(float f1, float f2,int i, float base){ float ans; ans = f1/f2*i + base; @@ -78,7 +78,7 @@ int end_y = (int)vMin->y; if (start_yx - vMid->x; incli_x2 = vMin->x - vMid1->x; @@ -96,13 +96,13 @@ //if(div_y < 1 && div_y > -1) div_y = 1; for(i = k; i < div_y+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMid1->x - vMin->x ,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x); tmp_z = calc(vMid1->z - vMin->z ,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z); //printf("x:%f end:%f z:%f zpos:%f\n",tmp_xpos,tmp_end,tmp_z,tmp_zpos); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =((i/(div_y)) * vMid1->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_y)) * vMid->tex_x) + \ @@ -113,7 +113,7 @@ tmp_tey2 =( (i/(div_y)) * vMid->tex_y) + \ ( ((div_y - i)/(div_y)) * vMin->tex_y); - //$B$3$3$G:8C<$,(Bxpos$B$+(Bend$B$rH=CG$7!"IA2h$9$k(Bspan$B$r:n$k(B + //ここで左端がxposかendを判断し、描画するspanを作る if(tmp_xpos > tmp_end) { x = (int)tmp_end; y = (int)vMin->y + i*l; @@ -236,13 +236,13 @@ if(div_y < 1 && div_y > -1) div_y = 1; for(i = 0; i < div_x+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMax->x - vMin->x,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x,div_x, i, vMin->x); tmp_z = calc(vMax->z - vMin->z,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z,div_x, i, vMin->z); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =( (i/(div_y)) * vMax->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_x)) * vMid->tex_x) + \ @@ -253,7 +253,7 @@ tmp_tey2 =( (i/(div_x)) * vMid->tex_y) + \ ( ((div_x - i)/(div_x)) * vMin->tex_y); - //$B$3$3$G:8C<$,(Bxpos$B$+(Bend$B$rH=CG$7!"IA2h$9$k(Bspan$B$r:n$k(B + //ここで左端がxposかendを判断し、描画するspanを作る if(tmp_xpos > tmp_end) { x = (int)tmp_end; y = (int)vMin->y + i; @@ -315,7 +315,7 @@ if(div_y < 1 && div_y > -1) div_y = 1; for(i = 0; i < div_x; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMax->x-vMin->x, div_y, (i+1+top_triangle), vMin->x); tmp_end = calc(vMax->x-vMid->x, div_x, (i+1), vMid->x); tmp_z = calc(vMax->z-vMin->z, div_y, (i+1+top_triangle), vMin->z); @@ -389,7 +389,7 @@ #endif } -// i:$BJ,;R!"(Bf1:$BD9$5(B f2:$BBP1~$9$kD:E@(B1 f3:$BBP1~$9$kD:E@(B2 +// i:分子、f1:長さ f2:対応する頂点1 f3:対応する頂点2 /* float Span::calc2(int i, float f1, float f2, float f3) { float ans; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_pack/task/update_sgp.cpp --- a/TaskManager/Test/simple_pack/task/update_sgp.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_pack/task/update_sgp.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -16,7 +16,7 @@ node = &sgp->node[i]; - // ϡϾ my_func ǹԤ + // 本当は、ここは上の my_func で行う y_angle = node->angle[1]; y_angle += 1.0f; if (y_angle > 360.0f) y_angle = 0.0f; @@ -36,9 +36,9 @@ } } - // ޤ¿ʬܤʤɡ - // in/out update ʬɬפ롩 - // ϥ桼¦ in/out ˤʤ褦˽񤫤Ρ + // まあこれは多分駄目なんだけど。 + // in/out と update は分ける必要ある? + // それはユーザ側で in/out になるように書かせるもの? memcpy(_sgp, sgp, sizeof(SceneGraphPack)); return sizeof(SceneGraphPack); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/SpanC.cpp --- a/TaskManager/Test/simple_render/SpanC.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/SpanC.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -5,7 +5,7 @@ using namespace std; -// f1:x$B$NA}2CNL(B f2:y$B$NA}2CNL(B i:....... base:$B4pK\$H$J$kD:E@$N(By$B:BI8(B +// f1:xの増加量 f2:yの増加量 i:....... base:基本となる頂点のy座標 static float calc(float f1, float f2,int i, float base){ float ans; ans = f1/f2*i + base; @@ -78,7 +78,7 @@ int end_y = (int)vMin->y; if (start_yx - vMid->x; incli_x2 = vMin->x - vMid1->x; @@ -96,13 +96,13 @@ //if(div_y < 1 && div_y > -1) div_y = 1; for(i = k; i < div_y+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMid1->x - vMin->x ,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x); tmp_z = calc(vMid1->z - vMin->z ,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z); //printf("x:%f end:%f z:%f zpos:%f\n",tmp_xpos,tmp_end,tmp_z,tmp_zpos); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =((i/(div_y)) * vMid1->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_y)) * vMid->tex_x) + \ @@ -113,7 +113,7 @@ tmp_tey2 =( (i/(div_y)) * vMid->tex_y) + \ ( ((div_y - i)/(div_y)) * vMin->tex_y); - //$B$3$3$G:8C<$,(Bxpos$B$+(Bend$B$rH=CG$7!"IA2h$9$k(Bspan$B$r:n$k(B + //ここで左端がxposかendを判断し、描画するspanを作る if(tmp_xpos > tmp_end) { x = (int)tmp_end; y = (int)vMin->y + i*l; @@ -236,13 +236,13 @@ if(div_y < 1 && div_y > -1) div_y = 1; for(i = 0; i < div_x+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMax->x - vMin->x,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x,div_x, i, vMin->x); tmp_z = calc(vMax->z - vMin->z,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z,div_x, i, vMin->z); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =( (i/(div_y)) * vMax->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_x)) * vMid->tex_x) + \ @@ -253,7 +253,7 @@ tmp_tey2 =( (i/(div_x)) * vMid->tex_y) + \ ( ((div_x - i)/(div_x)) * vMin->tex_y); - //$B$3$3$G:8C<$,(Bxpos$B$+(Bend$B$rH=CG$7!"IA2h$9$k(Bspan$B$r:n$k(B + //ここで左端がxposかendを判断し、描画するspanを作る if(tmp_xpos > tmp_end) { x = (int)tmp_end; y = (int)vMin->y + i; @@ -315,7 +315,7 @@ if(div_y < 1 && div_y > -1) div_y = 1; for(i = 0; i < div_x; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMax->x-vMin->x, div_y, (i+1+top_triangle), vMin->x); tmp_end = calc(vMax->x-vMid->x, div_x, (i+1), vMid->x); tmp_z = calc(vMax->z-vMin->z, div_y, (i+1+top_triangle), vMin->z); @@ -389,7 +389,7 @@ #endif } -// i:$BJ,;R!"(Bf1:$BD9$5(B f2:$BBP1~$9$kD:E@(B1 f3:$BBP1~$9$kD:E@(B2 +// i:分子、f1:長さ f2:対応する頂点1 f3:対応する頂点2 /* float Span::calc2(int i, float f1, float f2, float f3) { float ans; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/fb.h --- a/TaskManager/Test/simple_render/fb.h Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/fb.h Wed Jun 10 15:23:25 2009 +0900 @@ -46,7 +46,7 @@ int xres,yres,vbpp,line_len; //unsigned short tcolor ; - /* ɤ߽Ѥ˥ե򳫤 */ + /* 読み書き用にファイルを開く */ fd_framebuffer = open( DEVICE_NAME , O_RDWR); if ( !fd_framebuffer ) { send_current_error_msg("Framebuffer device open error !"); @@ -54,13 +54,13 @@ } send_current_information("The framebuffer device was opened !"); - /* ꥹ꡼ */ + /* 固定スクリーン情報取得 */ if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) { send_current_error_msg("Fixed information not gotton !"); exit(2); } - /* ư꡼ */ + /* 変動スクリーン情報取得 */ if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) { send_current_error_msg("Variable information not gotton !"); exit(3); @@ -72,10 +72,10 @@ sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp); send_current_information( tmp ); - /* Хñ̤ǤΥ꡼Υ׻ */ + /* バイト単位でのスクリーンのサイズを計算 */ screensize = xres * yres * vbpp / DIV_BYTE ; - /* ǥХ˥ޥåפ */ + /* デバイスをメモリにマップする */ fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0); if ( (int)fbptr == -1 ) { send_current_error_msg("Don't get framebuffer device to memory !"); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/main.cpp --- a/TaskManager/Test/simple_render/main.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/main.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -9,8 +9,8 @@ #include "error.h" -// Ȥľ -// Ǥ褦 +// あとで直す +// 引数からできるように #define SPENUM 6 /* prototype */ @@ -33,8 +33,8 @@ struct init_arg *initArg; -// 饹ؿñ˥ݥ󥿤ǰʤΤ -// ϴŪ˸Ƥ֤Ȥ +// クラス関数は単純にポインタで扱えないので +// 現状は間接的に呼ぶことに int run_loop(void *r, void *w) { __debug("[%s] start\n", __FUNCTION__); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/spe/CreatePolygonPack.cpp --- a/TaskManager/Test/simple_render/spe/CreatePolygonPack.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/spe/CreatePolygonPack.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -89,7 +89,7 @@ abc[2] = xyz[2]; abc[3] = xyz[3]; - // SIMD Ȥ + // SIMD 使えるよね for (int i=0; i<4; i++) { xyz[i] = abc[0]*matrix[i] + abc[1]*matrix[i+4] diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/spe/SpuDraw.cpp --- a/TaskManager/Test/simple_render/spe/SpuDraw.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/spe/SpuDraw.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -12,21 +12,21 @@ #define PIXELSIZE 11520 //32 line pixel size -// ʤ PPE Ǥ +// 本来なら PPE から受け取る情報です #define FRAMEBUFFER_X 1920 #define FRAMEBUFFER_Y 1080 -// IMG_MAX_X x 8 spe Ƥ -// ߡ1920x8 zBuf ϻƤʤ +// IMG_MAX_X x 8 が、spe が持てる 最大 +// 現在、1920x8の zBuf は持てない #define IMG_MAX_X 720 #define SPAN_PACK_LOAD 20 /** - * SpanPack ˤ Span y ɸ + * SpanPack にある Span が持つ y 座標は * .. [-16 ~ -9] [-8 ~ -1] [0 ~ 7] [8 ~ 16] .. - * Τɤ줫ζ褦 Pack Ƥ롣 - * sp->span[0].y 顢ζΰ־ y ɸ롣 + * のどれかの区域に入るように Pack されている。 + * sp->span[0].y から、その区域の一番上の y 座標を求める。 */ #define YTOP(y) (y &~(TEXTURE_SPLIT_PIXEL-1)) #define YOFF(y) (y & (TEXTURE_SPLIT_PIXEL-1)) @@ -45,9 +45,9 @@ linebuf = (int*)memalign(DEFAULT_ALIGNMENT, sizeof(int)*x*y); #if 1 - // memset 1 ХȤफ - // 0x12345678 ȤϤƤ 0x12 (0x78ä) Ǥ - // ʤʡ + // memset は 1 バイトで描き込むから + // 0x12345678 とか渡しても 0x12 (0x78だったかな) でしか + // 描かないんだなー memset(linebuf, rgb, sizeof(int)*x*y); //bzero(linebuf, sizeof(int)*x*y); #else @@ -123,7 +123,7 @@ SpanPack *sp = (SpanPack*)rbuf; SpanPack *next_sp = (SpanPack*)memalign(16, sizeof(SpanPack)); - SpanPack *free_sp = next_sp; // free() + SpanPack *free_sp = next_sp; // free()用 SpanPack *tmp_sp = NULL; unsigned int fbdev_addr = task->out_addr; Span *span; @@ -143,9 +143,9 @@ //render_y += FRAMEBUFFER_Y/2; if (sp->info.size < 0) { - // ɤĤ֤Span - // ȤǤ٤ - // षClass Ǻ + // 塗りつぶしSpan + // あとでちゃんと定義すべし + // むしろ別Class で作る方がいいか。 linebuf_rgb = 0xffffff; linebuf_init(linebuf_rgb); goto WRITE; @@ -157,9 +157,9 @@ /** - * SpanPack->next ¸ߤ礬ͭΤ - * ߤ SpanPack Ƥ֤ - * SpanPack DMA žԤäƤޤ + * SpanPack->next が存在する場合が有るので + * 現在の SpanPack を処理してる間に + * 次の SpanPack の DMA 転送を行っています */ do { if (sp->next != NULL) { @@ -238,9 +238,9 @@ int end_y; int start_y; - // ̾ΰޤʤ褦 - // ʤѤʡ - // Ȥꤢ if ʸɤˤ褦 + // 画面上の領域に描き込まないように + // ・・・なんか変だな。 + // とりあえず if 文どうにかしようぜ俺 if (y < 0) { if (y + TEXTURE_SPLIT_PIXEL < 0) { @@ -252,7 +252,7 @@ start_y = 0; } - // ̲ΰ˽񤭹ޤʤ褦 + // 画面下の領域に書き込まないように end_y = FRAMEBUFFER_Y - y + TEXTURE_SPLIT_PIXEL; end_y = (end_y < 0) ? TEXTURE_SPLIT_PIXEL + end_y : TEXTURE_SPLIT_PIXEL; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/task/create_span.cpp --- a/TaskManager/Test/simple_render/task/create_span.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/task/create_span.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -16,7 +16,7 @@ { int d, d1; - // float2int ΥޥȤ񤯡 + // float2int のマクロとか書く? #if 0 d = (int)vMax->y - (int)vMin->y; d1 = (int)vMid->y - (int)vMin->y; @@ -99,8 +99,8 @@ end_tex_y = tmp_tey2; } - // ̳ΤΤϤ - // ȽäƤΤʡ + // 画面外のものはここで + // この判定で当たってるのかな? #if 0 real_x = x + Viewer::width/2; real_y = y + Viewer::height/2; @@ -164,12 +164,12 @@ SpanPack *spack = &ssl->list[spu_no].packs[spp_no]; - // Span ϥ롼 + // 既に Span がある場合はスルー if (spack->info.size > 0) continue; - // ɤĤ֤ Span info.size = -1 + // 塗りつぶし用 Span は info.size = -1 // - // äƤȤˤɡ狼Ť餤 + // ってことにしたけど、わかりづらいか・・・・ spack->info.size = -1; Span *span = &spack->span[0]; span->y = y; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/task/span_pack_draw.cpp --- a/TaskManager/Test/simple_render/task/span_pack_draw.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/task/span_pack_draw.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -71,9 +71,9 @@ int end_y; int start_y; - // ̾ΰޤʤ褦 - // ʤѤʡ - // Ȥꤢ if ʸɤˤ褦 + // 画面上の領域に描き込まないように + // ・・・なんか変だな。 + // とりあえず if 文どうにかしようぜ俺 if (y < 0) { if (y + TEXTURE_SPLIT_PIXEL < 0) { return; @@ -84,14 +84,14 @@ start_y = 0; } - // ̲ΰ˽񤭹ޤʤ褦 - // äƤȤ start_y ɬפ + // 画面下の領域に書き込まないように + // ってことは start_y も必要か。 end_y = FRAMEBUFFER_Y - y + TEXTURE_SPLIT_PIXEL; end_y = (end_y < 0) ? TEXTURE_SPLIT_PIXEL + end_y : TEXTURE_SPLIT_PIXEL; - // ܲ write_pixel Ǥϡ y y = height -y ˤƤ롣 - // ȡŪˡ y++ ˿ʤ褦ˤʤ롣 - // Ǥ⡢framebuffer Ͼ夫鲼 y++ ˤʤ뤫顢𤷤 + // 本家 write_pixel では、 y を y = height -y にしている。 + // こうすると、画面的に、 y++ すると 上に進むようになる。 + // でも、framebuffer は上から下で y++ になるから、混乱しそう for (int i = start_y; i < end_y; i++) { memcpy((void*)(fbdev_addr + (4*FRAMEBUFFER_X*(y+i))), &linebuf[i*IMG_MAX_X], sizeof(int)*IMG_MAX_X); @@ -126,11 +126,11 @@ zRow_init(); do { - // pack - // ߤ pack ν򤷤Ƥ֤ - // DMA ǥɤƤ뤫ʡ + // 次の pack があれば + // 現在の pack の処理をしている間に + // DMA でロードしておく。入るかな・・・ if (spack->next != NULL) { - // Cell ǤϤʴ + // Cell ではこんな感じ? // dma_load(next_spack, spack->next, sizeof(SpanPack)); next_spack = spack->next; } else { @@ -186,7 +186,7 @@ } } - // Cell ǤϤʴ + // Cell ではこんな感じ? // dma_wait(SPAN_PACK_LOAD); spack = next_spack; } while (spack); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/task/task_init.cpp --- a/TaskManager/Test/simple_render/task/task_init.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/task/task_init.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -14,7 +14,7 @@ extern int dummy(void* wbuf, void *rbuf); /** - * set_cpu(CPU_PPE) ư task + * set_cpu(CPU_PPE) で動作する task */ void task_initialize() diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/task/update_sgp.cpp --- a/TaskManager/Test/simple_render/task/update_sgp.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/task/update_sgp.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -15,7 +15,7 @@ SceneGraphNodePtr node; float y_angle; - // ϤǤ󤸤ʤ + // 本当はここでやるもんじゃないんだが。。。 static float dest_x = 0.3f; static float dest_y = 0.5f; @@ -27,7 +27,7 @@ node = &sgp->node[i]; - // ϡϾ my_func ǹԤ + // 本当は、ここは上の my_func で行う y_angle = node->angle[1]; y_angle += 1.0f; if (y_angle > 360.0f) y_angle = 0.0f; @@ -60,9 +60,9 @@ } } - // ޤ¿ʬܤʤɡ - // in/out update ʬɬפ롩 - // ϥ桼¦ in/out ˤʤ褦˽񤫤Ρ + // まあこれは多分駄目なんだけど。 + // in/out と update は分ける必要ある? + // それはユーザ側で in/out になるように書かせるもの? memcpy(_sgp, sgp, sizeof(SceneGraphPack)); return sizeof(SceneGraphPack); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/test/LoadTexture/polygon.cpp --- a/TaskManager/Test/simple_render/test/LoadTexture/polygon.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/test/LoadTexture/polygon.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -100,7 +100,7 @@ memcpy(_pixels, texture_image->pixels, 3*128*128); - // screen ֤ɡĤ free + // screen を返すけど、いつか free して //screen = SDL_CreateRGBSurfaceFrom(_pixels, width, height, 32, //width*4, redMask, greenMask, // blueMask,alphaMask); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/simple_render/viewer_types.h --- a/TaskManager/Test/simple_render/viewer_types.h Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/simple_render/viewer_types.h Wed Jun 10 15:23:25 2009 +0900 @@ -3,8 +3,8 @@ #define SPE_NUM_MAX 6 -// texture 8x8 ʬ -// ʤѿ̾Ǥ󤫤 +// texture は 8x8 に分割 +// なんか変数名、これでいいんかい? #define TEXTURE_SPLIT_PIXEL 8 //#define TEXTURE_SPLIT_PIXEL 4 diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/Makefile --- a/TaskManager/Test/test_render/Makefile Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/Makefile Wed Jun 10 15:23:25 2009 +0900 @@ -1,14 +1,14 @@ default: macosx -macosx: FORCE +macosx: FORCE SGList.h @echo "Make for Mac OS X" @$(MAKE) -f Makefile.macosx -cell: FORCE +cell: FORCE SGList.h @echo "Make for PS3 (Cell)" @$(MAKE) -f Makefile.cell -linux: FORCE +linux: FORCE SGList.h @echo "Make for Linux" @$(MAKE) -f Makefile.linux @@ -27,4 +27,15 @@ @$(MAKE) -f Makefile.macosx clean @$(MAKE) -f Makefile.cell clean @$(MAKE) -f Makefile.linux clean - rm -f depend.inc \ No newline at end of file + rm -f depend.inc + +SGList.h: xml_file/*.xml + perl tools/create_sglist.pl xml_file/*.xml + +run-ps3: + ps3-video-mode -v 133 + ./test_nogl -video fb -width 1980 -height 1080 + +run-ps3tv: + ./test_nogl -video fb -width 576 -height 384 -bpp 32 + diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/Makefile.cell --- a/TaskManager/Test/test_render/Makefile.cell Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/Makefile.cell Wed Jun 10 15:23:25 2009 +0900 @@ -25,8 +25,8 @@ all: $(TARGET) speobject -$(TARGET): SGList.o $(OBJS) $(TASK_OBJS) - $(CC) -o $@ SGList.o $(OBJS) $(TASK_OBJS) $(LIBS) +$(TARGET): $(OBJS) $(TASK_OBJS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) SGList.o: create_sg_list $(CC) $(CFLAGS) $(INCLUDE) -c SGList.cpp -o $@ @@ -42,6 +42,9 @@ run: $(TARGET) sudo ./$(TARGET) -width 576 -height 384 -bpp 32 +run-hd: $(TARGET) + sudo /usr/sbin/ps3-video-mode -v 133 + sudo ./$(TARGET) -video fb -width 1920 -height 1080 -bpp 32 debug: $(TARGET) sudo ppu-gdb ./$(TARGET) diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/Makefile.macosx --- a/TaskManager/Test/test_render/Makefile.macosx Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/Makefile.macosx Wed Jun 10 15:23:25 2009 +0900 @@ -21,10 +21,10 @@ .cpp.o: $(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@ -all: $(TARGET) +all: SGList.o $(TARGET) -$(TARGET): SGList.o $(OBJS) $(TASK_OBJS) - $(CC) -o $@ SGList.o $(OBJS) $(TASK_OBJS) $(LIBS) +$(TARGET): $(OBJS) $(TASK_OBJS) + $(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS) SGList.o: create_sg_list @@ -52,4 +52,4 @@ rm -f *~ \#* rm -f SGList.h SGList.cpp --include depend.inc \ No newline at end of file +-include depend.inc diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/SGList.cpp --- a/TaskManager/Test/test_render/SGList.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/SGList.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,5 +1,5 @@ #include "SGList.h" const char *sglist_table[SGLIST_LENGTH] = { - "Ball", "LongCube", "Venus000", "Venus001", "Venus002", "Venus008", "Venus003", "Venus007", "Venus006", "Venus004", "Venus005", "Venus009", "Cube", "BigCube", "Plane", "SmallCube", "Diry", "Dirz", "Dirx", "IEBOSS", "IEJIKI", "IETAMA", "MCUBE_BACK", "MCUBE", "BIGMCUBE", "CUBE", "PANEL_1024", "PANEL_2048", "PANEL_512", "BACK", "BULEBULLET", "E_PLANE", "IDLE", "Sphere", "BigSphere", "Earth", "Moon" + "Ball", "LongCube", "Venus000", "Venus001", "Venus002", "Venus008", "Venus003", "Venus007", "Venus006", "Venus004", "Venus005", "Venus009", "BLAST8", "BLAST7", "BLAST6", "BLAST5", "BLAST4", "BLAST3", "BLAST2", "BLAST1", "BOSS1", "BOSS1_L", "BOSS1_R", "Cube", "BigCube", "Plane", "SmallCube", "Diry", "Dirz", "Dirx", "IEBOSS", "IEJIKI", "IETAMA", "MCUBE_BACK", "MCUBE", "BIGMCUBE", "CUBE", "P_SHOT1", "PANEL_1024", "PANEL_2048", "PANEL_512", "BACK", "BULEBULLET", "E_PLANE", "IDLE", "PLAYER", "PLAYER_L", "PLAYER_LL", "PLAYER_R", "PLAYER_RR", "Sphere", "BigSphere", "Earth", "Moon" }; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/SGList.h --- a/TaskManager/Test/test_render/SGList.h Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/SGList.h Wed Jun 10 15:23:25 2009 +0900 @@ -1,13 +1,13 @@ #ifndef INCLUDED_SGLIST #define INCLUDED_SGLIST -/* ../xml_file/Ball.xml */ +/* xml_file/Ball.xml */ #define Ball 0 -/* ../xml_file/LongCube.xml */ +/* xml_file/LongCube.xml */ #define LongCube 1 -/* ../xml_file/Venus.xml */ +/* xml_file/Venus.xml */ #define Venus000 2 #define Venus001 3 #define Venus002 4 @@ -19,63 +19,88 @@ #define Venus005 10 #define Venus009 11 -/* ../xml_file/cube.xml */ -#define Cube 12 +/* xml_file/blast.xml */ +#define BLAST8 12 +#define BLAST7 13 +#define BLAST6 14 +#define BLAST5 15 +#define BLAST4 16 +#define BLAST3 17 +#define BLAST2 18 +#define BLAST1 19 -/* ../xml_file/cube_big.xml */ -#define BigCube 13 +/* xml_file/boss1.xml */ +#define BOSS1 20 +#define BOSS1_L 21 +#define BOSS1_R 22 -/* ../xml_file/cube_split.xml */ -#define Plane 14 -#define SmallCube 15 +/* xml_file/cube.xml */ +#define Cube 23 -/* ../xml_file/direction.xml */ -#define Diry 16 -#define Dirz 17 -#define Dirx 18 +/* xml_file/cube_big.xml */ +#define BigCube 24 + +/* xml_file/cube_split.xml */ +#define Plane 25 +#define SmallCube 26 -/* ../xml_file/ieboss.xml */ -#define IEBOSS 19 +/* xml_file/direction.xml */ +#define Diry 27 +#define Dirz 28 +#define Dirx 29 -/* ../xml_file/iejiki.xml */ -#define IEJIKI 20 +/* xml_file/ieboss.xml */ +#define IEBOSS 30 -/* ../xml_file/ietama.xml */ -#define IETAMA 21 +/* xml_file/iejiki.xml */ +#define IEJIKI 31 + +/* xml_file/ietama.xml */ +#define IETAMA 32 -/* ../xml_file/mcube.xml */ -#define MCUBE_BACK 22 -#define MCUBE 23 -#define BIGMCUBE 24 -#define CUBE 25 +/* xml_file/mcube.xml */ +#define MCUBE_BACK 33 +#define MCUBE 34 +#define BIGMCUBE 35 +#define CUBE 36 + +/* xml_file/p_shot.xml */ +#define P_SHOT1 37 -/* ../xml_file/panel_1024.xml */ -#define PANEL_1024 26 +/* xml_file/panel_1024.xml */ +#define PANEL_1024 38 -/* ../xml_file/panel_2048.xml */ -#define PANEL_2048 27 +/* xml_file/panel_2048.xml */ +#define PANEL_2048 39 -/* ../xml_file/panel_512.xml */ -#define PANEL_512 28 +/* xml_file/panel_512.xml */ +#define PANEL_512 40 -/* ../xml_file/player.xml */ -#define BACK 29 -#define BULEBULLET 30 -#define E_PLANE 31 -#define IDLE 32 +/* xml_file/player.xml */ +#define BACK 41 +#define BULEBULLET 42 +#define E_PLANE 43 +#define IDLE 44 -/* ../xml_file/sphere.xml */ -#define Sphere 33 +/* xml_file/player1.xml */ +#define PLAYER 45 +#define PLAYER_L 46 +#define PLAYER_LL 47 +#define PLAYER_R 48 +#define PLAYER_RR 49 -/* ../xml_file/sphere_big.xml */ -#define BigSphere 34 +/* xml_file/sphere.xml */ +#define Sphere 50 -/* ../xml_file/universe.xml */ -#define Earth 35 -#define Moon 36 +/* xml_file/sphere_big.xml */ +#define BigSphere 51 + +/* xml_file/universe.xml */ +#define Earth 52 +#define Moon 53 /* Number of Scene */ -#define SGLIST_LENGTH 37 +#define SGLIST_LENGTH 54 /* Scene Table */ extern const char *sglist_table[SGLIST_LENGTH]; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/SpanC.cpp --- a/TaskManager/Test/test_render/SpanC.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/SpanC.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -5,7 +5,7 @@ using namespace std; -// f1:x$B$NA}2CNL(B f2:y$B$NA}2CNL(B i:....... base:$B4pK\$H$J$kD:E@$N(By$B:BI8(B +// f1:xの増加量 f2:yの増加量 i:....... base:基本となる頂点のy座標 static float calc(float f1, float f2,int i, float base){ float ans; ans = f1/f2*i + base; @@ -78,7 +78,7 @@ int end_y = (int)vMin->y; if (start_yx - vMid->x; incli_x2 = vMin->x - vMid1->x; @@ -96,13 +96,13 @@ //if(div_y < 1 && div_y > -1) div_y = 1; for(i = k; i < div_y+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMid1->x - vMin->x ,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x ,div_y, i, vMin->x); tmp_z = calc(vMid1->z - vMin->z ,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z ,div_y, i, vMin->z); //printf("x:%f end:%f z:%f zpos:%f\n",tmp_xpos,tmp_end,tmp_z,tmp_zpos); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =((i/(div_y)) * vMid1->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_y)) * vMid->tex_x) + \ @@ -113,7 +113,7 @@ tmp_tey2 =( (i/(div_y)) * vMid->tex_y) + \ ( ((div_y - i)/(div_y)) * vMin->tex_y); - //$B$3$3$G:8C<$,(Bxpos$B$+(Bend$B$rH=CG$7!"IA2h$9$k(Bspan$B$r:n$k(B + //ここで左端がxposかendを判断し、描画するspanを作る if(tmp_xpos > tmp_end) { x = (int)tmp_end; y = (int)vMin->y + i*l; @@ -236,13 +236,13 @@ if(div_y < 1 && div_y > -1) div_y = 1; for(i = 0; i < div_x+1; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMax->x - vMin->x,div_y, i, vMin->x); tmp_end = calc(vMid->x - vMin->x,div_x, i, vMin->x); tmp_z = calc(vMax->z - vMin->z,div_y, i, vMin->z); tmp_zpos = calc(vMid->z - vMin->z,div_x, i, vMin->z); - //$B$3$3$+$i(Bspan$B$N:8C<$H1&C<$KBP1~$9$k%F%/%9%A%c$r7W;;$9$k(B + //ここからspanの左端と右端に対応するテクスチャを計算する tmp_tex1 =( (i/(div_y)) * vMax->tex_x) + \ ( ((div_y - i)/(div_y)) * vMin->tex_x); tmp_tex2 =( (i/(div_x)) * vMid->tex_x) + \ @@ -253,7 +253,7 @@ tmp_tey2 =( (i/(div_x)) * vMid->tex_y) + \ ( ((div_x - i)/(div_x)) * vMin->tex_y); - //$B$3$3$G:8C<$,(Bxpos$B$+(Bend$B$rH=CG$7!"IA2h$9$k(Bspan$B$r:n$k(B + //ここで左端がxposかendを判断し、描画するspanを作る if(tmp_xpos > tmp_end) { x = (int)tmp_end; y = (int)vMin->y + i; @@ -315,7 +315,7 @@ if(div_y < 1 && div_y > -1) div_y = 1; for(i = 0; i < div_x; i++) { - //$B$3$3$G(Bspan$B$N:8C<$H1&C<$N(Bx,z$B$r5a$a$F$k(B + //ここでspanの左端と右端のx,zを求めてる tmp_xpos = calc(vMax->x-vMin->x, div_y, (i+1+top_triangle), vMin->x); tmp_end = calc(vMax->x-vMid->x, div_x, (i+1), vMid->x); tmp_z = calc(vMax->z-vMin->z, div_y, (i+1+top_triangle), vMin->z); @@ -389,7 +389,7 @@ #endif } -// i:$BJ,;R!"(Bf1:$BD9$5(B f2:$BBP1~$9$kD:E@(B1 f3:$BBP1~$9$kD:E@(B2 +// i:分子、f1:長さ f2:対応する頂点1 f3:対応する頂点2 /* float Span::calc2(int i, float f1, float f2, float f3) { float ans; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/enemy_action.cpp --- a/TaskManager/Test/test_render/enemy_action.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/enemy_action.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -31,7 +31,7 @@ if(judge == HIT) { E_PLANE->set_move_collision(null_move, enemy_collision); - printf("ENEMY_hit!!!_n"); + printf("ENEMY_hit!!!\n"); //scene_graph->delete_object(node, node->next,node->prev); } #endif diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/fb.h --- a/TaskManager/Test/test_render/fb.h Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/fb.h Wed Jun 10 15:23:25 2009 +0900 @@ -31,7 +31,7 @@ int xres,yres,vbpp,line_len; //unsigned short tcolor ; - /* ɤ߽Ѥ˥ե򳫤 */ + /* 読み書き用にファイルを開く */ fd_framebuffer = open( DEVICE_NAME , O_RDWR); if ( !fd_framebuffer ) { send_current_error_msg("Framebuffer device open error !"); @@ -39,13 +39,13 @@ } send_current_information("The framebuffer device was opened !"); - /* ꥹ꡼ */ + /* 固定スクリーン情報取得 */ if ( ioctl( fd_framebuffer , FBIOGET_FSCREENINFO , &finfo ) ) { send_current_error_msg("Fixed information not gotton !"); exit(2); } - /* ư꡼ */ + /* 変動スクリーン情報取得 */ if ( ioctl( fd_framebuffer , FBIOGET_VSCREENINFO , &vinfo ) ) { send_current_error_msg("Variable information not gotton !"); exit(3); @@ -57,10 +57,10 @@ sprintf( tmp , "%d(pixel)x%d(line), %dbpp(bits per pixel)",xres,yres,vbpp); send_current_information( tmp ); - /* Хñ̤ǤΥ꡼Υ׻ */ + /* バイト単位でのスクリーンのサイズを計算 */ screensize = xres * yres * vbpp / DIV_BYTE ; - /* ǥХ˥ޥåפ */ + /* デバイスをメモリにマップする */ fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE,MAP_SHARED,fd_framebuffer,0); if ( (int)fbptr == -1 ) { send_current_error_msg("Don't get framebuffer device to memory !"); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/CreatePolygon.cpp --- a/TaskManager/Test/test_render/spe/CreatePolygon.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/CreatePolygon.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -4,6 +4,9 @@ * だめだったら、そこら辺が怪しいと思うべき */ +#define DEBUG +#include "error.h" + #include "CreatePolygon.h" #include "polygon_pack.h" #include "scene_graph_pack.h" @@ -37,6 +40,8 @@ int CreatePolygon::run(void *rbuf, void *wbuf) { + __debug_spe("CreatePolygon\n"); + float xyz1[4],xyz2[4],xyz3[4]; SceneGraphPackPtr sgp = (SceneGraphPack*)smanager->get_input(0); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/CreateSpan.cpp --- a/TaskManager/Test/test_render/spe/CreateSpan.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/CreateSpan.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,5 @@ +#define DEBUG +#include "error.h" #include "CreateSpan.h" #include "viewer_types.h" @@ -291,9 +293,11 @@ if (spack->info.size >= MAX_SIZE_SPAN) { SpanPackPtr next; + __debug_spe("CreateSpan mainMem_alloc 0x%x\n", (unsigned int)sizeof(SpanPack)); smanager->mainMem_alloc(0, sizeof(SpanPack)); smanager->mainMem_wait(); next = (SpanPackPtr)smanager->mainMem_get(0); + __debug_spe("CreateSpan mainMem_allocated 0x%x\n", (unsigned int)next); spack->next = next; // この部分は TaskManager でやる @@ -408,6 +412,8 @@ int CreateSpan::run(void *rbuf, void *wbuf) { + __debug_spe("CreateSpan\n"); + PolygonPack *pp = (PolygonPack*)smanager->get_input(0); PolygonPack *next_pp = (PolygonPack*)smanager->allocate(sizeof(PolygonPack)); @@ -432,6 +438,8 @@ int charge_y_end = get_param(2); do { + __debug_spe("CreateSpan allocated 0x%x\n",(uint32)next_pp); + if (pp->next != NULL) { smanager->dma_load(next_pp, (uint32)pp->next, sizeof(PolygonPack), POLYGON_PACK_LOAD); @@ -486,6 +494,7 @@ smanager->dma_store(spack, (uint32)spackList[prev_index], sizeof(SpanPack), SPAN_PACK_STORE); smanager->dma_wait(SPAN_PACK_STORE); + __debug_spe("CreateSpan spack_stored 0x%x\n",(uint32)spackList[prev_index]); // smanager で allocate したのだから free も smanager でやるべき free(free_pp); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/DrawBack.cpp --- a/TaskManager/Test/test_render/spe/DrawBack.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/DrawBack.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,6 @@ +#define DEBUG +#include "error.h" + #include #include #include "DrawBack.h" @@ -16,6 +19,7 @@ int DrawBack::run(void *rbuf, void *wbuf) { + __debug_spe("DrawBack\n"); int rgb = smanager->get_param(0); int rangex_start = smanager->get_param(1); int rangex_end = smanager->get_param(2); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/DrawSpan.cpp --- a/TaskManager/Test/test_render/spe/DrawSpan.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/DrawSpan.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,6 @@ +#define DEBUG +#include "error.h" + #include #include #include @@ -557,6 +560,7 @@ int DrawSpan::run(void *rbuf, void *wbuf) { + __debug_spe("DrawSpan\n"); SpanPackPtr spack = (SpanPackPtr)smanager->get_input(0); SpanPackPtr next_spack = (SpanPackPtr)smanager->allocate(sizeof(SpanPack)); SpanPackPtr free_spack = next_spack; // next_spack の free() 用 diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/DrawSpanRenew.cpp --- a/TaskManager/Test/test_render/spe/DrawSpanRenew.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/DrawSpanRenew.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,6 @@ +#define DEBUG +#include "error.h" + #include #include #include @@ -26,24 +29,25 @@ renew_task->add_param((int)curr); renew_task->add_param(cur_span_x); - // linebuf zRow Ѥ + // linebuf と zRow も引き継がせる renew_task->add_param((int)linebuf); renew_task->add_param((int)zRow); //fprintf(stderr, "[%p] start %u\n", curr, spu_readch(SPU_RdDec)); /** - * ƵưԤ + * 再起動したタスクを待つ */ smanager->wait_task(renew_task); - // next_spack free() Τ wait + // next_spack は free() するので wait する smanager->dma_wait(SPAN_PACK_LOAD); } int DrawSpanRenew::run(void *rbuf, void *wbuf) { + __debug_spe("DrawSpanRenew\n"); SpanPackPtr spack = (SpanPackPtr)smanager->get_param(1); SpanPackPtr next_spack = (SpanPackPtr)smanager->allocate(sizeof(SpanPack)); SpanPackPtr free_spack1 = spack; @@ -56,10 +60,10 @@ int rangex_start = args->rangex_start; int rangex_end = args->rangex_end; - // Υô x ϰ + // このタスクが担当する x の範囲 int rangex = rangex_end - rangex_start + 1; - // y ϰ (render_y + rangey - 1) + // y の範囲 (render_y + rangey - 1) int rangey = args->rangey; hash = (TileHashPtr)smanager->global_get(GLOBAL_TEXTURE_HASH); @@ -70,7 +74,7 @@ doneWrite = 0; - // span->length_x νǤκƵư + // span->length_x の処理での再起動位置 int js_cont = smanager->get_param(2); //fprintf(stderr, "[%p] end %u\n", spack, spu_readch(SPU_RdDec)); @@ -79,9 +83,9 @@ do { /** - * SpanPack->next ¸ߤ硢 - * ߤ SpanPack Ƥ֤ - * SpanPack DMA žԤ + * SpanPack->next が存在する場合、 + * 現在の SpanPack を処理してる間に + * 次の SpanPack の DMA 転送を行う */ if (spack->next != NULL) { smanager->dma_load(next_spack, (uint32)spack->next, @@ -100,15 +104,15 @@ float tey2 = span->tex_y2; /** - * Span 1 pixel - * ƥκɸ + * Span が持つ 1 pixel 毎の + * テクスチャの座標 */ int tex_xpos; int tex_ypos; /** - * (tex_xpos, tex_ypos) Ρ֥å(ο޻)Ǥκɸ - * Υ֥åΥɥ쥹(MainMemory) + * (tex_xpos, tex_ypos) の、ブロック内(上の図参照)での座標と + * そのブロックのアドレス(MainMemory) */ int tex_localx; int tex_localy; @@ -120,7 +124,7 @@ float z = span->start_z; float zpos = span->end_z; - // ɸ [0 .. split_screen_w-1] 褦 x,y -1 + // 座標が [0 .. split_screen_w-1] に入るように x,y を -1 int localx = getLocalX(x-1); int localy = getLocalY(y-1); @@ -154,9 +158,9 @@ float tex_x, tex_y, tex_z; /** - * ӤСʸƵưޤǤ - * js_cont ϻȤʤ 0 ˤƤ櫓ɡ - * ǽΰΤˤϤɤΡ + * 一回比較すれば、以後再起動するまでは + * js_cont は使わないから 0 にしてるわけだけど、 + * 最初の一回のためだけにこれはめんどくさいのー。 */ js = (js < js_cont) ? js_cont : js; js_cont = 0; @@ -217,7 +221,7 @@ free(args); /** - * linebuf, zRow, args RenewTask Ѥ + * linebuf, zRow, args は RenewTask が引き継ぐ */ free(free_spack1); free(free_spack2); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/Load_Texture.cpp --- a/TaskManager/Test/test_render/spe/Load_Texture.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/Load_Texture.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,6 @@ +#define DEBUG +#include "error.h" + #include #include #include "Load_Texture.h" @@ -14,6 +17,7 @@ int LoadTexture::run(void *rbuf , void *wbuf) { + __debug_spe("LoadTexture\n"); /** * 現在 global_alloc() では new をサポートしてないので * コンストラクタ呼ぶために placement new してます。 diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/spe/Set_Texture.cpp --- a/TaskManager/Test/test_render/spe/Set_Texture.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/spe/Set_Texture.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -1,3 +1,6 @@ +#define DEBUG +#include "error.h" + #include #include "Set_Texture.h" #include "texture.h" @@ -8,6 +11,7 @@ int SetTexture::run(void *rbuf, void *wbuf) { + __debug_spe("SetTexture\n"); void *src[4]; src[0] = get_input(rbuf, 0); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/task/DrawSpan.cpp --- a/TaskManager/Test/test_render/task/DrawSpan.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/task/DrawSpan.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -266,12 +266,6 @@ DrawSpan::updateBuffer(float zpos, int rangex, int x, int y, int tex_x, int tex_y, float normal_x, float normal_y, float normal_z, uint32 *tex_addr) { -<<<<<<< local - int rgb = get_rgb(tex_x, tex_y, tex_addr); - - zRow[x + (rangex*y)] = zpos; - linebuf[x + (rangex*y)] = rgb; -======= int color = get_rgb(tex_x, tex_y, tex_addr); /*下位4bitを抽出*/ @@ -284,7 +278,6 @@ zRow[x + (rangex*y)] = zpos*flag + zRow[x + (rangex*y)]*(1-flag); linebuf[x + (rangex*y)] = color*flag + linebuf[x + (rangex*y)]*(1-flag); ->>>>>>> other } /** diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/task/DrawSpanRenew.cpp --- a/TaskManager/Test/test_render/task/DrawSpanRenew.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/task/DrawSpanRenew.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -25,18 +25,18 @@ renew_task->add_param((int)curr); renew_task->add_param(cur_span_x); - // linebuf zRow Ѥ + // linebuf と zRow も引き継がせる renew_task->add_param((int)linebuf); renew_task->add_param((int)zRow); //fprintf(stderr, "[%p] start %u\n", curr, spu_readch(SPU_RdDec)); /** - * ƵưԤ + * 再起動したタスクを待つ */ smanager->wait_task(renew_task); - // next_spack free() Τ wait + // next_spack は free() するので wait する smanager->dma_wait(SPAN_PACK_LOAD); } @@ -55,10 +55,10 @@ int rangex_start = args->rangex_start; int rangex_end = args->rangex_end; - // Υô x ϰ + // このタスクが担当する x の範囲 int rangex = rangex_end - rangex_start + 1; - // y ϰ (render_y + rangey - 1) + // y の範囲 (render_y + rangey - 1) int rangey = args->rangey; hash = (TileHashPtr)smanager->global_get(GLOBAL_TEXTURE_HASH); @@ -69,7 +69,7 @@ doneWrite = 0; - // span->length_x νǤκƵư + // span->length_x の処理での再起動位置 int js_cont = smanager->get_param(2); //fprintf(stderr, "[%p] end %u\n", spack, spu_readch(SPU_RdDec)); @@ -78,9 +78,9 @@ do { /** - * SpanPack->next ¸ߤ硢 - * ߤ SpanPack Ƥ֤ - * SpanPack DMA žԤ + * SpanPack->next が存在する場合、 + * 現在の SpanPack を処理してる間に + * 次の SpanPack の DMA 転送を行う */ if (spack->next != NULL) { smanager->dma_load(next_spack, (uint32)spack->next, @@ -99,15 +99,15 @@ float tey2 = span->tex_y2; /** - * Span 1 pixel - * ƥκɸ + * Span が持つ 1 pixel 毎の + * テクスチャの座標 */ int tex_xpos; int tex_ypos; /** - * (tex_xpos, tex_ypos) Ρ֥å(ο޻)Ǥκɸ - * Υ֥åΥɥ쥹(MainMemory) + * (tex_xpos, tex_ypos) の、ブロック内(上の図参照)での座標と + * そのブロックのアドレス(MainMemory) */ int tex_localx; int tex_localy; @@ -119,7 +119,7 @@ float z = span->start_z; float zpos = span->end_z; - // ɸ [0 .. split_screen_w-1] 褦 x,y -1 + // 座標が [0 .. split_screen_w-1] に入るように x,y を -1 int localx = getLocalX(x-1); int localy = getLocalY(y-1); @@ -153,9 +153,9 @@ float tex_x, tex_y, tex_z; /** - * ӤСʸƵưޤǤ - * js_cont ϻȤʤ 0 ˤƤ櫓ɡ - * ǽΰΤˤϤɤΡ + * 一回比較すれば、以後再起動するまでは + * js_cont は使わないから 0 にしてるわけだけど、 + * 最初の一回のためだけにこれはめんどくさいのー。 */ js = (js < js_cont) ? js_cont : js; js_cont = 0; @@ -217,7 +217,7 @@ //FINISH: /** - * linebuf, zRow, args RenewTask Ѥ + * linebuf, zRow, args は RenewTask が引き継ぐ */ free(free_spack1); free(free_spack2); diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/task/task_init.cpp --- a/TaskManager/Test/test_render/task/task_init.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/task/task_init.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -17,7 +17,7 @@ SchedExternTask(Dummy); /** - * set_cpu(CPU_PPE) ư task + * set_cpu(CPU_PPE) で動作する task */ void task_initialize() diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/task/update_sgp.cpp --- a/TaskManager/Test/test_render/task/update_sgp.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/task/update_sgp.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -17,7 +17,7 @@ //int screen_width = get_param(0); //int screen_height = get_param(1); - // ϤǤ󤸤ʤ + // 本当はここでやるもんじゃないんだが。。。 for (int i = 0; i < sgp->info.size && i < 3; i++) { node = &sgp->node[i]; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/tools/create_sglist.pl --- a/TaskManager/Test/test_render/tools/create_sglist.pl Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/tools/create_sglist.pl Wed Jun 10 15:23:25 2009 +0900 @@ -54,10 +54,14 @@ #################################### use strict; +# +# to install this, +# cpan -i XML::LibXML::SAX::Generator +# use XML::LibXML; -my $outfile_h = "../SGList.h"; -my $outfile_c = "../SGList.cpp"; +my $outfile_h = "SGList.h"; +my $outfile_c = "SGList.cpp"; my $id = 0; my @table; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/viewer.cpp --- a/TaskManager/Test/test_render/viewer.cpp Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/viewer.cpp Wed Jun 10 15:23:25 2009 +0900 @@ -94,6 +94,7 @@ extern void init_position(int, int); extern void vacuum_init(int w, int h); extern void untitled_init(void); +extern void boss1_init(int w, int h); void Viewer::run_init(const char *xml, int sg_number) { @@ -141,6 +142,9 @@ case 12: untitled_init(); break; + case 13: + boss1_init(this->width, this->height); + break; default: node_init(); break; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/Test/test_render/viewer_types.h --- a/TaskManager/Test/test_render/viewer_types.h Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/Test/test_render/viewer_types.h Wed Jun 10 15:23:25 2009 +0900 @@ -1,12 +1,12 @@ #ifndef INCLUDED_VIEWER_TYPES #define INCLUDED_VIEWER_TYPES -// texture 8x8 ʬ -// ͤϡSpanPack ˤȤ +// texture は 8x8 に分割 +// この値は、SpanPack にも使う const int TEXTURE_SPLIT_PIXEL = 8; const int TEXTURE_BLOCK_SIZE = TEXTURE_SPLIT_PIXEL*TEXTURE_SPLIT_PIXEL; -// Ĥ SPE ô width, height (pixel) +// 一個の SPE が描画担当する width, height (pixel) const int split_screen_w = 256; const int split_screen_h = 8; diff -r 776c125af0b2 -r f64d75473f95 TaskManager/kernel/main.cc --- a/TaskManager/kernel/main.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/kernel/main.cc Wed Jun 10 15:23:25 2009 +0900 @@ -3,6 +3,10 @@ #include #include "TaskManager.h" +/*! + User が書いた TMmain() (*名前は固定) を実行する + */ + /* User main function */ extern int TMmain(int argc, char *argv[]); @@ -11,6 +15,11 @@ defaultTMend(void) {} TaskManager *manager; + +/*! + const char *usr_help_str を User 側で指定する必要がある + -help で出力される文字列 + */ const char *help_str = "\n\ * Cerium program option *\n\ -help Print this message \n\ diff -r 776c125af0b2 -r f64d75473f95 TaskManager/kernel/schedule/SchedTask.cc --- a/TaskManager/kernel/schedule/SchedTask.cc Wed Jun 10 15:12:39 2009 +0900 +++ b/TaskManager/kernel/schedule/SchedTask.cc Wed Jun 10 15:23:25 2009 +0900 @@ -67,7 +67,7 @@ free(__list); } - + } /**