view Renderer/Engine/task/AllocateSegment.cc @ 1420:e8debff40a3d draft

comment
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 20 Feb 2012 03:11:41 +0900
parents f308a6bd5479
children 363b7c401c79
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"

SchedDefineTask(AllocateSegment);

/**
 * 各種 MemorySegment の用意はここでするのか?
 * いづれは、MemorySegment は大きく最初にガバっと領域を確保
 * MemorySegment は可変な大きさになって、要求したサイズだけ、poolから領域を与える。。
 * みたいな感じか。Cell以外のアーキテクチャではどうなんだろう。Segmentを管理ってのは必須なのか
 */

static int
run(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;
}