Commit 9cb1df4f by Olli Etuaho Committed by Commit Bot

D3D11: Get mip generation function from ANGLE format

This is done to make it possible to change some of the DXGI formats of integer textures without affecting their mip generation function associations. BUG=angleproject:1244 TEST=angle_end2end_tests, dEQP-GLES3.functional.texture.mipmap.*generate* (all pass) Change-Id: Ie83dd0e1883e9d8e267fbd4bf54b1e466fb0b210 Reviewed-on: https://chromium-review.googlesource.com/328963Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent 99cdca03
......@@ -41,15 +41,14 @@ Image11::~Image11()
releaseStagingTexture();
}
gl::Error Image11::generateMipmap(Image11 *dest, Image11 *src)
gl::Error Image11::generateMipmap(Image11 *dest,
Image11 *src,
const Renderer11DeviceCaps &rendererCaps)
{
ASSERT(src->getDXGIFormat() == dest->getDXGIFormat());
ASSERT(src->getWidth() == 1 || src->getWidth() / 2 == dest->getWidth());
ASSERT(src->getHeight() == 1 || src->getHeight() / 2 == dest->getHeight());
const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(src->getDXGIFormat());
ASSERT(dxgiFormatInfo.mipGenerationFunction != NULL);
D3D11_MAPPED_SUBRESOURCE destMapped;
gl::Error error = dest->map(D3D11_MAP_WRITE, &destMapped);
if (error.isError())
......@@ -68,9 +67,11 @@ gl::Error Image11::generateMipmap(Image11 *dest, Image11 *src)
const uint8_t *sourceData = reinterpret_cast<const uint8_t*>(srcMapped.pData);
uint8_t *destData = reinterpret_cast<uint8_t*>(destMapped.pData);
dxgiFormatInfo.mipGenerationFunction(src->getWidth(), src->getHeight(), src->getDepth(),
sourceData, srcMapped.RowPitch, srcMapped.DepthPitch,
destData, destMapped.RowPitch, destMapped.DepthPitch);
auto mipGenerationFunction = d3d11::GetTextureFormatInfo(src->getInternalFormat(), rendererCaps)
.formatSet.mipGenerationFunction;
mipGenerationFunction(src->getWidth(), src->getHeight(), src->getDepth(), sourceData,
srcMapped.RowPitch, srcMapped.DepthPitch, destData, destMapped.RowPitch,
destMapped.DepthPitch);
dest->unmap();
src->unmap();
......
......@@ -25,6 +25,7 @@ namespace rx
class Renderer11;
class TextureHelper11;
class TextureStorage11;
struct Renderer11DeviceCaps;
class Image11 : public ImageD3D
{
......@@ -32,7 +33,9 @@ class Image11 : public ImageD3D
Image11(Renderer11 *renderer);
virtual ~Image11();
static gl::Error generateMipmap(Image11 *dest, Image11 *src);
static gl::Error generateMipmap(Image11 *dest,
Image11 *src,
const Renderer11DeviceCaps &rendererCaps);
virtual bool isDirty() const;
......
......@@ -3499,7 +3499,7 @@ gl::Error Renderer11::generateMipmap(ImageD3D *dest, ImageD3D *src)
{
Image11 *dest11 = GetAs<Image11>(dest);
Image11 *src11 = GetAs<Image11>(src);
return Image11::generateMipmap(dest11, src11);
return Image11::generateMipmap(dest11, src11, mRenderer11DeviceCaps);
}
gl::Error Renderer11::generateMipmapsUsingD3D(TextureStorage *storage,
......
......@@ -283,7 +283,6 @@ DXGIFormat::DXGIFormat()
stencilOffset(0),
internalFormat(GL_NONE),
componentType(GL_NONE),
mipGenerationFunction(NULL),
colorReadFunction(NULL),
fastCopyFunctions(),
nativeMipmapSupport(NULL)
......@@ -310,7 +309,6 @@ ColorCopyFunction DXGIFormat::getFastCopyFunction(GLenum format, GLenum type) co
void AddDXGIFormat(DXGIFormatInfoMap *map,
DXGI_FORMAT dxgiFormat,
GLenum componentType,
MipGenerationFunction mipFunc,
ColorReadFunction readFunc,
NativeMipmapGenerationSupportFunction nativeMipmapSupport)
{
......@@ -345,7 +343,6 @@ void AddDXGIFormat(DXGIFormatInfoMap *map,
info.componentType = componentType;
info.mipGenerationFunction = mipFunc;
info.colorReadFunction = readFunc;
static const D3D11FastCopyMap fastCopyMap = BuildFastCopyMap();
......@@ -366,86 +363,86 @@ static DXGIFormatInfoMap BuildDXGIFormatInfoMap()
DXGIFormatInfoMap map;
// clang-format off
// | DXGI format |Component Type | Mip generation function | Color read function | Native mipmap function
AddDXGIFormat(&map, DXGI_FORMAT_UNKNOWN, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_A8_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<A8>, ReadColor<A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<R8>, ReadColor<R8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<R8G8>, ReadColor<R8G8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<R8G8B8A8>, ReadColor<R8G8B8A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, GL_UNSIGNED_NORMALIZED, GenerateMip<R8G8B8A8>, ReadColor<R8G8B8A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_B8G8R8A8_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<B8G8R8A8>, ReadColor<B8G8R8A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_SNORM, GL_SIGNED_NORMALIZED, GenerateMip<R8S>, ReadColor<R8S, GLfloat> , RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SNORM, GL_SIGNED_NORMALIZED, GenerateMip<R8G8S>, ReadColor<R8G8S, GLfloat> , RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SNORM, GL_SIGNED_NORMALIZED, GenerateMip<R8G8B8A8S>, ReadColor<R8G8B8A8S, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_UINT, GL_UNSIGNED_INT, GenerateMip<R8>, ReadColor<R8, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UINT, GL_UNSIGNED_INT, GenerateMip<R16>, ReadColor<R16, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_UINT, GL_UNSIGNED_INT, GenerateMip<R32>, ReadColor<R32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UINT, GL_UNSIGNED_INT, GenerateMip<R8G8>, ReadColor<R8G8, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UINT, GL_UNSIGNED_INT, GenerateMip<R16G16>, ReadColor<R16G16, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_UINT, GL_UNSIGNED_INT, GenerateMip<R32G32>, ReadColor<R32G32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_UINT, GL_UNSIGNED_INT, GenerateMip<R32G32B32>, ReadColor<R32G32B32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UINT, GL_UNSIGNED_INT, GenerateMip<R8G8B8A8>, ReadColor<R8G8B8A8, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UINT, GL_UNSIGNED_INT, GenerateMip<R16G16B16A16>, ReadColor<R16G16B16A16, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_UINT, GL_UNSIGNED_INT, GenerateMip<R32G32B32A32>, ReadColor<R32G32B32A32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8_SINT, GL_INT, GenerateMip<R8S>, ReadColor<R8S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_SINT, GL_INT, GenerateMip<R16S>, ReadColor<R16S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_SINT, GL_INT, GenerateMip<R32S>, ReadColor<R32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SINT, GL_INT, GenerateMip<R8G8S>, ReadColor<R8G8S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SINT, GL_INT, GenerateMip<R16G16S>, ReadColor<R16G16S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_SINT, GL_INT, GenerateMip<R32G32S>, ReadColor<R32G32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_SINT, GL_INT, GenerateMip<R32G32B32S>, ReadColor<R32G32B32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SINT, GL_INT, GenerateMip<R8G8B8A8S>, ReadColor<R8G8B8A8S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SINT, GL_INT, GenerateMip<R16G16B16A16S>, ReadColor<R16G16B16A16S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_SINT, GL_INT, GenerateMip<R32G32B32A32S>, ReadColor<R32G32B32A32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<R10G10B10A2>, ReadColor<R10G10B10A2, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UINT, GL_UNSIGNED_INT, GenerateMip<R10G10B10A2>, ReadColor<R10G10B10A2, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_FLOAT, GL_FLOAT, GenerateMip<R16F>, ReadColor<R16F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_FLOAT, GL_FLOAT, GenerateMip<R16G16F>, ReadColor<R16G16F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, GL_FLOAT, GenerateMip<R16G16B16A16F>, ReadColor<R16G16B16A16F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT, GL_FLOAT, GenerateMip<R32F>, ReadColor<R32F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_FLOAT, GL_FLOAT, GenerateMip<R32G32F>, ReadColor<R32G32F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_FLOAT, GL_FLOAT, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, GL_FLOAT, GenerateMip<R32G32B32A32F>, ReadColor<R32G32B32A32F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_3>);
AddDXGIFormat(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, GL_FLOAT, GenerateMip<R9G9B9E5>, ReadColor<R9G9B9E5, GLfloat>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R11G11B10_FLOAT, GL_FLOAT, GenerateMip<R11G11B10F>, ReadColor<R11G11B10F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R16_TYPELESS, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D16_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R24G8_TYPELESS, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, GL_UNSIGNED_INT, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G8X24_TYPELESS, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, GL_UNSIGNED_INT, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_TYPELESS, GL_NONE, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT, GL_FLOAT, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC1_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC2_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC3_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
// | DXGI format | Component Type | Color read function | Native mipmap function
AddDXGIFormat(&map, DXGI_FORMAT_UNKNOWN, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_A8_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<R8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<R8G8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<R8G8B8A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, GL_UNSIGNED_NORMALIZED, ReadColor<R8G8B8A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_B8G8R8A8_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<B8G8R8A8, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_SNORM, GL_SIGNED_NORMALIZED, ReadColor<R8S, GLfloat> , RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SNORM, GL_SIGNED_NORMALIZED, ReadColor<R8G8S, GLfloat> , RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SNORM, GL_SIGNED_NORMALIZED, ReadColor<R8G8B8A8S, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_UINT, GL_UNSIGNED_INT, ReadColor<R8, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UINT, GL_UNSIGNED_INT, ReadColor<R16, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_UINT, GL_UNSIGNED_INT, ReadColor<R32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UINT, GL_UNSIGNED_INT, ReadColor<R8G8, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UINT, GL_UNSIGNED_INT, ReadColor<R16G16, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_UINT, GL_UNSIGNED_INT, ReadColor<R32G32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_UINT, GL_UNSIGNED_INT, ReadColor<R32G32B32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UINT, GL_UNSIGNED_INT, ReadColor<R8G8B8A8, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UINT, GL_UNSIGNED_INT, ReadColor<R16G16B16A16, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_UINT, GL_UNSIGNED_INT, ReadColor<R32G32B32A32, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8_SINT, GL_INT, ReadColor<R8S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_SINT, GL_INT, ReadColor<R16S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_SINT, GL_INT, ReadColor<R32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SINT, GL_INT, ReadColor<R8G8S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SINT, GL_INT, ReadColor<R16G16S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_SINT, GL_INT, ReadColor<R32G32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_SINT, GL_INT, ReadColor<R32G32B32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SINT, GL_INT, ReadColor<R8G8B8A8S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SINT, GL_INT, ReadColor<R16G16B16A16S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_SINT, GL_INT, ReadColor<R32G32B32A32S, GLint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<R10G10B10A2, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UINT, GL_UNSIGNED_INT, ReadColor<R10G10B10A2, GLuint>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_FLOAT, GL_FLOAT, ReadColor<R16F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_FLOAT, GL_FLOAT, ReadColor<R16G16F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, GL_FLOAT, ReadColor<R16G16B16A16F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT, GL_FLOAT, ReadColor<R32F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_FLOAT, GL_FLOAT, ReadColor<R32G32F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_FLOAT, GL_FLOAT, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, GL_FLOAT, ReadColor<R32G32B32A32F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_3>);
AddDXGIFormat(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, GL_FLOAT, ReadColor<R9G9B9E5, GLfloat>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R11G11B10_FLOAT, GL_FLOAT, ReadColor<R11G11B10F, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R16_TYPELESS, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D16_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R24G8_TYPELESS, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, GL_UNSIGNED_INT, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G8X24_TYPELESS, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, GL_UNSIGNED_INT, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_TYPELESS, GL_NONE, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT, GL_FLOAT, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC1_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC2_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC3_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
// B5G6R5 in D3D11 is treated the same as R5G6B5 in D3D9, so reuse the R5G6B5 functions used by the D3D9 renderer.
// The same applies to B4G4R4A4 and B5G5R5A1 with A4R4G4B4 and A1R5G5B5 respectively.
AddDXGIFormat(&map, DXGI_FORMAT_B5G6R5_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<R5G6B5>, ReadColor<R5G6B5, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_B4G4R4A4_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<A4R4G4B4>, ReadColor<A4R4G4B4, GLfloat>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_B5G5R5A1_UNORM, GL_UNSIGNED_NORMALIZED, GenerateMip<A1R5G5B5>, ReadColor<A1R5G5B5, GLfloat>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_B5G6R5_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<R5G6B5, GLfloat>, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_B4G4R4A4_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<A4R4G4B4, GLfloat>, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_B5G5R5A1_UNORM, GL_UNSIGNED_NORMALIZED, ReadColor<A1R5G5B5, GLfloat>, NeverSupported);
// Useful formats for vertex buffers
AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_SNORM, GL_SIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SNORM, GL_SIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UNORM, GL_UNSIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SNORM, GL_SIGNED_NORMALIZED, NULL, NULL, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_SNORM, GL_SIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SNORM, GL_SIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UNORM, GL_UNSIGNED_NORMALIZED, nullptr, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SNORM, GL_SIGNED_NORMALIZED, nullptr, NeverSupported);
// clang-format on
return map;
......
......@@ -45,7 +45,6 @@ struct DXGIFormat
GLenum internalFormat;
GLenum componentType;
MipGenerationFunction mipGenerationFunction;
ColorReadFunction colorReadFunction;
FastCopyFunctionMap fastCopyFunctions;
......
......@@ -52,6 +52,7 @@ template_texture_format_table_autogen_cpp = """// GENERATED FILE - DO NOT EDIT.
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/load_functions_table.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/generatemip.h"
#include "libANGLE/renderer/d3d/loadimage.h"
namespace rx
......@@ -142,7 +143,8 @@ ANGLEFormatSet::ANGLEFormatSet()
srvFormat(DXGI_FORMAT_UNKNOWN),
rtvFormat(DXGI_FORMAT_UNKNOWN),
dsvFormat(DXGI_FORMAT_UNKNOWN),
swizzleFormat(ANGLE_FORMAT_NONE)
swizzleFormat(ANGLE_FORMAT_NONE),
mipGenerationFunction(nullptr)
{{
}}
......@@ -170,14 +172,16 @@ ANGLEFormatSet::ANGLEFormatSet(ANGLEFormat format,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat)
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction)
: format(format),
glInternalFormat(glInternalFormat),
texFormat(texFormat),
srvFormat(srvFormat),
rtvFormat(rtvFormat),
dsvFormat(dsvFormat),
swizzleFormat(swizzleFormat)
swizzleFormat(swizzleFormat),
mipGenerationFunction(mipGenerationFunction)
{{
}}
......@@ -388,6 +392,38 @@ def parse_json_into_switch_texture_format_string(json_map, json_data):
return table_data
def get_channel_struct(angle_format):
if 'bits' not in angle_format:
return None
bits = angle_format['bits']
if 'depth' in bits or 'stencil' in bits:
return None
if 'channelStruct' in angle_format:
return angle_format['channelStruct']
struct_name = ''
for channel in angle_format['channels']:
if channel == 'r':
struct_name += 'R{}'.format(bits['red'])
if channel == 'g':
struct_name += 'G{}'.format(bits['green'])
if channel == 'b':
struct_name += 'B{}'.format(bits['blue'])
if channel == 'a':
struct_name += 'A{}'.format(bits['alpha'])
if angle_format['componentType'] == 'float':
struct_name += 'F'
if angle_format['componentType'] == 'int' or angle_format['componentType'] == 'snorm':
struct_name += 'S'
return struct_name
def get_mip_generation_function(angle_format):
channel_struct = get_channel_struct(angle_format)
if channel_struct == None:
return 'nullptr'
return 'GenerateMip<' + channel_struct + '>'
def parse_json_into_switch_angle_format_string(json_data):
table_data = ''
for angle_format_item in sorted(json_data.iteritems()):
......@@ -399,6 +435,7 @@ def parse_json_into_switch_angle_format_string(json_data):
rtv_format = angle_format["rtvFormat"] if "rtvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
dsv_format = angle_format["dsvFormat"] if "dsvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
swizzle_format = get_swizzle_format_id(angle_format_item[0], angle_format)
mip_generation_function = get_mip_generation_function(angle_format)
table_data += ' {\n'
table_data += ' static const ANGLEFormatSet formatInfo(' + angle_format_item[0] + ',\n'
table_data += ' ' + gl_internal_format + ',\n'
......@@ -406,7 +443,8 @@ def parse_json_into_switch_angle_format_string(json_data):
table_data += ' ' + srv_format + ',\n'
table_data += ' ' + rtv_format + ',\n'
table_data += ' ' + dsv_format + ',\n'
table_data += ' ' + swizzle_format + ');\n'
table_data += ' ' + swizzle_format + ',\n'
table_data += ' ' + mip_generation_function + ');\n'
table_data += ' return formatInfo;\n'
table_data += ' }\n'
return table_data
......
......@@ -424,7 +424,8 @@
"channels": "bgr",
"componentType": "unorm",
"bits": { "red": 5, "green": 6, "blue": 5 },
"glInternalFormat": "GL_RGB565"
"glInternalFormat": "GL_RGB565",
"channelStruct": "R5G6B5"
},
"ANGLE_FORMAT_B5G5R5A1_UNORM": {
"texFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
......@@ -433,7 +434,8 @@
"channels": "bgra",
"componentType": "unorm",
"bits": { "red": 5, "green": 5, "blue": 5, "alpha": 1 },
"glInternalFormat": "GL_RGB5_A1"
"glInternalFormat": "GL_RGB5_A1",
"channelStruct": "A1R5G5B5"
},
"ANGLE_FORMAT_R8G8B8A8_SINT": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
......@@ -467,7 +469,8 @@
"channels": "rgb",
"componentType": "float",
"bits": { "red": 9, "green": 9, "blue": 9, "shared": 5 },
"glInternalFormat": "GL_RGB9_E5"
"glInternalFormat": "GL_RGB9_E5",
"channelStruct": "R9G9B9E5"
},
"ANGLE_FORMAT_B4G4R4A4_UNORM": {
"texFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
......@@ -476,7 +479,8 @@
"channels": "bgra",
"componentType": "unorm",
"bits": { "red": 4, "green": 4, "blue": 4, "alpha": 4 },
"glInternalFormat": "GL_RGBA4"
"glInternalFormat": "GL_RGBA4",
"channelStruct": "A4R4G4B4"
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
......
......@@ -44,7 +44,8 @@ struct ANGLEFormatSet
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat);
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction);
ANGLEFormatSet(const ANGLEFormatSet &) = default;
ANGLEFormatSet &operator=(const ANGLEFormatSet &) = default;
......@@ -60,6 +61,8 @@ struct ANGLEFormatSet
DXGI_FORMAT dsvFormat;
ANGLEFormat swizzleFormat;
MipGenerationFunction mipGenerationFunction;
};
struct TextureFormat : public angle::NonCopyable
......
......@@ -14,6 +14,7 @@
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/load_functions_table.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/generatemip.h"
#include "libANGLE/renderer/d3d/loadimage.h"
namespace rx
......@@ -104,7 +105,8 @@ ANGLEFormatSet::ANGLEFormatSet()
srvFormat(DXGI_FORMAT_UNKNOWN),
rtvFormat(DXGI_FORMAT_UNKNOWN),
dsvFormat(DXGI_FORMAT_UNKNOWN),
swizzleFormat(ANGLE_FORMAT_NONE)
swizzleFormat(ANGLE_FORMAT_NONE),
mipGenerationFunction(nullptr)
{
}
......@@ -132,14 +134,16 @@ ANGLEFormatSet::ANGLEFormatSet(ANGLEFormat format,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat)
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction)
: format(format),
glInternalFormat(glInternalFormat),
texFormat(texFormat),
srvFormat(srvFormat),
rtvFormat(rtvFormat),
dsvFormat(dsvFormat),
swizzleFormat(swizzleFormat)
swizzleFormat(swizzleFormat),
mipGenerationFunction(mipGenerationFunction)
{
}
......@@ -156,7 +160,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<A8>);
return formatInfo;
}
case ANGLE_FORMAT_B4G4R4A4_UNORM:
......@@ -167,7 +172,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_B4G4R4A4_UNORM);
ANGLE_FORMAT_B4G4R4A4_UNORM,
GenerateMip<A4R4G4B4>);
return formatInfo;
}
case ANGLE_FORMAT_B5G5R5A1_UNORM:
......@@ -178,7 +184,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<A1R5G5B5>);
return formatInfo;
}
case ANGLE_FORMAT_B5G6R5_UNORM:
......@@ -189,7 +196,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R5G6B5>);
return formatInfo;
}
case ANGLE_FORMAT_B8G8R8A8_UNORM:
......@@ -200,7 +208,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_B8G8R8A8_UNORM);
ANGLE_FORMAT_B8G8R8A8_UNORM,
GenerateMip<B8G8R8A8>);
return formatInfo;
}
case ANGLE_FORMAT_BC1_UNORM:
......@@ -211,7 +220,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_BC2_UNORM:
......@@ -222,7 +232,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_BC3_UNORM:
......@@ -233,7 +244,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_D16_UNORM_FL10:
......@@ -244,7 +256,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM,
ANGLE_FORMAT_R16G16B16A16_UNORM);
ANGLE_FORMAT_R16G16B16A16_UNORM,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_D16_UNORM_FL9_3:
......@@ -255,7 +268,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM,
ANGLE_FORMAT_R16G16B16A16_UNORM);
ANGLE_FORMAT_R16G16B16A16_UNORM,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_D24_UNORM_S8_UINT_FL10:
......@@ -266,7 +280,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3:
......@@ -277,7 +292,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_D32_FLOAT:
......@@ -288,7 +304,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_D32_FLOAT_S8X24_UINT_FL10:
......@@ -299,7 +316,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_NONE:
......@@ -310,7 +328,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_NONE);
ANGLE_FORMAT_NONE,
nullptr);
return formatInfo;
}
case ANGLE_FORMAT_R10G10B10A2_UINT:
......@@ -321,7 +340,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R10G10B10A2>);
return formatInfo;
}
case ANGLE_FORMAT_R10G10B10A2_UNORM:
......@@ -332,7 +352,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UNORM);
ANGLE_FORMAT_R16G16B16A16_UNORM,
GenerateMip<R10G10B10A2>);
return formatInfo;
}
case ANGLE_FORMAT_R11G11B10_FLOAT:
......@@ -343,7 +364,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R11G11B10F>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_FLOAT:
......@@ -354,7 +376,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R16G16B16A16F>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_SINT:
......@@ -365,7 +388,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT);
ANGLE_FORMAT_R16G16B16A16_SINT,
GenerateMip<R16G16B16A16S>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_UINT:
......@@ -376,7 +400,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R16G16B16A16>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_UNORM:
......@@ -387,7 +412,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UNORM);
ANGLE_FORMAT_R16G16B16A16_UNORM,
GenerateMip<R16G16B16A16>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_FLOAT:
......@@ -398,7 +424,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R16G16F>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_SINT:
......@@ -409,7 +436,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT);
ANGLE_FORMAT_R16G16B16A16_SINT,
GenerateMip<R16G16S>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_UINT:
......@@ -420,7 +448,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R16G16>);
return formatInfo;
}
case ANGLE_FORMAT_R16_FLOAT:
......@@ -431,7 +460,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R16F>);
return formatInfo;
}
case ANGLE_FORMAT_R16_SINT:
......@@ -442,7 +472,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT);
ANGLE_FORMAT_R16G16B16A16_SINT,
GenerateMip<R16S>);
return formatInfo;
}
case ANGLE_FORMAT_R16_UINT:
......@@ -453,7 +484,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R16>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_FLOAT:
......@@ -464,7 +496,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
GenerateMip<R32G32B32A32F>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_SINT:
......@@ -475,7 +508,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT);
ANGLE_FORMAT_R32G32B32A32_SINT,
GenerateMip<R32G32B32A32S>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_UINT:
......@@ -486,7 +520,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT);
ANGLE_FORMAT_R32G32B32A32_UINT,
GenerateMip<R32G32B32A32>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_FLOAT:
......@@ -497,7 +532,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
GenerateMip<R32G32F>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_SINT:
......@@ -508,7 +544,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT);
ANGLE_FORMAT_R32G32B32A32_SINT,
GenerateMip<R32G32S>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_UINT:
......@@ -519,7 +556,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT);
ANGLE_FORMAT_R32G32B32A32_UINT,
GenerateMip<R32G32>);
return formatInfo;
}
case ANGLE_FORMAT_R32_FLOAT:
......@@ -530,7 +568,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
GenerateMip<R32F>);
return formatInfo;
}
case ANGLE_FORMAT_R32_SINT:
......@@ -541,7 +580,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT);
ANGLE_FORMAT_R32G32B32A32_SINT,
GenerateMip<R32S>);
return formatInfo;
}
case ANGLE_FORMAT_R32_UINT:
......@@ -552,7 +592,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT);
ANGLE_FORMAT_R32G32B32A32_UINT,
GenerateMip<R32>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_SINT:
......@@ -563,7 +604,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT);
ANGLE_FORMAT_R8G8B8A8_SINT,
GenerateMip<R8G8B8A8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_SNORM:
......@@ -574,7 +616,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8G8B8A8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UINT:
......@@ -585,7 +628,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT);
ANGLE_FORMAT_R8G8B8A8_UINT,
GenerateMip<R8G8B8A8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM:
......@@ -596,7 +640,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8B8A8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE:
......@@ -607,7 +652,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8B8A8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB:
......@@ -618,7 +664,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB);
ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB,
GenerateMip<R8G8B8A8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE:
......@@ -629,7 +676,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8B8A8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SINT:
......@@ -640,7 +688,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT);
ANGLE_FORMAT_R8G8B8A8_SINT,
GenerateMip<R8G8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SNORM:
......@@ -651,7 +700,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8G8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SNORM_NONRENDERABLE:
......@@ -662,7 +712,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8G8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UINT:
......@@ -673,7 +724,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT);
ANGLE_FORMAT_R8G8B8A8_UINT,
GenerateMip<R8G8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UNORM:
......@@ -684,7 +736,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UNORM_NONRENDERABLE:
......@@ -695,7 +748,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8>);
return formatInfo;
}
case ANGLE_FORMAT_R8_SINT:
......@@ -706,7 +760,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT);
ANGLE_FORMAT_R8G8B8A8_SINT,
GenerateMip<R8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8_SNORM:
......@@ -717,7 +772,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8_SNORM_NONRENDERABLE:
......@@ -728,7 +784,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8S>);
return formatInfo;
}
case ANGLE_FORMAT_R8_UINT:
......@@ -739,7 +796,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT);
ANGLE_FORMAT_R8G8B8A8_UINT,
GenerateMip<R8>);
return formatInfo;
}
case ANGLE_FORMAT_R8_UNORM:
......@@ -750,7 +808,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8>);
return formatInfo;
}
case ANGLE_FORMAT_R8_UNORM_NONRENDERABLE:
......@@ -761,7 +820,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8>);
return formatInfo;
}
case ANGLE_FORMAT_R9G9B9E5_SHAREDEXP:
......@@ -772,7 +832,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R9G9B9E5>);
return formatInfo;
}
case ANGLE_FORMAT_X24_TYPELESS_G8_UINT:
......@@ -783,7 +844,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr);
return formatInfo;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment