Mercurial > hg > Game > Cerium
comparison Renderer/Engine/task/CreateSpan.cc @ 1162:8917aff8629c draft
global allocate
author | Yutaka_Kinjyo |
---|---|
date | Thu, 05 May 2011 13:11:59 +0900 |
parents | cc1a50cac83d |
children | b417abf82193 |
comparison
equal
deleted
inserted
replaced
1161:cc1a50cac83d | 1162:8917aff8629c |
---|---|
1 // #define DEBUG | 1 // #define DEBUG |
2 #include "CreateSpan.h" | 2 #include "CreateSpan.h" |
3 #include "viewer_types.h" | 3 #include "viewer_types.h" |
4 #include "matrix_calc.h" | 4 #include "matrix_calc.h" |
5 #include "Tapestry.h" | 5 #include "Tapestry.h" |
6 #include "Func.h" | |
7 | |
6 | 8 |
7 // DMA channel | 9 // DMA channel |
8 static const int SPAN_PACK_LOAD = 5; | 10 static const int SPAN_PACK_LOAD = 5; |
9 static const int SPAN_PACK_STORE = 6; | 11 static const int SPAN_PACK_STORE = 6; |
10 static const int POLYGON_PACK_LOAD = 7; | 12 static const int POLYGON_PACK_LOAD = 7; |
287 tmp_spack = spack; | 289 tmp_spack = spack; |
288 spack = send_spack; | 290 spack = send_spack; |
289 send_spack = tmp_spack; | 291 send_spack = tmp_spack; |
290 | 292 |
291 /* | 293 /* |
292 smanager->wait_segment(spack); | 294 smanager->wait_segment(prev_ms); |
293 smanager->put_segment(spack); | 295 send_ms = smanager->put_segment(); |
294 SpanPackPtr spack = smanager->get_segment(addr, g->spanList); | 296 smanager->put_segment(cur_ms); |
295 smanager->wait_segment(spack); | 297 cur_ms = smanager->get_segment((memaddr)spackList[index], ml); |
298 smanager->wait_segment(cur_ms); | |
296 | 299 |
297 */ | 300 */ |
298 | 301 |
299 smanager->dma_wait(SPAN_PACK_STORE); | 302 smanager->dma_wait(SPAN_PACK_STORE); |
300 smanager->dma_store(send_spack, (memaddr)spackList[prev_index], | 303 smanager->dma_store(send_spack, (memaddr)spackList[prev_index], |
439 | 442 |
440 | 443 |
441 static int | 444 static int |
442 run(SchedTask *smanager, void *rbuf, void *wbuf) | 445 run(SchedTask *smanager, void *rbuf, void *wbuf) |
443 { | 446 { |
447 /* | |
448 | |
449 get_segmentを使うと、input buffer からの入力は要らなくなる | |
450 Task化するなら、get_segment は取り去る。 | |
451 途中でloadが入ってるのは DMA転送のサイズの限界と、SPEのLSの容量の少なさにある | |
452 必要なときに、必要な分だけ load するのは、自動的にやってほしいから、get_segment も | |
453 いづれは、Task の内部で処理されるものになるのかな。 | |
454 そうすると、Task の input , output のデータの大きさはスケーラブルになるのか。 | |
455 | |
456 */ | |
444 PolygonPack *pp = (PolygonPack*)smanager->get_input(rbuf, 0); | 457 PolygonPack *pp = (PolygonPack*)smanager->get_input(rbuf, 0); |
445 | 458 |
446 #ifdef USE_SEGMENT | 459 #ifdef USE_SEGMENT |
447 | 460 |
448 int stock_num = 2; //2つの領域を使い回すイメージで。最初、rbufのinputで受けてるけど、これどうなん? | 461 int stock_num = 2; //2つの領域を使い回すイメージで。最初、rbufのinputで受けてるけど、これどうなん? |
449 // global に取ったほうがいい? このListどうやって消してやろうか。 | 462 // global に取った。 このListどうやって消してやろうか。 |
450 MemList *ml = smanager->createMemList(sizeof(PolygonPack), stock_num); | 463 MemList *ml = (MemList*)smanager->global_get(GLOBAL_POLYGONPACK_LIST); |
451 MemorySegmentPtr ms; //Tileみたいに typedef したほうがいいのか。でもPolygonPackはすでに使われてるし。 | 464 MemorySegmentPtr ms; //Tileみたいに typedef したほうがいいのか。でもPolygonPackはすでに使われてるし。 |
452 | 465 |
453 PolygonPackPtr next_pp; | 466 PolygonPackPtr next_pp; |
454 | 467 |
455 #else | 468 #else |
584 sizeof(SpanPack), SPAN_PACK_STORE); | 597 sizeof(SpanPack), SPAN_PACK_STORE); |
585 smanager->dma_wait(SPAN_PACK_STORE); | 598 smanager->dma_wait(SPAN_PACK_STORE); |
586 | 599 |
587 #ifdef USE_SEGMENT | 600 #ifdef USE_SEGMENT |
588 | 601 |
589 // MemList に memory 解放の関数いれるべきかな | 602 // Global でSegmentとったので、いつか解放しないといかないなぁ。 |
590 // ml->free(); | |
591 | 603 |
592 #else | 604 #else |
593 | 605 |
594 free(free_pp); | 606 free(free_pp); |
595 | 607 |