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