blob: 0823b37a5d221899ec9f8841d67f678541a6aca5 [file] [log] [blame]
//
// 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