Surface Descriptor

サーフェス・ディスクリプタ

サーフェス・ディスクリプタ構造体は、下記のようなメンバを持ちます。

typedef struct tagKMSURFACEDESC
{
  KMDWORD SurfaceType;
  KMDWORD BitDepth;
  KMDWORD PixelFormat;
  union{
    KMDWORD USize;
    KMDWORD Width;
  } u0;
  union{
    KMDWORD VSize;
    KMDWORD Height;
  } u1;
  union {
    KMDWORD dwTextureSize;
    KMDWORD dwFrameBufferSize;
  } uSize;
  KMDWORD fSurfaceFlags;
  PKMDWORD pSurface;
  PKMDWORD pVirtual;
  PKMDWORD pPhysical;
} KMSURFACEDESC, *PKMSURFACEDESC, **PPKMSURFACEDESC;

各メンバの詳細は下記の通りです。

typedef struct tagKMSURFACEDESC
{

KMDWORD SurfaceType;
  サーフェスのタイプを示します。 以下のいずれかが格納されます。

  SurfaceType | 意味
  --- | ---
  KM_SURFACETYPE_FRAMEBUFFER | フレームバッファ
  KM_SURFACETYPE_TEXTURE | テクスチャ
  KM_SURFACETYPE_SMALLVQ_TEXTURE | SmallVQテクスチャ

  注：このメンバの上位１６ビットは、Ninjaのために予約されています。

KMDWORD BitDepth;
  何ビット/pixelかを示します。 以下のいずれかが格納されます。

  BitDepth | 意味
  --- | ---
  KM_BITDEPTH_16 | 1pixel = 16bit
  KM_BITDEPTH_24 | 1pixel = 24bit
  KM_BITDEPTH_32 | 1pixel = 32bit

KMDWORD PixelFormat;
  ピクセルフォーマットを示します。 以下のいずれかが格納されます。
  フレームバッファの場合

  PixelFormat | 意味
  --- | ---
  KM_DSPBPP_RGB565 | RGB-565形式
  KM_DSPBPP_RGB555 | RGB-555形式
  KM_DSPBPP_ARGB1555 | ARGB-1555形式
  KM_DSPBPP_RGB888 | RGB-888形式
  KM_DSPBPP_ARGB8888 | ARGB-8888形式

  テクスチャの場合

  PixelFormat | 意味
  --- | ---
  KM_PIXELFORMAT_ARGB1555 | ARGB-1555形式
  KM_PIXELFORMAT_RGB565 | RGB-565形式
  KM_PIXELFORMAT_ARGB4444 | ARGB-4444形式
  KM_PIXELFORMAT_YUV422 | YUV-422形式
  KM_PIXELFORMAT_BUMP | バンプマップ
  KM_PIXELFORMAT_PALETTIZED_4BPP | 4bppパレット形式
  KM_PIXELFORMAT_PALETTIZED_8BPP | 8bppパレット形式

union{
  KMDWORD USize;
    テクスチャの場合の横方向のサイズです。 以下のいずれかが格納されます。

    USize | 意味
    --- | ---
    KM_MAPSIZE_8 | 横サイズ８ピクセル
    KM_MAPSIZE_16 | 横サイズ１６ピクセル
    KM_MAPSIZE_32 | 横サイズ３２ピクセル
    KM_MAPSIZE_64 | 横サイズ６４ピクセル
    KM_MAPSIZE_128 | 横サイズ１２８ピクセル
    KM_MAPSIZE_256 | 横サイズ２５６ピクセル
    KM_MAPSIZE_512 | 横サイズ５１２ピクセル
    KM_MAPSIZE_1024 | 横サイズ１０２４ピクセル

  KMDWORD Width;
    フレームバッファの場合の横方向のサイズです。

} u0;
union{
  KMDWORD VSize;
    テクスチャの場合の縦方向のサイズです。 以下のいずれかが格納されます。

    VSize | 意味
    --- | ---
    KM_MAPSIZE_8 | 縦サイズ８ピクセル
    KM_MAPSIZE_16 | 縦サイズ１６ピクセル
    KM_MAPSIZE_32 | 縦サイズ３２ピクセル
    KM_MAPSIZE_64 | 縦サイズ６４ピクセル
    KM_MAPSIZE_128 | 縦サイズ１２８ピクセル
    KM_MAPSIZE_256 | 縦サイズ２５６ピクセル
    KM_MAPSIZE_512 | 縦サイズ５１２ピクセル
    KM_MAPSIZE_1024 | 縦サイズ１０２４ピクセル

  KMDWORD Height;
    フレームバッファの場合の縦方向のサイズです。

} u1;
union {
  KMDWORD dwTextureSize;
    テクスチャ領域のサイズ(byte)です。
  KMDWORD dwFrameBufferSize;
    フレームバッファ領域のサイズ(byte)です。

} uSize;

KMDWORD fSurfaceFlags;
  サーフェスの属性を示すフラグです。 以下の値が格納されます。
  フレームバッファの場合

  bit 0 | 0... フル画面バッファ 1... StripBuffer使用

  テクスチャの場合

  bit 0 | 0... Non MipMap 1... MipMapped
  bit 1 | don't care
  bit 2 | 0... Rectangle 1... Twiddled
  bit 3 | 0... NonVQ 1... VQed Texture
  bit 4 | 0... NonStride 1... Stride Select
  bit 5 | 0... Non Palettized 1... Palettized

  テクスチャの場合、以下のフラグの論理和がセットされます。

  fSurfaceFlags | 意味
  --- | ---
  KM_SURFACEFLAGS_MIPMAPED | ミップマップを持つことを示します
  KM_SURFACEFLAGS_TWIDDLED | TWIDDLED形式であることを示します
  KM_SURFACEFLAGS_VQ | VQ / SmallVQ 圧縮形式を示します
  KM_SURFACEFLAGS_STRIDE | ストライド指定ありを示します
  KM_SURFACEFLAGS_PALETTIZED | パレッタイズドテクスチャを示します

PKMDWORD pSurface;
  サーフェースインスタンスへのポインタです。
PKMDWORD pVirtual;
  Texture instance ( Virtual address on SH4 )
PKMDWORD pPhysical;
  Texture instance ( physical address on SH4 )

} KMSURFACEDESC, *PKMSURFACEDESC, **PPKMSURFACEDESC;

Surface Descriptor