Mercurial > hg > Game > Cerium
view Renderer/Engine/task/AllocateSegment.cc @ 2069:26aa08c9a1de draft default tip
cuda example fix
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sun, 12 Feb 2017 10:04:55 +0900 |
parents | 24113f4fa9b5 |
children |
line wrap: on
line source
#include <stdlib.h> #include <string.h> #include "AllocateSegment.h" #include "task_texture.h" #include "Func.h" #include "Tapestry.h" #include "polygon_pack.h" #include "SpanPack.h" SchedDefineTask1(AllocateSegment, allocateSegment); /** * 各種 MemorySegment の用意はここでするのか? * いづれは、MemorySegment は大きく最初にガバっと領域を確保 * MemorySegment は可変な大きさになって、要求したサイズだけ、poolから領域を与える。。 * みたいな感じか。Cell以外のアーキテクチャではどうなんだろう。Segmentを管理ってのは必須なのか */ static int allocateSegment(SchedTask *smanager, void *rbuf , void *wbuf) { /* * 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 は計算可能なので配列をコピーする必要はない */ MemList *ml = smanager->createMemList(sizeof(uint32) * TEXTURE_BLOCK_SIZE, MAX_TILE); smanager->global_set(GLOBAL_TILE_LIST, (void *)ml); #ifdef USE_SEGMENT ml = smanager->createMemList(sizeof(PolygonPack), POLYGONPACK_SEGMENT_NUM); smanager->global_set(GLOBAL_POLYGONPACK_LIST, (void *)ml); ml = smanager->createMemList(sizeof(SpanPack), SPANPACK_SEGMENT_NUM); smanager->global_set(GLOBAL_SPANPACK_LIST, (void *)ml); #endif return 0; }