// // Copyright 2020 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // d3d_format: Describes a D3D9 format. Used by the D3D9 and GL back-ends. #include "libANGLE/renderer/d3d_format.h" using namespace angle; namespace rx { namespace d3d9 { namespace { constexpr D3DFORMAT D3DFMT_INTZ = ((D3DFORMAT)(MAKEFOURCC('I', 'N', 'T', 'Z'))); constexpr D3DFORMAT D3DFMT_NULL = ((D3DFORMAT)(MAKEFOURCC('N', 'U', 'L', 'L'))); } // anonymous namespace D3DFormat::D3DFormat() : pixelBytes(0), blockWidth(0), blockHeight(0), redBits(0), greenBits(0), blueBits(0), alphaBits(0), luminanceBits(0), depthBits(0), stencilBits(0), formatID(angle::FormatID::NONE) {} D3DFormat::D3DFormat(GLuint bits, GLuint blockWidth, GLuint blockHeight, GLuint redBits, GLuint greenBits, GLuint blueBits, GLuint alphaBits, GLuint lumBits, GLuint depthBits, GLuint stencilBits, FormatID formatID) : pixelBytes(bits / 8), blockWidth(blockWidth), blockHeight(blockHeight), redBits(redBits), greenBits(greenBits), blueBits(blueBits), alphaBits(alphaBits), luminanceBits(lumBits), depthBits(depthBits), stencilBits(stencilBits), formatID(formatID) {} const D3DFormat &GetD3DFormatInfo(D3DFORMAT format) { if (format == D3DFMT_NULL) { static const D3DFormat info(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FormatID::NONE); return info; } if (format == D3DFMT_INTZ) { static const D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 24, 8, FormatID::D24_UNORM_S8_UINT); return info; } switch (format) { case D3DFMT_UNKNOWN: { static const D3DFormat info(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, FormatID::NONE); return info; } case D3DFMT_L8: { static const D3DFormat info(8, 1, 1, 0, 0, 0, 0, 8, 0, 0, FormatID::L8_UNORM); return info; } case D3DFMT_A8: { static const D3DFormat info(8, 1, 1, 0, 0, 0, 8, 0, 0, 0, FormatID::A8_UNORM); return info; } case D3DFMT_A8L8: { static const D3DFormat info(16, 1, 1, 0, 0, 0, 8, 8, 0, 0, FormatID::L8A8_UNORM); return info; } case D3DFMT_A4R4G4B4: { static const D3DFormat info(16, 1, 1, 4, 4, 4, 4, 0, 0, 0, FormatID::B4G4R4A4_UNORM); return info; } case D3DFMT_A1R5G5B5: { static const D3DFormat info(16, 1, 1, 5, 5, 5, 1, 0, 0, 0, FormatID::B5G5R5A1_UNORM); return info; } case D3DFMT_R5G6B5: { static const D3DFormat info(16, 1, 1, 5, 6, 5, 0, 0, 0, 0, FormatID::R5G6B5_UNORM); return info; } case D3DFMT_X8R8G8B8: { static const D3DFormat info(32, 1, 1, 8, 8, 8, 0, 0, 0, 0, FormatID::B8G8R8X8_UNORM); return info; } case D3DFMT_A8R8G8B8: { static const D3DFormat info(32, 1, 1, 8, 8, 8, 8, 0, 0, 0, FormatID::B8G8R8A8_UNORM); return info; } case D3DFMT_R16F: { static const D3DFormat info(16, 1, 1, 16, 0, 0, 0, 0, 0, 0, FormatID::R16_FLOAT); return info; } case D3DFMT_G16R16F: { static const D3DFormat info(32, 1, 1, 16, 16, 0, 0, 0, 0, 0, FormatID::R16G16_FLOAT); return info; } case D3DFMT_A16B16G16R16F: { static const D3DFormat info(64, 1, 1, 16, 16, 16, 16, 0, 0, 0, FormatID::R16G16B16A16_FLOAT); return info; } case D3DFMT_R32F: { static const D3DFormat info(32, 1, 1, 32, 0, 0, 0, 0, 0, 0, FormatID::R32_FLOAT); return info; } case D3DFMT_G32R32F: { static const D3DFormat info(64, 1, 1, 32, 32, 0, 0, 0, 0, 0, FormatID::R32G32_FLOAT); return info; } case D3DFMT_A32B32G32R32F: { static const D3DFormat info(128, 1, 1, 32, 32, 32, 32, 0, 0, 0, FormatID::R32G32B32A32_FLOAT); return info; } case D3DFMT_D16: { static const D3DFormat info(16, 1, 1, 0, 0, 0, 0, 0, 16, 0, FormatID::D16_UNORM); return info; } case D3DFMT_D24S8: { static const D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 24, 8, FormatID::D24_UNORM_S8_UINT); return info; } case D3DFMT_D24X8: { static const D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 24, 0, FormatID::D16_UNORM); return info; } case D3DFMT_D32: { static const D3DFormat info(32, 1, 1, 0, 0, 0, 0, 0, 32, 0, FormatID::D32_UNORM); return info; } case D3DFMT_DXT1: { static const D3DFormat info(64, 4, 4, 0, 0, 0, 0, 0, 0, 0, FormatID::BC1_RGBA_UNORM_BLOCK); return info; } case D3DFMT_DXT3: { static const D3DFormat info(128, 4, 4, 0, 0, 0, 0, 0, 0, 0, FormatID::BC2_RGBA_UNORM_BLOCK); return info; } case D3DFMT_DXT5: { static const D3DFormat info(128, 4, 4, 0, 0, 0, 0, 0, 0, 0, FormatID::BC3_RGBA_UNORM_BLOCK); return info; } default: { static const D3DFormat defaultInfo; return defaultInfo; } } } } // namespace d3d9 } // namespace rx