Created
July 10, 2019 03:55
-
-
Save kei-y/516604110a7bcc998b82405c51812bde to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// | |
// $HeadURL: https://svnrepos.sandlot.jp/svn/repos/ToolAndLibraries/Libraries/LibXGL2/trunk/Library/xgl/gs/gs_DdsUtility.ps4.cpp $ | |
// $Id: gs_DdsUtility.ps4.cpp 9677 2019-03-07 11:17:02Z prg_y_horiuchi $ | |
// | |
//============================================================================== | |
//include | |
#include "stdafx.h" | |
#include <sgs/SGS_WARNING.h> | |
#include <sgs/db/db_Output.h> | |
#include <sgs/sgs_Warning.h> | |
#include "gs_Types.ps4.h" | |
#include "gs_DdsUtility.ps4.h" | |
namespace xgl | |
{ | |
namespace gs | |
{ | |
//============================================================================= | |
// ID作成 | |
uint32_t DdsSurfaceDesc2::_CreateID(uint8_t v0, uint8_t v1, uint8_t v2, uint8_t v3) const | |
{ | |
LayoutInfo::ByteID ret; | |
ret.elements[0] = v0, ret.elements[1] = v1, ret.elements[2] = v2, ret.elements[3] = v3; | |
return ret.id; | |
} | |
/// 種類 | |
bool DdsSurfaceDesc2::IsDx10() const { return (CF_DX10 == GetFourCCFormat()); } | |
//============================================================================= | |
//fourccの種類 | |
DdsSurfaceDesc2::FourCCFormat DdsSurfaceDesc2::GetFourCCFormat() const | |
{ | |
if (ddpf_pixel_format.dw_flags & DdsPixelFormat::PIXEL_FOURCC) | |
{ | |
return (DdsSurfaceDesc2::FourCCFormat)ddpf_pixel_format.dw_fourCC; | |
} | |
return CF_NONE; | |
} | |
//============================================================================= | |
//無圧縮フォーマットのピクセルレイアウトを取得 | |
DdsSurfaceDesc2::LayoutInfo DdsSurfaceDesc2::_GetLayout() const | |
{ | |
struct Element | |
{ | |
size_t color, offset, length; | |
Element(uint _color) | |
{ | |
color = _color; | |
offset = 0xFFFFFFFF; | |
length = 0; | |
} | |
}; | |
Element elements[4] = {Element(C_R), Element(C_G), Element(C_B), Element(C_A)}; | |
const uint32_t* p_color_masks[4] = {&ddpf_pixel_format.dw_r_bit_mask, | |
&ddpf_pixel_format.dw_g_bit_mask, | |
&ddpf_pixel_format.dw_b_bit_mask, | |
&ddpf_pixel_format.dw_rgb_alpha_bit_mask}; | |
//============================================================================= | |
//各色の情報が記述されているビット位置とそのビット列の長さを色ごとに調べる | |
for (int i = 0; i < 4; ++i) | |
{ | |
uint32_t bit_mask = 0x01; //調査ビット | |
size_t bit_cnt = 0; | |
while (bit_mask != 0) | |
{ | |
if ((*(p_color_masks[i]) & bit_mask) != 0) | |
{ | |
if (elements[i].offset == 0xFFFFFFFF) | |
elements[i].offset = bit_cnt; | |
++elements[i].length; | |
} | |
else if (elements[i].offset != 0xFFFFFFFF) | |
break; | |
++bit_cnt; | |
bit_mask <<= 1; //調査ビットをずらす | |
} | |
} | |
//============================================================================= | |
//オフセット昇順ソート | |
for (int i = 0; i < 4; ++i) | |
{ | |
for (int j = i + 1; j < 4; ++j) | |
{ | |
if (elements[j].offset < elements[i].offset) | |
{ | |
//交換 | |
Element tmp = elements[i]; | |
elements[i] = elements[j]; | |
elements[j] = tmp; | |
} | |
} | |
} | |
//============================================================================= | |
//ID作成 | |
//dw_rgb_bit_countに記載されているサイズより | |
//小さい場合があり、その場合はダミーデータが存在するのでdummy_bit_sizeを使い対応させている | |
LayoutInfo layout; | |
uint32_t dummy_bit_size = ddpf_pixel_format.dw_rgb_bit_count; | |
for (int i = 0; i < 4; ++i) | |
{ | |
if (elements[i].length != 0) | |
{ | |
layout.bit.elements[i] = elements[i].length; | |
layout.color.elements[i] = elements[i].color; | |
dummy_bit_size -= elements[i].length; | |
} | |
else | |
{ | |
layout.color.elements[i] = C_NONE; | |
layout.bit.elements[i] = dummy_bit_size; | |
dummy_bit_size = 0; | |
} | |
} | |
return layout; | |
} | |
//============================================================================= | |
// DDSファイルイメージ内の各情報ブロックへとアクセスするためのアドレスを取得する | |
bool DdsSurfaceDesc2::GetDdsAddrFromFileImage(const DdsSurfaceDesc2** pp_out_desc, | |
const void** pp_out_data, | |
const void* file_img, | |
size_t file_size) | |
{ | |
SGS_WARNING(pp_out_desc != NULL); | |
SGS_WARNING(pp_out_data != NULL); | |
SGS_WARNING(file_img != NULL); | |
//============================================================================= | |
//先頭のファイル識別を調べる | |
char ext_name[] = {'D', 'D', 'S', ' '}; | |
if (file_size < sizeof(uint32_t) || *(uint32_t*)file_img != *(uint32_t*)ext_name) | |
return false; | |
file_img = (uint32_t*)file_img + 1; | |
file_size -= sizeof(uint32_t); | |
//============================================================================= | |
//ヘッダ部のアドレスセット | |
if (file_size < sizeof(DdsSurfaceDesc2)) | |
return false; | |
*pp_out_desc = (DdsSurfaceDesc2*)file_img; | |
file_img = (DdsSurfaceDesc2*)file_img + 1; | |
file_size -= sizeof(DdsSurfaceDesc2); | |
//============================================================================= | |
//データ部のアドレスセット | |
*pp_out_data = file_img; | |
return true; | |
} | |
//============================================================================= | |
//DDSのフォーマットからGNMのデータフォーマットを取得する | |
const sce::Gnm::DataFormat* DdsSurfaceDesc2::GetGnmFormat() const | |
{ | |
const auto fourcc_type = GetFourCCFormat(); | |
const sce::Gnm::DataFormat* p_out = NULL; | |
//============================================================================== | |
//特殊フォーマット | |
if (CF_NONE != fourcc_type) | |
{ | |
// 対応しているのはDXT1~5まで | |
switch (fourcc_type) | |
{ | |
case CF_DXT1: | |
p_out = &sce::Gnm::kDataFormatBc1Unorm; | |
break; //DXT1 , BC1 , kDataFormatBc1Unorm , kDataFormatBc1UnormSrgb | |
case CF_DXT2: | |
p_out = &sce::Gnm::kDataFormatBc2Unorm; | |
break; //DXT2 , BC2 , kDataFormatBc2Unorm , kDataFormatBc2UnormSrgb | |
case CF_DXT3: | |
p_out = &sce::Gnm::kDataFormatBc2Unorm; | |
break; //DXT3 , BC2 , kDataFormatBc2Unorm , kDataFormatBc2UnormSrgb //Bc2で問題ない | |
case CF_DXT4: | |
p_out = &sce::Gnm::kDataFormatBc3Unorm; | |
break; //DXT4 , BC3 , kDataFormatBc3Unorm , kDataFormatBc3UnormSrgb | |
case CF_DXT5: | |
p_out = &sce::Gnm::kDataFormatBc3Unorm; | |
break; //DXT5 , BC3 . kDataFormatBc3Unorm , kDataFormatBc3UnormSrgb //Bc3で問題ない | |
case CF_R16F: | |
p_out = &sce::Gnm::kDataFormatR16Float; | |
break; | |
case CF_R32F: | |
p_out = &sce::Gnm::kDataFormatR32Float; | |
break; | |
case CF_BC5U: | |
p_out = &sce::Gnm::kDataFormatBc5Unorm; | |
break; | |
case CF_BC5S: | |
p_out = &sce::Gnm::kDataFormatBc5Snorm; | |
break; | |
case CF_BC4U: | |
p_out = &sce::Gnm::kDataFormatBc4Unorm; | |
break; | |
case CF_BC4S: | |
p_out = &sce::Gnm::kDataFormatBc4Snorm; | |
break; | |
case CF_DX10: | |
{ | |
// desc2ではdx10形式は解析しない | |
SGS_WARNING(false); | |
} | |
break; | |
default: | |
// 未対応で引っかかるようにしています。 | |
SGS_WARNING(false && "未対応のフォーマット"); | |
break; | |
} | |
} | |
//============================================================================== | |
//通常フォーマット | |
else | |
{ | |
DdsSurfaceDesc2::LayoutInfo layout = _GetLayout(); | |
//============================================================================== | |
//32bit 4色 | |
if (layout.bit.id == _CreateID(8, 8, 8, 8)) | |
{ | |
if (layout.color.id == _CreateID(C_B, C_G, C_R, C_A)) | |
p_out = &sce::Gnm::kDataFormatB8G8R8A8Unorm; | |
else if (layout.color.id == _CreateID(C_B, C_G, C_R, C_NONE)) | |
p_out = &sce::Gnm::kDataFormatB8G8R8X8Unorm; | |
else if (layout.color.id == _CreateID(C_R, C_G, C_B, C_A)) | |
p_out = &sce::Gnm::kDataFormatR8G8B8A8Unorm; | |
} | |
//============================================================================== | |
//16bit 4色 | |
else if (layout.bit.id == _CreateID(4, 4, 4, 4)) | |
{ | |
if (layout.color.id == _CreateID(C_B, C_G, C_R, C_A)) | |
p_out = &sce::Gnm::kDataFormatB4G4R4A4Unorm; | |
else if (layout.color.id == _CreateID(C_R, C_G, C_B, C_A)) | |
p_out = &sce::Gnm::kDataFormatR4G4B4A4Unorm; | |
} | |
//============================================================================== | |
//8bit 1色 | |
else if (layout.bit.id == _CreateID(8, 0, 0, 0)) | |
{ | |
if (layout.color.id == _CreateID(C_R, C_NONE, C_NONE, C_NONE)) | |
p_out = &sce::Gnm::kDataFormatL8Unorm; | |
else if (layout.color.id == _CreateID(C_A, C_NONE, C_NONE, C_NONE)) | |
p_out = &sce::Gnm::kDataFormatA8Unorm; | |
} | |
} | |
return p_out; | |
} | |
//============================================================================= | |
// 格納されているテクスチャの種類を取得 | |
DdsSurfaceDesc2::TextureType DdsSurfaceDesc2::GetTextureType() const | |
{ | |
const uint32_t CUBEMAP_FLAG = (DdsCaps2::CAPS2_CUBEMAP | DdsCaps2::CAPS2_CUBE_SURFACE_ALL); | |
if ((dds_caps.dw_caps2 & CUBEMAP_FLAG) == CUBEMAP_FLAG) | |
return TEXTURE_CUBE; //キューブマップフラグがあり6面有るならキューブテクスチャ | |
else if ((dds_caps.dw_caps2 & DdsCaps2::CAPS2_VOLUME) != 0) | |
return TEXTURE_VOLUME; //ボリュームテクスチャフラグがある | |
return TEXTURE_NORMAL; | |
} | |
//============================================================================= | |
//深度 | |
uint32_t DdsSurfaceDesc2::GetDepth() const { return ((dw_flags & DDS_DEPTH) != 0) ? dw_depth : 1; } | |
//============================================================================= | |
//ミップマップレベル | |
uint32_t DdsSurfaceDesc2::GetMipMapLevel() const | |
{ | |
return ((dw_flags & DDS_MIPMAP_COUNT) != 0) ? dw_mip_map_count : 1; | |
} | |
//============================================================================= | |
//テクスチャ数(ボリュームテクスチャは3Dの画像が一枚有ると判断しての値) | |
uint32_t DdsSurfaceDesc2::GetTextureNum() const | |
{ | |
size_t size; | |
switch (GetTextureType()) | |
{ | |
case TEXTURE_NORMAL: | |
size = 1; | |
break; | |
case TEXTURE_CUBE: | |
size = 6; | |
break; | |
case TEXTURE_VOLUME: | |
size = 1; | |
break; | |
default: | |
size = 0; | |
} | |
SGS_WARNING(size > 0); | |
return size; | |
} | |
//============================================================================= | |
// テクスチャスライス数 | |
uint32_t DdsSurfaceDesc2::GetTextureSliceNum() const | |
{ | |
return 1; //テクスチャのスライス数はDDSでは1だけのはず | |
} | |
//============================================================================= | |
// デバッグ用にDDSファイルのヘッダ部を出力する | |
void DdsSurfaceDesc2::DebugDdsHeaderPrint() | |
{ | |
PF("Print DDSHeader\n"); | |
PF("%d,x%0.8x,%d,%d,%d,%d,%d", | |
dw_size, | |
dw_flags, | |
dw_height, | |
dw_width, | |
dw_pitch_or_linear_size, | |
dw_depth, | |
dw_mip_map_count); | |
uint32_t comp_chars[4] = {(ddpf_pixel_format.dw_fourCC & 0x000000ff), | |
(ddpf_pixel_format.dw_fourCC & 0x0000ff00) >> 8, | |
(ddpf_pixel_format.dw_fourCC & 0x00ff0000) >> 16, | |
(ddpf_pixel_format.dw_fourCC & 0xff000000) >> 24}; | |
PF("pixel,%d,x%0.8x,x%0.8x,%c,%c,%c,%c,%d,x%0.8x,x%0.8x,x%0.8x,x%0.8x", | |
ddpf_pixel_format.dw_size, | |
ddpf_pixel_format.dw_flags, | |
ddpf_pixel_format.dw_fourCC, | |
(comp_chars[0] != '\0') ? comp_chars[0] : '-', | |
(comp_chars[1] != '\0') ? comp_chars[1] : '-', | |
(comp_chars[2] != '\0') ? comp_chars[2] : '-', | |
(comp_chars[3] != '\0') ? comp_chars[3] : '-', | |
ddpf_pixel_format.dw_rgb_bit_count, | |
ddpf_pixel_format.dw_r_bit_mask, | |
ddpf_pixel_format.dw_g_bit_mask, | |
ddpf_pixel_format.dw_b_bit_mask, | |
ddpf_pixel_format.dw_rgb_alpha_bit_mask); | |
PF("caps,x%0.8x,x%0.8x\n", dds_caps.dw_caps1, dds_caps.dw_caps2); | |
} | |
DDSImage::DDSImage() | |
{ | |
m_desc = NULL; | |
m_dxt10 = NULL; | |
} | |
/// ファイルイメージから初期化 | |
bool DDSImage::Initialize(const std::wstring& path, const void* fileimage, size_t size) | |
{ | |
//============================================================================== | |
//DDSフォーマットチェック | |
//const DdsSurfaceDesc2* p_header = NULL; | |
//const uint8_t* p_src_texture_top = NULL; | |
bool result = | |
DdsSurfaceDesc2::GetDdsAddrFromFileImage(&m_desc, (const void**)&m_image_base, fileimage, size); | |
if (!result) | |
{ | |
return false; | |
} | |
if (m_desc->IsDx10()) | |
{ | |
m_dxt10 = (DDS_HEADER_DXT10*)m_image_base; | |
m_image_base += sizeof(DDS_HEADER_DXT10); | |
} | |
return result; | |
} | |
static const sce::Gnm::DataFormat* GetFormat(dds::DXGI_FORMAT fmt); | |
//============================================================================= | |
/// DDSのフォーマットからGNMのデータフォーマットを取得する | |
/// | |
/// @retval return!=NULL フォーマット定義構造体のポインタ | |
/// @retval return==NULL XGLのマッチ処理が未対応、または一致するフォーマットがGNM側に存在しない | |
const sce::Gnm::DataFormat* DDSImage::GetGnmFormat() const | |
{ | |
if (m_dxt10) | |
{ | |
return GetFormat(m_dxt10->dxgiFormat); | |
} | |
return m_desc->GetGnmFormat(); | |
} | |
/// 格納されているテクスチャの種類を取得 | |
DdsSurfaceDesc2::TextureType DDSImage::GetTextureType() const { return m_desc->GetTextureType(); } | |
/// 幅 | |
uint32_t DDSImage::GetWidth() const { return m_desc->GetWidth(); } | |
/// 高さ | |
uint32_t DDSImage::GetHeight() const { return m_desc->GetHeight(); } | |
/// 深度 | |
uint32_t DDSImage::GetDepth() const { return m_desc->GetDepth(); } | |
/// ミップマップレベル | |
uint32_t DDSImage::GetMipMapLevel() const { return m_desc->GetMipMapLevel(); } | |
/// テクスチャ数(ボリュームテクスチャは3Dの画像が一枚有ると判断しての値) | |
uint32_t DDSImage::GetTextureNum() const | |
{ | |
if (m_dxt10) | |
{ | |
return m_desc->GetTextureNum() * m_dxt10->arraySize; | |
} | |
return m_desc->GetTextureNum(); | |
} | |
/// テクスチャ数(ボリュームテクスチャは3Dの画像が一枚有ると判断しての値) | |
uint32_t DDSImage::GetTextureSliceNum() const | |
{ | |
if (m_dxt10) | |
{ | |
return m_dxt10->arraySize; | |
} | |
return 0; | |
} | |
static const sce::Gnm::DataFormat* GetFormat(dds::DXGI_FORMAT fmt) | |
{ | |
switch (fmt) | |
{ | |
case dds::DXGI_FORMAT_UNKNOWN: | |
return NULL; | |
case dds::DXGI_FORMAT_R32G32B32A32_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R32G32B32A32_FLOAT: | |
return &sce::Gnm::kDataFormatR32G32B32A32Float; | |
case dds::DXGI_FORMAT_R32G32B32A32_UINT: | |
return &sce::Gnm::kDataFormatR32G32B32A32Uint; | |
case dds::DXGI_FORMAT_R32G32B32A32_SINT: | |
return &sce::Gnm::kDataFormatR32G32B32A32Sint; | |
case dds::DXGI_FORMAT_R32G32B32_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R32G32B32_FLOAT: | |
return &sce::Gnm::kDataFormatR32G32B32Float; | |
case dds::DXGI_FORMAT_R32G32B32_UINT: | |
return &sce::Gnm::kDataFormatR32G32B32Uint; | |
case dds::DXGI_FORMAT_R32G32B32_SINT: | |
return &sce::Gnm::kDataFormatR32G32B32Sint; | |
case dds::DXGI_FORMAT_R16G16B16A16_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R16G16B16A16_FLOAT: | |
return &sce::Gnm::kDataFormatR16G16B16A16Float; | |
case dds::DXGI_FORMAT_R16G16B16A16_UNORM: | |
return &sce::Gnm::kDataFormatR16G16B16A16Unorm; | |
case dds::DXGI_FORMAT_R16G16B16A16_UINT: | |
return &sce::Gnm::kDataFormatR16G16B16A16Uint; | |
case dds::DXGI_FORMAT_R16G16B16A16_SNORM: | |
return &sce::Gnm::kDataFormatR16G16B16A16Snorm; | |
case dds::DXGI_FORMAT_R16G16B16A16_SINT: | |
return &sce::Gnm::kDataFormatR16G16B16A16Sint; | |
case dds::DXGI_FORMAT_R32G32_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R32G32_FLOAT: | |
return &sce::Gnm::kDataFormatR32G32Float; | |
case dds::DXGI_FORMAT_R32G32_UINT: | |
return &sce::Gnm::kDataFormatR32G32Uint; | |
case dds::DXGI_FORMAT_R32G32_SINT: | |
return &sce::Gnm::kDataFormatR32G32Sint; | |
case dds::DXGI_FORMAT_R32G8X24_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_D32_FLOAT_S8X24_UINT: | |
return NULL; | |
case dds::DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_X32_TYPELESS_G8X24_UINT: | |
return NULL; | |
case dds::DXGI_FORMAT_R10G10B10A2_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R10G10B10A2_UNORM: | |
return &sce::Gnm::kDataFormatR10G10B10A2Unorm; | |
case dds::DXGI_FORMAT_R10G10B10A2_UINT: | |
return &sce::Gnm::kDataFormatR10G10B10A2Uint; | |
case dds::DXGI_FORMAT_R11G11B10_FLOAT: | |
return &sce::Gnm::kDataFormatR11G11B10Float; | |
case dds::DXGI_FORMAT_R8G8B8A8_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R8G8B8A8_UNORM: | |
return &sce::Gnm::kDataFormatR8G8B8A8Unorm; | |
case dds::DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatR8G8B8A8UnormSrgb; | |
case dds::DXGI_FORMAT_R8G8B8A8_UINT: | |
return &sce::Gnm::kDataFormatR8G8B8A8Uint; | |
case dds::DXGI_FORMAT_R8G8B8A8_SNORM: | |
return &sce::Gnm::kDataFormatR8G8B8A8Snorm; | |
case dds::DXGI_FORMAT_R8G8B8A8_SINT: | |
return &sce::Gnm::kDataFormatR8G8B8A8Sint; | |
case dds::DXGI_FORMAT_R16G16_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R16G16_FLOAT: | |
return &sce::Gnm::kDataFormatR16G16Float; | |
case dds::DXGI_FORMAT_R16G16_UNORM: | |
return &sce::Gnm::kDataFormatR16G16Unorm; | |
case dds::DXGI_FORMAT_R16G16_UINT: | |
return &sce::Gnm::kDataFormatR16G16Uint; | |
case dds::DXGI_FORMAT_R16G16_SNORM: | |
return &sce::Gnm::kDataFormatR16G16Snorm; | |
case dds::DXGI_FORMAT_R16G16_SINT: | |
return &sce::Gnm::kDataFormatR16G16Sint; | |
case dds::DXGI_FORMAT_R32_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_D32_FLOAT: | |
return NULL; | |
case dds::DXGI_FORMAT_R32_FLOAT: | |
return &sce::Gnm::kDataFormatR32Float; | |
case dds::DXGI_FORMAT_R32_UINT: | |
return &sce::Gnm::kDataFormatR32Uint; | |
case dds::DXGI_FORMAT_R32_SINT: | |
return &sce::Gnm::kDataFormatR32Sint; | |
case dds::DXGI_FORMAT_R24G8_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_D24_UNORM_S8_UINT: | |
return NULL; | |
case dds::DXGI_FORMAT_R24_UNORM_X8_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_X24_TYPELESS_G8_UINT: | |
return NULL; | |
case dds::DXGI_FORMAT_R8G8_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R8G8_UNORM: | |
return &sce::Gnm::kDataFormatR8G8Unorm; | |
case dds::DXGI_FORMAT_R8G8_UINT: | |
return &sce::Gnm::kDataFormatR8G8Uint; | |
case dds::DXGI_FORMAT_R8G8_SNORM: | |
return &sce::Gnm::kDataFormatR8G8Snorm; | |
case dds::DXGI_FORMAT_R8G8_SINT: | |
return &sce::Gnm::kDataFormatR8G8Sint; | |
case dds::DXGI_FORMAT_R16_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R16_FLOAT: | |
return &sce::Gnm::kDataFormatR16Float; | |
case dds::DXGI_FORMAT_D16_UNORM: | |
return NULL; | |
case dds::DXGI_FORMAT_R16_UNORM: | |
return &sce::Gnm::kDataFormatR16Unorm; | |
case dds::DXGI_FORMAT_R16_UINT: | |
return &sce::Gnm::kDataFormatR16Uint; | |
case dds::DXGI_FORMAT_R16_SNORM: | |
return &sce::Gnm::kDataFormatR16Snorm; | |
case dds::DXGI_FORMAT_R16_SINT: | |
return &sce::Gnm::kDataFormatR16Sint; | |
case dds::DXGI_FORMAT_R8_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_R8_UNORM: | |
return &sce::Gnm::kDataFormatR8Unorm; | |
case dds::DXGI_FORMAT_R8_UINT: | |
return &sce::Gnm::kDataFormatR8Uint; | |
case dds::DXGI_FORMAT_R8_SNORM: | |
return &sce::Gnm::kDataFormatR8Snorm; | |
case dds::DXGI_FORMAT_R8_SINT: | |
return &sce::Gnm::kDataFormatR8Uint; | |
case dds::DXGI_FORMAT_A8_UNORM: | |
return &sce::Gnm::kDataFormatA8Unorm; | |
case dds::DXGI_FORMAT_R1_UNORM: | |
return NULL; | |
case dds::DXGI_FORMAT_R9G9B9E5_SHAREDEXP: | |
return NULL; | |
case dds::DXGI_FORMAT_R8G8_B8G8_UNORM: | |
return NULL; | |
case dds::DXGI_FORMAT_G8R8_G8B8_UNORM: | |
return NULL; | |
case dds::DXGI_FORMAT_BC1_TYPELESS: | |
return NULL; | |
case dds::DXGI_FORMAT_BC1_UNORM: | |
return &sce::Gnm::kDataFormatBc1Unorm; | |
case dds::DXGI_FORMAT_BC1_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatBc1UnormSrgb; | |
case dds::DXGI_FORMAT_BC2_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_BC2_UNORM: | |
return &sce::Gnm::kDataFormatBc2Unorm; | |
case dds::DXGI_FORMAT_BC2_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatBc2UnormSrgb; | |
case dds::DXGI_FORMAT_BC3_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_BC3_UNORM: | |
return &sce::Gnm::kDataFormatBc3Unorm; | |
case dds::DXGI_FORMAT_BC3_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatBc3UnormSrgb; | |
case dds::DXGI_FORMAT_BC4_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_BC4_UNORM: | |
return &sce::Gnm::kDataFormatBc4Unorm; | |
case dds::DXGI_FORMAT_BC4_SNORM: | |
return &sce::Gnm::kDataFormatBc4Snorm; | |
case dds::DXGI_FORMAT_BC5_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_BC5_UNORM: | |
return &sce::Gnm::kDataFormatBc5Unorm; | |
case dds::DXGI_FORMAT_BC5_SNORM: | |
return &sce::Gnm::kDataFormatBc5Snorm; | |
case dds::DXGI_FORMAT_B5G6R5_UNORM: | |
return &sce::Gnm::kDataFormatB5G6R5Unorm; | |
case dds::DXGI_FORMAT_B5G5R5A1_UNORM: | |
return &sce::Gnm::kDataFormatB5G5R5A1Unorm; | |
case dds::DXGI_FORMAT_B8G8R8A8_UNORM: | |
return &sce::Gnm::kDataFormatB8G8R8A8Unorm; | |
case dds::DXGI_FORMAT_B8G8R8X8_UNORM: | |
return &sce::Gnm::kDataFormatB8G8R8X8Unorm; | |
case dds::DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM: | |
return 0; | |
case dds::DXGI_FORMAT_B8G8R8A8_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatB8G8R8A8UnormSrgb; | |
case dds::DXGI_FORMAT_B8G8R8X8_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatB8G8R8X8UnormSrgb; | |
case dds::DXGI_FORMAT_BC6H_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_BC6H_UF16: | |
return &sce::Gnm::kDataFormatBc6Uf16; | |
case dds::DXGI_FORMAT_BC6H_SF16: | |
return &sce::Gnm::kDataFormatBc6Sf16; | |
case dds::DXGI_FORMAT_BC7_TYPELESS: | |
return 0; | |
case dds::DXGI_FORMAT_BC7_UNORM: | |
return &sce::Gnm::kDataFormatBc7Unorm; | |
case dds::DXGI_FORMAT_BC7_UNORM_SRGB: | |
return &sce::Gnm::kDataFormatBc7UnormSrgb; | |
case dds::DXGI_FORMAT_AYUV: | |
case dds::DXGI_FORMAT_Y410: | |
case dds::DXGI_FORMAT_Y416: | |
case dds::DXGI_FORMAT_NV12: | |
case dds::DXGI_FORMAT_P010: | |
case dds::DXGI_FORMAT_P016: | |
case dds::DXGI_FORMAT_420_OPAQUE: | |
case dds::DXGI_FORMAT_YUY2: | |
case dds::DXGI_FORMAT_Y210: | |
case dds::DXGI_FORMAT_Y216: | |
case dds::DXGI_FORMAT_NV11: | |
return 0; | |
case dds::DXGI_FORMAT_AI44: | |
case dds::DXGI_FORMAT_IA44: | |
case dds::DXGI_FORMAT_P8: | |
case dds::DXGI_FORMAT_A8P8: | |
return 0; | |
case dds::DXGI_FORMAT_B4G4R4A4_UNORM: | |
return &sce::Gnm::kDataFormatB4G4R4A4Unorm; | |
case dds::DXGI_FORMAT_FORCE_UINT: | |
break; | |
} | |
return NULL; | |
} | |
} // namespace gs | |
} // namespace xgl |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment