Mercurial > hg > Game > Cerium
changeset 1420:e8debff40a3d draft
comment
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 20 Feb 2012 03:11:41 +0900 |
parents | 2bf847d6202d |
children | 3778a1eda68d |
files | Renderer/Engine/ChangeLog Renderer/Engine/task/AllocateSegment.cc TaskManager/kernel/schedule/Scheduler.cc example/many_task/Makefile.def example/word_count/Makefile.def |
diffstat | 5 files changed, 38 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/Renderer/Engine/ChangeLog Mon Feb 20 01:58:44 2012 +0900 +++ b/Renderer/Engine/ChangeLog Mon Feb 20 03:11:41 2012 +0900 @@ -1,3 +1,28 @@ +2012-2-18 Shinji Kono <kono@ie.u-ryukyu.ac.jp> + + No copy mode で動くように直しました。 + + GLOBAL_TILE_LIST 16384 TEXTURE_BLOCK_SIZE が 8*8 で 256, MAX_TILE 64 + PolygonPack size 34848 sizeof(PolygonPack) 17424, POLYGONPACK_SEGMENT_NUM 2 (でかすぎる) + SpanPack size 20704 sizeof(SpanPack) 5176, SPANPACK_SEGMENT_NUM 4 + spackList 1024 512*2 + + 明らかに Polygon Pack が食い過ぎ 256k しかメモリがないのに。 全部で32k or 64k に抑える。 + MAX_SIZE_TRIANGLE 128 を減らせば良い + Texture とは共有させる + spackList は計算可能なので配列をコピーする必要はない + + そもそもでかいものに get_segment を使わない。Span (80) あるいは、TrianglePack (136) 数個単位にする。 + TrianglePack は 128 にしたのに。 + 直後にwaitしないで、交互に書き出し読み出しを行う。(pipeline) + + get_segement のhashが切ってあり、毎回、load してるので意味がない。 + write back する。dirty flag を付けて、write で flush する。 + + DrawSpan のtextureの次のものを早めに読んでおく。 + + texture が壊れるバグが残っているようだ。 + 2012-2-18 Shinji Kono <kono@ie.u-ryukyu.ac.jp> SceneGraphRoot の light ってなんだよ?
--- a/Renderer/Engine/task/AllocateSegment.cc Mon Feb 20 01:58:44 2012 +0900 +++ b/Renderer/Engine/task/AllocateSegment.cc Mon Feb 20 03:11:41 2012 +0900 @@ -21,14 +21,15 @@ { /* - * texture tile size 32768 - * PolygonPack size 14384 - * SpanPack size 3888 + * GLOBAL_TILE_LIST 16384 TEXTURE_BLOCK_SIZE が 8*8 で 256, MAX_TILE 64 + * PolygonPack size 34848 sizeof(PolygonPack) 17424, POLYGONPACK_SEGMENT_NUM 2 (でかすぎる) + * SpanPack size 20704 sizeof(SpanPack) 5176, SPANPACK_SEGMENT_NUM 4 + * spackList 1024 512*2 * - * texture tile の size 内でやりくりすれば、問題なく動くのだが、、 - * 32768 - (14384 * 2) - (3888 * 2) = -3776 、でマイナス。 - * MAX_TILE を 128 から 64 に落としたら動いた - * texture をキャッシュしないなら MAX_TILE は 2 でいい。2つのSegmentを使って、double buffering する感じ。 + * 明らかに Polygon Pack が食い過ぎ 256k しかメモリがないのに。 全部で32k or 64k に抑える。 + * MAX_SIZE_TRIANGLE 128 を減らせば良い + * Texture とは共有させる + * spackList は計算可能なので配列をコピーする必要はない */ MemList *ml = smanager->createMemList(sizeof(uint32) * TEXTURE_BLOCK_SIZE, MAX_TILE);
--- a/TaskManager/kernel/schedule/Scheduler.cc Mon Feb 20 01:58:44 2012 +0900 +++ b/TaskManager/kernel/schedule/Scheduler.cc Mon Feb 20 03:11:41 2012 +0900 @@ -346,6 +346,7 @@ //addr が空だった場合はどうなるか //こうすると単純にFIFOか + // そうじゃなくて、単にbufferを余計に取って毎回DMAしているだけだよね。 MemorySegment *s = m->getLast(); m->moveToFirst(s); @@ -480,8 +481,6 @@ void Scheduler::wait_segment(MemorySegment *s) { - // えーと、dma してない時には、skip しないとだめなんじゃないの? - if (s == NULL) return; if (s->tag) connector->dma_wait(s->tag); s->tag = 0;
--- a/example/many_task/Makefile.def Mon Feb 20 01:58:44 2012 +0900 +++ b/example/many_task/Makefile.def Mon Feb 20 03:11:41 2012 +0900 @@ -6,9 +6,9 @@ CERIUM = ../../../Cerium -# OPT = -O9 +OPT = -O9 # OPT = -g -O9 -OPT = -g +# OPT = -g CC = g++ CFLAGS = -DUSE_SIMPLE_TASK -Wall $(OPT) # CFLAGS = -Wall $(OPT)