view Renderer/Engine/task/AllocateSegment.cc @ 2041:363b7c401c79 draft

Make Rendefing Engine
author Shin,ichi Uehara
date Mon, 23 Mar 2015 17:47:12 +0900
parents e8debff40a3d
children 24113f4fa9b5
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*/16384, (void *)ml);

#ifdef USE_SEGMENT

    ml = smanager->createMemList(sizeof(PolygonPack), POLYGONPACK_SEGMENT_NUM);
    smanager->global_set(/*GLOBAL_POLYGONPACK_LIST*/34848, (void *)ml);

    ml = smanager->createMemList(sizeof(SpanPack), SPANPACK_SEGMENT_NUM);
    smanager->global_set(/*GLOBAL_SPANPACK_LIST*/20704, (void *)ml);

#endif

    return 0;
}