Mercurial > hg > Game > Cerium
changeset 321:f22280772f20 draft
merge 317
line wrap: on
line diff
--- 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 @@ <icon BUILTIN="full-1"/> <icon BUILTIN="button_ok"/> <node CREATED="1243578499039" ID="Freemind_Link_1478568979" MODIFIED="1243944044789" TEXT="hiroki"/> -<node CREATED="1244544615331" ID="Freemind_Link_314435740" MODIFIED="1244544645999" TEXT="test_render でボタンが押されたときに表示するTaskを起動する"/> -<node CREATED="1244544654035" ID="Freemind_Link_1019324151" MODIFIED="1244544685192" TEXT="SPU 0 〜 5 に表示する Task を生成する"/> </node> </node> <node CREATED="1243334733712" ID="Freemind_Link_1055841346" MODIFIED="1243334790932" TEXT="CodeのLoad"> @@ -31,6 +29,7 @@ </node> <node CREATED="1243584255924" ID="Freemind_Link_784128675" MODIFIED="1243767918303" TEXT="dma_wait 後落ちる"> <icon BUILTIN="button_ok"/> +<node CREATED="1243584287314" ID="Freemind_Link_1653925279" MODIFIED="1243584287314" TEXT=""/> </node> <node CREATED="1243584369566" HGAP="26" ID="Freemind_Link_1788139696" MODIFIED="1243943459201" TEXT="code_load をどこに入れる?" VSHIFT="4"> <icon BUILTIN="full-1"/> @@ -57,35 +56,32 @@ </node> <node CREATED="1243334967348" HGAP="23" ID="Freemind_Link_728996277" MODIFIED="1243334981305" TEXT="Rendering" VSHIFT="-5"> <node CREATED="1243334991181" ID="Freemind_Link_151269429" MODIFIED="1243334997520" TEXT="Z sort"/> -<node CREATED="1243335004925" ID="Freemind_Link_1543200827" MODIFIED="1244544966902" TEXT="Texture抜きのWrite"> -<icon BUILTIN="full-2"/> -<node CREATED="1244544974228" ID="Freemind_Link_1606682245" MODIFIED="1244544978721" TEXT="yutaka"/> -<node CREATED="1244544996712" ID="Freemind_Link_1723799405" MODIFIED="1244545001518" TEXT="色の指定"/> -</node> +<node CREATED="1243335004925" ID="Freemind_Link_1543200827" MODIFIED="1243335017960" TEXT="Texture抜きのWrite"/> <node CREATED="1243335087307" ID="Freemind_Link_675827042" MODIFIED="1243943707646" TEXT="光源"> <icon BUILTIN="full-1"/> -<node CREATED="1243943756522" ID="Freemind_Link_1524342007" MODIFIED="1244544596362" TEXT="SpanPack に光の方向をいれる"> -<icon BUILTIN="button_ok"/> +<node CREATED="1243943756522" ID="Freemind_Link_1524342007" MODIFIED="1243943778264" TEXT="SpanPack に光の方向をいれる"> <node CREATED="1243944032110" ID="Freemind_Link_1186115113" MODIFIED="1243944036836" TEXT="yutaka"/> </node> -<node CREATED="1244544567403" ID="Freemind_Link_1562932476" MODIFIED="1244544588759" TEXT="複数の光源をglobal_get"/> </node> <node CREATED="1243335102555" ID="Freemind_Link_300667458" MODIFIED="1243335111239" TEXT="perspective"/> <node CREATED="1243335124792" ID="Freemind_Link_373044243" MODIFIED="1243335127788" TEXT="camera"/> </node> <node CREATED="1243334938485" ID="Freemind_Link_952011832" MODIFIED="1243334941904" TEXT="実装例"> -<node CREATED="1243334942821" ID="Freemind_Link_1640545704" MODIFIED="1244545471110" TEXT="Super_Dandy"> -<icon BUILTIN="full-3"/> -<node CREATED="1244545462124" ID="Freemind_Link_1671391521" MODIFIED="1244545465039" TEXT="KoBa"/> -</node> -<node CREATED="1243335414034" ID="Freemind_Link_175851707" MODIFIED="1244545506517" TEXT="Racing Game"> -<icon BUILTIN="full-3"/> -<node CREATED="1244545492395" ID="Freemind_Link_1846997152" MODIFIED="1244545498749" TEXT="ショウシー"/> -</node> +<node CREATED="1243334942821" ID="Freemind_Link_1640545704" MODIFIED="1243334951264" TEXT="Super_Dandy"/> +<node CREATED="1243335414034" ID="Freemind_Link_175851707" MODIFIED="1243335427461" TEXT="Racing Game"/> </node> <node CREATED="1243335132056" ID="Freemind_Link_966536257" MODIFIED="1243335158564" TEXT="Network"> <node CREATED="1243335159672" ID="Freemind_Link_710888232" MODIFIED="1243335177852" TEXT="Federated Linda"/> </node> +<node CREATED="1244195368998" ID="Freemind_Link_344530979" MODIFIED="1244195487031" TEXT="Documentation"> +<node CREATED="1244195375774" ID="Freemind_Link_1804698870" MODIFIED="1244195490301" TEXT="Doxygen"> +<icon BUILTIN="button_ok"/> +<node CREATED="1244195390125" ID="Freemind_Link_396837642" MODIFIED="1244195420362" TEXT="Task API"> +<icon BUILTIN="full-1"/> +<node CREATED="1244195445543" ID="Freemind_Link_1489702866" MODIFIED="1244195453242" TEXT="Kaito"/> +</node> +</node> +</node> </node> <node CREATED="1243335266234" ID="Freemind_Link_388441282" MODIFIED="1243767884427" POSITION="left" TEXT="右が終わったらOptimize"/> <node CREATED="1243756108386" ID="Freemind_Link_1530684505" MODIFIED="1243756115045" POSITION="left" TEXT="読んで行く時の課題"> @@ -110,11 +106,7 @@ <node CREATED="1243767262537" ID="Freemind_Link_507081989" MODIFIED="1243943546127" TEXT="SceneGraph の変形を copy base にする"> <icon BUILTIN="full-1"/> <node CREATED="1243767288336" ID="Freemind_Link_388959053" MODIFIED="1243767306119" TEXT="drawing と SceneGraph の演算を並列に"/> -<node CREATED="1244544869860" ID="Freemind_Link_660333063" MODIFIED="1244544908063" TEXT="SPU上で動作するようにする(CreatePolygonPP2)"/> -<node CREATED="1244544908668" ID="Freemind_Link_56800585" MODIFIED="1244544927456" TEXT="Taskの中でdma_loadしない"> -<node CREATED="1244544928324" ID="Freemind_Link_690247851" MODIFIED="1244544946964" TEXT="そのために必要なTaskのAPIを用意する"/> -</node> -<node CREATED="1243943934419" ID="Freemind_Link_1634946486" MODIFIED="1244544830283" TEXT="Kaito"/> +<node CREATED="1243943934419" ID="Freemind_Link_1634946486" MODIFIED="1243943944585" TEXT="tagano"/> </node> <node CREATED="1243767320557" ID="Freemind_Link_830109616" MODIFIED="1243767357291" TEXT="アーキテクチャに依存した Task の scheduling"> <node CREATED="1243767364243" ID="Freemind_Link_683952054" MODIFIED="1243767371836" TEXT="Task の定義の外に出す"/> @@ -127,34 +119,123 @@ <icon BUILTIN="full-1"/> <node CREATED="1243943627426" ID="Freemind_Link_57266388" MODIFIED="1243943646050" TEXT="autoconf"/> <node CREATED="1243943652122" ID="Freemind_Link_1676705308" MODIFIED="1243943682172" TEXT="Architecture の specialization"/> -<node CREATED="1243943991903" ID="Freemind_Link_447888194" MODIFIED="1244544760508" TEXT="KoBa"/> +<node CREATED="1243943991903" ID="Freemind_Link_447888194" MODIFIED="1243943997324" TEXT="hiroki"/> </node> <node CREATED="1243943883125" ID="Freemind_Link_722594854" MODIFIED="1243944098553" TEXT="例題の整理"> <icon BUILTIN="full-1"/> <node CREATED="1243943799623" ID="Freemind_Link_478163251" MODIFIED="1243943825181" TEXT="test_render 解体"> <node CREATED="1243943832806" ID="Freemind_Link_1334546525" MODIFIED="1243943841025" TEXT="作り直す"/> -<node CREATED="1244545355198" ID="Freemind_Link_1395032705" MODIFIED="1244545390920" TEXT="test_render の Task のテスト"> -<icon BUILTIN="full-2"/> -<node CREATED="1244545380854" ID="Freemind_Link_448813750" MODIFIED="1244545383481" TEXT="KoBa"/> +</node> +<node CREATED="1243943907996" ID="Freemind_Link_766522959" MODIFIED="1244195518922" TEXT="example を今の ver にする"> +<icon BUILTIN="button_ok"/> +</node> +<node CREATED="1243944111117" ID="Freemind_Link_640625182" MODIFIED="1243944122505" TEXT="all member"/> +</node> +<node CREATED="1244197352799" ID="Freemind_Link_1895470931" MODIFIED="1244197358376" TEXT="API の整理"> +<node CREATED="1244197362014" ID="Freemind_Link_901399449" MODIFIED="1244197385157" TEXT="wait_for している task に直接データを書く"> +<node CREATED="1244197407714" ID="Freemind_Link_288985550" MODIFIED="1244197435201" TEXT="wait_for(task, buff)"> +<node CREATED="1244197614248" ID="Freemind_Link_1094033372" MODIFIED="1244197616835" TEXT="kono"/> </node> </node> -<node CREATED="1243943907996" ID="Freemind_Link_766522959" MODIFIED="1243943926580" TEXT="example を今の ver にする"/> -<node CREATED="1243944111117" ID="Freemind_Link_640625182" MODIFIED="1243944122505" TEXT="all member"/> -<node CREATED="1244544770134" ID="Freemind_Link_479862774" MODIFIED="1244544796668" TEXT="SchedTaskの継承をしない"/> -<node CREATED="1244544801340" ID="Freemind_Link_1114791749" MODIFIED="1244545319507" TEXT="runの引数でSchedTaskを渡す"> -<icon BUILTIN="button_ok"/> +<node CREATED="1244197443489" ID="Freemind_Link_125766992" MODIFIED="1244197453694" TEXT="set_symbol"> +<node CREATED="1244197456033" ID="Freemind_Link_1569844487" MODIFIED="1244197611724" TEXT="古いので取り除く"> +<icon BUILTIN="full-1"/> +</node> +</node> +<node CREATED="1244197481779" ID="Freemind_Link_797021358" MODIFIED="1244197537933" TEXT="set_inData()"> +<node CREATED="1244197547212" ID="Freemind_Link_158350291" MODIFIED="1244197562140" TEXT="これは使わず List dma で行う"/> +</node> +<node CREATED="1244197577153" ID="Freemind_Link_1089652662" MODIFIED="1244197581828" TEXT="task array"> +<node CREATED="1244197585217" ID="Freemind_Link_540367081" MODIFIED="1244197607775" TEXT="こっちも List dma"/> </node> </node> </node> -<node CREATED="1244545101880" ID="Freemind_Link_1259956700" MODIFIED="1244545274916" POSITION="left" TEXT="CbC"> -<icon BUILTIN="full-2"/> -<node CREATED="1244545115592" ID="Freemind_Link_1164269640" MODIFIED="1244545145257" TEXT="PPUのindirect_jump"/> -<node CREATED="1244545152040" ID="Freemind_Link_302170687" MODIFIED="1244545170201" TEXT="引数のレジスタへのmapping"/> -<node CREATED="1244545172417" ID="Freemind_Link_1870383582" MODIFIED="1244545180564" TEXT="関数内部のgoto"> -<node CREATED="1244545182016" ID="Freemind_Link_1408393906" MODIFIED="1244545204164" TEXT="環境をセーブする場所をThread localにする"/> +<node CREATED="1244193625986" FOLDED="true" ID="Freemind_Link_701330739" MODIFIED="1244197654332" POSITION="left" TEXT="Task と Renderer の整理"> +<icon BUILTIN="full-1"/> +<node CREATED="1244193645575" ID="Freemind_Link_1173374726" MODIFIED="1244193670426" TEXT="複数の Task が生成される"> +<node CREATED="1244193727669" ID="Freemind_Link_1268929487" MODIFIED="1244193736216" TEXT="Linux 用"/> +<node CREATED="1244193737941" ID="Freemind_Link_368325310" MODIFIED="1244193742504" TEXT="SPE 用"/> +</node> +<node CREATED="1244193689878" ID="Freemind_Link_639973478" MODIFIED="1244193700240" TEXT="複数の Project"/> +<node CREATED="1244193708704" ID="Freemind_Link_1528860920" MODIFIED="1244193724594" TEXT="TaskManager は別 dir"/> +<node CREATED="1244193761741" ID="Freemind_Link_382768400" MODIFIED="1244193770786" TEXT="単純な Link ではできない"> +<node CREATED="1244193774725" ID="Freemind_Link_1257872906" MODIFIED="1244193796261" TEXT="SPU の Task は fixpic.pl"/> +<node CREATED="1244193800916" ID="Freemind_Link_1452077817" MODIFIED="1244194144503" TEXT="Overlay 用に ld script 生成"/> +<node CREATED="1244193822003" ID="Freemind_Link_180312868" MODIFIED="1244193836444" TEXT="同様の動作をする Linux 用 Task"/> +<node CREATED="1244193839763" ID="Freemind_Link_684133611" MODIFIED="1244193845032" TEXT="Makefile の生成"/> +<node CREATED="1244193862979" ID="Freemind_Link_1572825155" MODIFIED="1244193877683" TEXT="他の Project の Task include"/> +</node> +<node CREATED="1244193888042" ID="Freemind_Link_77829001" MODIFIED="1244193907388" TEXT="生成 script"> +<node CREATED="1244193925330" ID="Freemind_Link_62306375" MODIFIED="1244193973558" TEXT="何を読み込むのか"> +<node CREATED="1244193980897" ID="Freemind_Link_1309775877" MODIFIED="1244194019677" TEXT="Task dirrectly 下の Task"> +<node CREATED="1244194079990" ID="Freemind_Link_1832183795" MODIFIED="1244194097528" TEXT="SPU 用に特殊化した Task"> +<node CREATED="1244194429596" ID="Freemind_Link_1864588466" MODIFIED="1244194442368" TEXT="spe の下に置く"/> +</node> +</node> +<node CREATED="1244194022848" ID="Freemind_Link_340021666" MODIFIED="1244194042054" TEXT="Task の property"> +<node CREATED="1244194318241" ID="Freemind_Link_1694330225" MODIFIED="1244194347986" TEXT="Task の source file に書くか"/> +<node CREATED="1244194332595" ID="Freemind_Link_297529046" MODIFIED="1244194344283" TEXT="Task.xml に書くか"> +<node CREATED="1244194401141" ID="Freemind_Link_324450065" MODIFIED="1244194424397" TEXT="task name"/> +</node> +</node> +<node CREATED="1244194048671" ID="Freemind_Link_83841604" MODIFIED="1244194067046" TEXT="include する Project の指定"> +<node CREATED="1244194367558" ID="Freemind_Link_1248430118" MODIFIED="1244194384513" TEXT="Project.xml を作る"/> +<node CREATED="1244194525525" ID="Freemind_Link_1218365852" MODIFIED="1244194544099" TEXT="OS によって include する Project を代える"/> +<node CREATED="1244194546253" ID="Freemind_Link_1082915051" MODIFIED="1244194553260" TEXT="fifo Manager"/> +<node CREATED="1244194553613" ID="Freemind_Link_94805969" MODIFIED="1244194559318" TEXT="cell Manager"/> +</node> +</node> +<node CREATED="1244193974881" ID="Freemind_Link_537320432" MODIFIED="1244193978202" TEXT="何を生成するのか"> +<node CREATED="1244194112790" ID="Freemind_Link_78213203" MODIFIED="1244194119354" TEXT="Makefile"/> +<node CREATED="1244194121558" ID="Freemind_Link_761598913" MODIFIED="1244194131416" TEXT="ld script"/> +<node CREATED="1244194133933" ID="Freemind_Link_1723085633" MODIFIED="1244194136337" TEXT="func.h"/> +<node CREATED="1244194452419" ID="Freemind_Link_508292863" MODIFIED="1244194459954" TEXT="生成 object"> +<node CREATED="1244194461651" ID="Freemind_Link_1774977667" MODIFIED="1244194472599" TEXT="spu main"> +<node CREATED="1244194474203" ID="Freemind_Link_588029435" MODIFIED="1244194482439" TEXT="embeded"/> </node> -<node CREATED="1244545215705" ID="Freemind_Link_1068131680" MODIFIED="1244545227748" TEXT="Data Segment の定義"/> -<node CREATED="1244545229768" ID="Freemind_Link_1164262083" MODIFIED="1244545251172" TEXT="Data Segment を転送する Code Segment の定義"/> +<node CREATED="1244194489939" ID="Freemind_Link_938154914" MODIFIED="1244194495136" TEXT="ppu.o"/> +</node> +</node> +<node CREATED="1244194166653" ID="Freemind_Link_420595528" MODIFIED="1244194172741" TEXT="使い方"> +<node CREATED="1244194174708" ID="Freemind_Link_913924057" MODIFIED="1244194244825" TEXT="make の代わりに使う"> +<node CREATED="1244194245536" ID="Freemind_Link_1610936977" MODIFIED="1244194253425" TEXT="中で make を呼ぶ"/> +</node> +<node CREATED="1244195022249" ID="Freemind_Link_1184501567" MODIFIED="1244195031444" TEXT="script の名前"> +<node CREATED="1244195031857" ID="Freemind_Link_1095160292" MODIFIED="1244195111267" TEXT="cerium_make" VSHIFT="1"/> +</node> +</node> +<node CREATED="1244194582752" ID="Freemind_Link_1486772533" MODIFIED="1244194586419" TEXT="例題"> +<node CREATED="1244194593606" ID="Freemind_Link_1794484768" MODIFIED="1244194599178" TEXT="test_render"> +<node CREATED="1244194601902" ID="Freemind_Link_960793768" MODIFIED="1244194614986" TEXT="Renderer"/> +<node CREATED="1244194634757" ID="Freemind_Link_894031439" MODIFIED="1244194641573" TEXT="分離"/> +<node CREATED="1244194615309" ID="Freemind_Link_722552679" MODIFIED="1244194663568" TEXT="Test"> +<node CREATED="1244194673020" ID="Freemind_Link_1810212132" MODIFIED="1244194680930" TEXT="video-mode check"/> +<node CREATED="1244194687908" ID="Freemind_Link_213845842" MODIFIED="1244194693407" TEXT="no-video-mode"/> +</node> +</node> +<node CREATED="1244194736313" ID="Freemind_Link_1103784183" MODIFIED="1244194740124" TEXT="場所"> +<node CREATED="1244194740493" ID="Freemind_Link_1667247959" MODIFIED="1244194880277" TEXT="Cerium/Renderer/fb"> +<node CREATED="1244194913168" ID="Freemind_Link_120515783" MODIFIED="1244194920364" TEXT="Task"/> +<node CREATED="1244194920784" ID="Freemind_Link_1570615471" MODIFIED="1244194930992" TEXT="spe"/> +</node> +<node CREATED="1244194881478" ID="Freemind_Link_1372200566" MODIFIED="1244194891874" TEXT="Cerium/Renderer/openGL"/> +<node CREATED="1244194966158" ID="Freemind_Link_1011475234" MODIFIED="1244194977821" TEXT="Cerium/example"> +<node CREATED="1244194978654" ID="Freemind_Link_1112549863" MODIFIED="1244194994365" TEXT="SceneGraph"> +<node CREATED="1244194996614" ID="Freemind_Link_693836946" MODIFIED="1244194999210" TEXT="test1"/> +<node CREATED="1244195011830" ID="Freemind_Link_1012481793" MODIFIED="1244195013459" TEXT="test2"/> +</node> +</node> +</node> +</node> +<node CREATED="1244195176485" ID="Freemind_Link_1222059690" MODIFIED="1244195201879" TEXT="Directly 構成" VSHIFT="-10"> +<node CREATED="1244195202706" ID="Freemind_Link_425257332" MODIFIED="1244195219282" TEXT="/usr/local/Cerium"> +<node CREATED="1244195220338" ID="Freemind_Link_1882319906" MODIFIED="1244195223092" TEXT="include"/> +<node CREATED="1244195223681" ID="Freemind_Link_234949444" MODIFIED="1244195226509" TEXT="lib"/> +<node CREATED="1244195227025" ID="Freemind_Link_1748375798" MODIFIED="1244195232312" TEXT="bin"/> +</node> +</node> +</node> +<node CREATED="1244197635639" ID="Freemind_Link_1051100294" MODIFIED="1244197639458" TEXT="kono"/> </node> </node> </map>
--- 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<end_y) { - int i; i=end_y; end_y=start_y; start_y = i; //y$B$NF~$lBX$((B + int i; i=end_y; end_y=start_y; start_y = i; //yの入れ替え k = 1; l = -1; } @@ -92,13 +92,13 @@ div_y = start_y - end_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) + \
--- 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);
--- 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 <stdio.h> #include <stdlib.h> #include <string.h> @@ -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;
--- 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 側で初期化 */ }
--- 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)
--- 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++];
--- 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 <kono@ie.u-ryukyu.ac.jp> - - add light (incomplete) - 2009-06-8 Shinji KONO <kono@ie.u-ryukyu.ac.jp> SchedTask/SchedTaskImpl の分離はあんまり意味がなかった。 @@ -24,7 +18,6 @@ post で、PPE task を渡せると良い。address は parameterとして送る ->>>>>>> other 2009-02-13 Wataru MIYAGUNI <gongo@cr.ie.u-ryukyu.ac.jp> * kernel/ppe/Random.cc (reset): fix
--- 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;
--- 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*
--- 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
--- 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 *~ \#*) + + +
--- 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;
--- 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_y<end_y) { - int i; i=end_y; end_y=start_y; start_y = i; //y$B$NF~$lBX$((B + int i; i=end_y; end_y=start_y; start_y = i; //yの入れ替え //Vertex *v; v = vMin; vMin = vMid; vMid = v; /* incli_x1 = vMin->x - 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;
--- 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);
--- 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_y<end_y) { - int i; i=end_y; end_y=start_y; start_y = i; //y$B$NF~$lBX$((B + int i; i=end_y; end_y=start_y; start_y = i; //yの入れ替え //Vertex *v; v = vMin; vMin = vMid; vMid = v; /* incli_x1 = vMin->x - 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;
--- 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 !");
--- 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__);
--- 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]
--- 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;
--- 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;
--- 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);
--- 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()
--- 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);
--- 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);
--- 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
--- 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 +
--- 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)
--- 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
--- 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" };
--- 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];
--- 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_y<end_y) { - int i; i=end_y; end_y=start_y; start_y = i; //y$B$NF~$lBX$((B + int i; i=end_y; end_y=start_y; start_y = i; //yの入れ替え //Vertex *v; v = vMin; vMin = vMid; vMid = v; /* incli_x1 = vMin->x - 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;
--- 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
--- 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 !");
--- 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);
--- 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);
--- 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 <stdlib.h> #include <string.h> #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);
--- 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 <stdlib.h> #include <string.h> #include <spu_intrinsics.h> @@ -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() 用
--- 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 <stdlib.h> #include <string.h> #include <spu_mfcio.h> @@ -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);
--- 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 <stdlib.h> #include <string.h> #include "Load_Texture.h" @@ -14,6 +17,7 @@ int LoadTexture::run(void *rbuf , void *wbuf) { + __debug_spe("LoadTexture\n"); /** * 現在 global_alloc() では new をサポートしてないので * コンストラクタ呼ぶために placement new してます。
--- 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 <string.h> #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);
--- 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 } /**
--- 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);
--- 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()
--- 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];
--- 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;
--- 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;
--- 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;
--- 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 <SDL.h> #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\