Commit 114d129d by Olli Etuaho

D3D11: Get color read function from ANGLE format

This is done to make it possible to change some of the DXGI formats of integer textures without affecting their color read function associations. The packPixels function gets the ANGLE format from the texture helper, which now requires the ANGLE format to be passed in at the time of creation. BUG=angleproject:1244 TEST=angle_end2end_tests, dEQP-GLES3.functional.fbo.* (no regressions), dEQP-GLES3.functional.pbo.* (all pass) Change-Id: I368337cfe5f8c86ff3292009ccf29e9d01409a07 Reviewed-on: https://chromium-review.googlesource.com/329213Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent 3b3657be
......@@ -1322,7 +1322,8 @@ gl::Error Buffer11::PackStorage::packPixels(const gl::FramebufferAttachment &rea
ASSERT(renderTargetResource);
unsigned int srcSubresource = renderTarget->getSubresourceIndex();
TextureHelper11 srcTexture = TextureHelper11::MakeAndReference(renderTargetResource);
TextureHelper11 srcTexture =
TextureHelper11::MakeAndReference(renderTargetResource, renderTarget->getANGLEFormat());
mQueuedPackCommand.reset(new PackPixelsParams(params));
......@@ -1330,9 +1331,9 @@ gl::Error Buffer11::PackStorage::packPixels(const gl::FramebufferAttachment &rea
if (!mStagingTexture.getResource() || mStagingTexture.getFormat() != srcTexture.getFormat() ||
mStagingTexture.getExtents() != srcTextureSize)
{
auto textureOrError =
CreateStagingTexture(srcTexture.getTextureType(), srcTexture.getFormat(),
srcTextureSize, mRenderer->getDevice());
auto textureOrError = CreateStagingTexture(
srcTexture.getTextureType(), srcTexture.getFormat(), srcTexture.getANGLEFormat(),
srcTextureSize, mRenderer->getDevice());
if (textureOrError.isError())
{
return textureOrError.getError();
......
......@@ -327,7 +327,8 @@ gl::Error Image11::copyFromTexStorage(const gl::ImageIndex &imageIndex, TextureS
}
UINT subresourceIndex = storage11->getSubresourceIndex(imageIndex);
TextureHelper11 textureHelper = TextureHelper11::MakeAndReference(resource);
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(resource, storage11->getANGLEFormat());
gl::Box sourceBox(0, 0, 0, mWidth, mHeight, mDepth);
return copyWithoutConversion(gl::Offset(), sourceBox, textureHelper, subresourceIndex);
......@@ -355,7 +356,8 @@ gl::Error Image11::copyFromFramebuffer(const gl::Offset &destOffset,
RenderTarget11 *rt11 = GetAs<RenderTarget11>(renderTarget);
ASSERT(rt11->getTexture());
TextureHelper11 textureHelper = TextureHelper11::MakeAndReference(rt11->getTexture());
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(rt11->getTexture(), rt11->getANGLEFormat());
unsigned int sourceSubResource = rt11->getSubresourceIndex();
gl::Box sourceBox(sourceArea.x, sourceArea.y, 0, sourceArea.width, sourceArea.height, 1);
......
......@@ -3575,7 +3575,8 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
RenderTarget11 *rt11 = GetAs<RenderTarget11>(renderTarget);
ASSERT(rt11->getTexture());
TextureHelper11 textureHelper = TextureHelper11::MakeAndReference(rt11->getTexture());
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(rt11->getTexture(), rt11->getANGLEFormat());
unsigned int sourceSubResource = rt11->getSubresourceIndex();
const gl::Extents &texSize = textureHelper.getExtents();
......@@ -3607,8 +3608,9 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
}
gl::Extents safeSize(safeArea.width, safeArea.height, 1);
auto errorOrResult = CreateStagingTexture(textureHelper.getTextureType(),
textureHelper.getFormat(), safeSize, mDevice);
auto errorOrResult =
CreateStagingTexture(textureHelper.getTextureType(), textureHelper.getFormat(),
textureHelper.getANGLEFormat(), safeSize, mDevice);
if (errorOrResult.isError())
{
return errorOrResult.getError();
......@@ -3648,7 +3650,8 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
mDeviceContext->ResolveSubresource(resolveTex2D, 0, textureHelper.getTexture2D(),
sourceSubResource, textureHelper.getFormat());
resolvedTextureHelper = TextureHelper11::MakeAndReference(resolveTex2D);
resolvedTextureHelper =
TextureHelper11::MakeAndReference(resolveTex2D, textureHelper.getANGLEFormat());
sourceSubResource = 0;
srcTexture = &resolvedTextureHelper;
......@@ -3757,7 +3760,8 @@ gl::Error Renderer11::packPixels(const TextureHelper11 &textureHelper,
}
else
{
ColorReadFunction colorReadFunction = dxgiFormatInfo.colorReadFunction;
const auto &angleFormatInfo = d3d11::GetANGLEFormatSet(textureHelper.getANGLEFormat());
ColorReadFunction colorReadFunction = angleFormatInfo.colorReadFunction;
ColorWriteFunction colorWriteFunction = GetColorWriteFunction(params.format, params.type);
uint8_t temp[16]; // Maximum size of any Color<T> type used.
......
......@@ -358,6 +358,11 @@ gl::Error TextureStorage11::getSRVLevels(GLint baseLevel,
return gl::Error(GL_NO_ERROR);
}
d3d11::ANGLEFormat TextureStorage11::getANGLEFormat() const
{
return mTextureFormatSet.format;
}
gl::Error TextureStorage11::generateSwizzles(GLenum swizzleRed,
GLenum swizzleGreen,
GLenum swizzleBlue,
......
......@@ -78,6 +78,8 @@ class TextureStorage11 : public TextureStorage
gl::Error getSRVLevels(GLint baseLevel, GLint maxLevel, ID3D11ShaderResourceView **outSRV);
d3d11::ANGLEFormat getANGLEFormat() const;
protected:
TextureStorage11(Renderer11 *renderer, UINT bindFlags, UINT miscFlags);
int getLevelWidth(int mipLevel) const;
......
......@@ -281,7 +281,6 @@ DXGIFormat::DXGIFormat()
stencilBits(0),
internalFormat(GL_NONE),
componentType(GL_NONE),
colorReadFunction(NULL),
fastCopyFunctions(),
nativeMipmapSupport(NULL)
{
......@@ -307,7 +306,6 @@ ColorCopyFunction DXGIFormat::getFastCopyFunction(GLenum format, GLenum type) co
void AddDXGIFormat(DXGIFormatInfoMap *map,
DXGI_FORMAT dxgiFormat,
GLenum componentType,
ColorReadFunction readFunc,
NativeMipmapGenerationSupportFunction nativeMipmapSupport)
{
DXGIFormat info;
......@@ -339,8 +337,6 @@ void AddDXGIFormat(DXGIFormatInfoMap *map,
info.componentType = componentType;
info.colorReadFunction = readFunc;
static const D3D11FastCopyMap fastCopyMap = BuildFastCopyMap();
std::pair<D3D11FastCopyMap::const_iterator, D3D11FastCopyMap::const_iterator> fastCopyIter = fastCopyMap.equal_range(dxgiFormat);
for (D3D11FastCopyMap::const_iterator i = fastCopyIter.first; i != fastCopyIter.second; i++)
......@@ -360,85 +356,85 @@ static DXGIFormatInfoMap BuildDXGIFormatInfoMap()
// clang-format off
// | 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);
AddDXGIFormat(&map, DXGI_FORMAT_UNKNOWN, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_A8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_B8G8R8A8_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_SNORM, GL_SIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SNORM, GL_SIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SNORM, GL_SIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R8_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R8G8B8A8_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_SINT, GL_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R10G10B10A2_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_2>);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32_FLOAT, GL_FLOAT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G32B32A32_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_3>);
AddDXGIFormat(&map, DXGI_FORMAT_R9G9B9E5_SHAREDEXP, GL_FLOAT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R11G11B10_FLOAT, GL_FLOAT, RequiresFeatureLevel<D3D_FEATURE_LEVEL_10_0>);
AddDXGIFormat(&map, DXGI_FORMAT_R16_TYPELESS, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R24G8_TYPELESS, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R24_UNORM_X8_TYPELESS, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D24_UNORM_S8_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32G8X24_TYPELESS, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT_S8X24_UINT, GL_UNSIGNED_INT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R32_TYPELESS, GL_NONE, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_D32_FLOAT, GL_FLOAT, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC1_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC2_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_BC3_UNORM, GL_UNSIGNED_NORMALIZED, 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, 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);
AddDXGIFormat(&map, DXGI_FORMAT_B5G6R5_UNORM, GL_UNSIGNED_NORMALIZED, RequiresFeatureLevel<D3D_FEATURE_LEVEL_9_1>);
AddDXGIFormat(&map, DXGI_FORMAT_B4G4R4A4_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_B5G5R5A1_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
// Useful formats for vertex buffers
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);
AddDXGIFormat(&map, DXGI_FORMAT_R16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16_SNORM, GL_SIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16_SNORM, GL_SIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_UNORM, GL_UNSIGNED_NORMALIZED, NeverSupported);
AddDXGIFormat(&map, DXGI_FORMAT_R16G16B16A16_SNORM, GL_SIGNED_NORMALIZED, NeverSupported);
// clang-format on
return map;
......
......@@ -43,8 +43,6 @@ struct DXGIFormat
GLenum internalFormat;
GLenum componentType;
ColorReadFunction colorReadFunction;
FastCopyFunctionMap fastCopyFunctions;
NativeMipmapGenerationSupportFunction nativeMipmapSupport;
......
......@@ -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/copyimage.h"
#include "libANGLE/renderer/d3d/generatemip.h"
#include "libANGLE/renderer/d3d/loadimage.h"
......@@ -144,7 +145,8 @@ ANGLEFormatSet::ANGLEFormatSet()
rtvFormat(DXGI_FORMAT_UNKNOWN),
dsvFormat(DXGI_FORMAT_UNKNOWN),
swizzleFormat(ANGLE_FORMAT_NONE),
mipGenerationFunction(nullptr)
mipGenerationFunction(nullptr),
colorReadFunction(nullptr)
{{
}}
......@@ -173,7 +175,8 @@ ANGLEFormatSet::ANGLEFormatSet(ANGLEFormat format,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction)
MipGenerationFunction mipGenerationFunction,
ColorReadFunction colorReadFunction)
: format(format),
glInternalFormat(glInternalFormat),
texFormat(texFormat),
......@@ -181,7 +184,8 @@ ANGLEFormatSet::ANGLEFormatSet(ANGLEFormat format,
rtvFormat(rtvFormat),
dsvFormat(dsvFormat),
swizzleFormat(swizzleFormat),
mipGenerationFunction(mipGenerationFunction)
mipGenerationFunction(mipGenerationFunction),
colorReadFunction(colorReadFunction)
{{
}}
......@@ -424,6 +428,19 @@ def get_mip_generation_function(angle_format):
return 'nullptr'
return 'GenerateMip<' + channel_struct + '>'
def get_color_read_function(angle_format):
channel_struct = get_channel_struct(angle_format)
if channel_struct == None:
return 'nullptr'
component_type_map = {
'uint': 'GLuint',
'int': 'GLint',
'unorm': 'GLfloat',
'snorm': 'GLfloat',
'float': 'GLfloat'
}
return 'ReadColor<' + channel_struct + ', '+ component_type_map[angle_format['componentType']] + '>'
def parse_json_into_switch_angle_format_string(json_data):
table_data = ''
for angle_format_item in sorted(json_data.iteritems()):
......@@ -436,6 +453,7 @@ def parse_json_into_switch_angle_format_string(json_data):
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)
color_read_function = get_color_read_function(angle_format)
table_data += ' {\n'
table_data += ' static const ANGLEFormatSet formatInfo(' + angle_format_item[0] + ',\n'
table_data += ' ' + gl_internal_format + ',\n'
......@@ -444,7 +462,8 @@ def parse_json_into_switch_angle_format_string(json_data):
table_data += ' ' + rtv_format + ',\n'
table_data += ' ' + dsv_format + ',\n'
table_data += ' ' + swizzle_format + ',\n'
table_data += ' ' + mip_generation_function + ');\n'
table_data += ' ' + mip_generation_function + ',\n'
table_data += ' ' + color_read_function + ');\n'
table_data += ' return formatInfo;\n'
table_data += ' }\n'
return table_data
......
......@@ -1526,6 +1526,7 @@ void InitConstantBufferDesc(D3D11_BUFFER_DESC *constantBufferDescription, size_t
TextureHelper11::TextureHelper11()
: mTextureType(GL_NONE),
mFormat(DXGI_FORMAT_UNKNOWN),
mANGLEFormat(d3d11::ANGLE_FORMAT_NONE),
mSampleCount(0),
mTexture2D(nullptr),
mTexture3D(nullptr)
......@@ -1536,6 +1537,7 @@ TextureHelper11::TextureHelper11(TextureHelper11 &&toCopy)
: mTextureType(toCopy.mTextureType),
mExtents(toCopy.mExtents),
mFormat(toCopy.mFormat),
mANGLEFormat(toCopy.mANGLEFormat),
mSampleCount(toCopy.mSampleCount),
mTexture2D(toCopy.mTexture2D),
mTexture3D(toCopy.mTexture3D)
......@@ -1544,9 +1546,11 @@ TextureHelper11::TextureHelper11(TextureHelper11 &&toCopy)
}
// static
TextureHelper11 TextureHelper11::MakeAndReference(ID3D11Resource *genericResource)
TextureHelper11 TextureHelper11::MakeAndReference(ID3D11Resource *genericResource,
d3d11::ANGLEFormat angleFormat)
{
TextureHelper11 newHelper;
newHelper.mANGLEFormat = angleFormat;
newHelper.mTexture2D = d3d11::DynamicCastComObject<ID3D11Texture2D>(genericResource);
newHelper.mTexture3D = d3d11::DynamicCastComObject<ID3D11Texture3D>(genericResource);
newHelper.mTextureType = newHelper.mTexture2D ? GL_TEXTURE_2D : GL_TEXTURE_3D;
......@@ -1555,9 +1559,11 @@ TextureHelper11 TextureHelper11::MakeAndReference(ID3D11Resource *genericResourc
}
// static
TextureHelper11 TextureHelper11::MakeAndPossess2D(ID3D11Texture2D *texToOwn)
TextureHelper11 TextureHelper11::MakeAndPossess2D(ID3D11Texture2D *texToOwn,
d3d11::ANGLEFormat angleFormat)
{
TextureHelper11 newHelper;
newHelper.mANGLEFormat = angleFormat;
newHelper.mTexture2D = texToOwn;
newHelper.mTextureType = GL_TEXTURE_2D;
newHelper.initDesc();
......@@ -1565,9 +1571,11 @@ TextureHelper11 TextureHelper11::MakeAndPossess2D(ID3D11Texture2D *texToOwn)
}
// static
TextureHelper11 TextureHelper11::MakeAndPossess3D(ID3D11Texture3D *texToOwn)
TextureHelper11 TextureHelper11::MakeAndPossess3D(ID3D11Texture3D *texToOwn,
d3d11::ANGLEFormat angleFormat)
{
TextureHelper11 newHelper;
newHelper.mANGLEFormat = angleFormat;
newHelper.mTexture3D = texToOwn;
newHelper.mTextureType = GL_TEXTURE_3D;
newHelper.initDesc();
......@@ -1600,6 +1608,7 @@ void TextureHelper11::initDesc()
mFormat = desc3D.Format;
mSampleCount = 1;
}
ASSERT(mFormat == d3d11::GetANGLEFormatSet(mANGLEFormat).texFormat);
}
TextureHelper11::~TextureHelper11()
......@@ -1622,6 +1631,7 @@ TextureHelper11 &TextureHelper11::operator=(TextureHelper11 &&texture)
mTextureType = texture.mTextureType;
mExtents = texture.mExtents;
mFormat = texture.mFormat;
mANGLEFormat = texture.mANGLEFormat;
mSampleCount = texture.mSampleCount;
mTexture2D = texture.mTexture2D;
mTexture3D = texture.mTexture3D;
......@@ -1641,6 +1651,7 @@ void TextureHelper11::reset()
gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
DXGI_FORMAT dxgiFormat,
d3d11::ANGLEFormat angleFormat,
const gl::Extents &size,
ID3D11Device *device)
{
......@@ -1667,7 +1678,7 @@ gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
result);
}
return TextureHelper11::MakeAndPossess2D(stagingTex);
return TextureHelper11::MakeAndPossess2D(stagingTex, angleFormat);
}
ASSERT(textureType == GL_TEXTURE_3D);
......@@ -1690,7 +1701,7 @@ gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
result);
}
return TextureHelper11::MakeAndPossess3D(stagingTex);
return TextureHelper11::MakeAndPossess3D(stagingTex, angleFormat);
}
bool UsePresentPathFast(const Renderer11 *renderer,
......
......@@ -17,6 +17,7 @@
#include "libANGLE/angletypes.h"
#include "libANGLE/Caps.h"
#include "libANGLE/Error.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/renderer/d3d/RendererD3D.h"
namespace gl
......@@ -366,13 +367,17 @@ class TextureHelper11 : angle::NonCopyable
~TextureHelper11();
TextureHelper11 &operator=(TextureHelper11 &&texture);
static TextureHelper11 MakeAndReference(ID3D11Resource *genericResource);
static TextureHelper11 MakeAndPossess2D(ID3D11Texture2D *texToOwn);
static TextureHelper11 MakeAndPossess3D(ID3D11Texture3D *texToOwn);
static TextureHelper11 MakeAndReference(ID3D11Resource *genericResource,
d3d11::ANGLEFormat angleFormat);
static TextureHelper11 MakeAndPossess2D(ID3D11Texture2D *texToOwn,
d3d11::ANGLEFormat angleFormat);
static TextureHelper11 MakeAndPossess3D(ID3D11Texture3D *texToOwn,
d3d11::ANGLEFormat angleFormat);
GLenum getTextureType() const { return mTextureType; }
gl::Extents getExtents() const { return mExtents; }
DXGI_FORMAT getFormat() const { return mFormat; }
d3d11::ANGLEFormat getANGLEFormat() const { return mANGLEFormat; }
int getSampleCount() const { return mSampleCount; }
ID3D11Texture2D *getTexture2D() const { return mTexture2D; }
ID3D11Texture3D *getTexture3D() const { return mTexture3D; }
......@@ -385,6 +390,7 @@ class TextureHelper11 : angle::NonCopyable
GLenum mTextureType;
gl::Extents mExtents;
DXGI_FORMAT mFormat;
d3d11::ANGLEFormat mANGLEFormat;
int mSampleCount;
ID3D11Texture2D *mTexture2D;
ID3D11Texture3D *mTexture3D;
......@@ -392,6 +398,7 @@ class TextureHelper11 : angle::NonCopyable
gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
DXGI_FORMAT dxgiFormat,
d3d11::ANGLEFormat angleFormat,
const gl::Extents &size,
ID3D11Device *device);
......
......@@ -12,14 +12,16 @@
#include <map>
#include "common/angleutils.h"
#include "common/platform.h"
#include "libANGLE/renderer/d3d/formatutilsD3D.h"
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include "libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.h"
namespace rx
{
struct Renderer11DeviceCaps;
namespace d3d11
{
......@@ -45,7 +47,8 @@ struct ANGLEFormatSet
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction);
MipGenerationFunction mipGenerationFunction,
ColorReadFunction colorReadFunction);
ANGLEFormatSet(const ANGLEFormatSet &) = default;
ANGLEFormatSet &operator=(const ANGLEFormatSet &) = default;
......@@ -63,6 +66,7 @@ struct ANGLEFormatSet
ANGLEFormat swizzleFormat;
MipGenerationFunction mipGenerationFunction;
ColorReadFunction colorReadFunction;
};
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/copyimage.h"
#include "libANGLE/renderer/d3d/generatemip.h"
#include "libANGLE/renderer/d3d/loadimage.h"
......@@ -106,7 +107,8 @@ ANGLEFormatSet::ANGLEFormatSet()
rtvFormat(DXGI_FORMAT_UNKNOWN),
dsvFormat(DXGI_FORMAT_UNKNOWN),
swizzleFormat(ANGLE_FORMAT_NONE),
mipGenerationFunction(nullptr)
mipGenerationFunction(nullptr),
colorReadFunction(nullptr)
{
}
......@@ -135,7 +137,8 @@ ANGLEFormatSet::ANGLEFormatSet(ANGLEFormat format,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction)
MipGenerationFunction mipGenerationFunction,
ColorReadFunction colorReadFunction)
: format(format),
glInternalFormat(glInternalFormat),
texFormat(texFormat),
......@@ -143,7 +146,8 @@ ANGLEFormatSet::ANGLEFormatSet(ANGLEFormat format,
rtvFormat(rtvFormat),
dsvFormat(dsvFormat),
swizzleFormat(swizzleFormat),
mipGenerationFunction(mipGenerationFunction)
mipGenerationFunction(mipGenerationFunction),
colorReadFunction(colorReadFunction)
{
}
......@@ -161,7 +165,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<A8>);
GenerateMip<A8>,
ReadColor<A8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_B4G4R4A4_UNORM:
......@@ -173,7 +178,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_B4G4R4A4_UNORM,
GenerateMip<A4R4G4B4>);
GenerateMip<A4R4G4B4>,
ReadColor<A4R4G4B4, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_B5G5R5A1_UNORM:
......@@ -185,7 +191,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<A1R5G5B5>);
GenerateMip<A1R5G5B5>,
ReadColor<A1R5G5B5, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_B5G6R5_UNORM:
......@@ -197,7 +204,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R5G6B5>);
GenerateMip<R5G6B5>,
ReadColor<R5G6B5, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_B8G8R8A8_UNORM:
......@@ -209,7 +217,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_B8G8R8A8_UNORM,
GenerateMip<B8G8R8A8>);
GenerateMip<B8G8R8A8>,
ReadColor<B8G8R8A8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_BC1_UNORM:
......@@ -221,6 +230,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
nullptr,
nullptr);
return formatInfo;
}
......@@ -233,6 +243,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
nullptr,
nullptr);
return formatInfo;
}
......@@ -245,6 +256,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
nullptr,
nullptr);
return formatInfo;
}
......@@ -257,6 +269,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM,
ANGLE_FORMAT_R16G16B16A16_UNORM,
nullptr,
nullptr);
return formatInfo;
}
......@@ -269,6 +282,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM,
ANGLE_FORMAT_R16G16B16A16_UNORM,
nullptr,
nullptr);
return formatInfo;
}
......@@ -281,6 +295,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr,
nullptr);
return formatInfo;
}
......@@ -293,6 +308,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr,
nullptr);
return formatInfo;
}
......@@ -305,6 +321,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr,
nullptr);
return formatInfo;
}
......@@ -317,6 +334,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr,
nullptr);
return formatInfo;
}
......@@ -329,6 +347,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_NONE,
nullptr,
nullptr);
return formatInfo;
}
......@@ -341,7 +360,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R10G10B10A2>);
GenerateMip<R10G10B10A2>,
ReadColor<R10G10B10A2, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R10G10B10A2_UNORM:
......@@ -353,7 +373,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UNORM,
GenerateMip<R10G10B10A2>);
GenerateMip<R10G10B10A2>,
ReadColor<R10G10B10A2, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R11G11B10_FLOAT:
......@@ -365,7 +386,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R11G11B10F>);
GenerateMip<R11G11B10F>,
ReadColor<R11G11B10F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_FLOAT:
......@@ -377,7 +399,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R16G16B16A16F>);
GenerateMip<R16G16B16A16F>,
ReadColor<R16G16B16A16F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_SINT:
......@@ -389,7 +412,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT,
GenerateMip<R16G16B16A16S>);
GenerateMip<R16G16B16A16S>,
ReadColor<R16G16B16A16S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_UINT:
......@@ -401,7 +425,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R16G16B16A16>);
GenerateMip<R16G16B16A16>,
ReadColor<R16G16B16A16, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_UNORM:
......@@ -413,7 +438,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UNORM,
GenerateMip<R16G16B16A16>);
GenerateMip<R16G16B16A16>,
ReadColor<R16G16B16A16, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_FLOAT:
......@@ -425,7 +451,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R16G16F>);
GenerateMip<R16G16F>,
ReadColor<R16G16F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_SINT:
......@@ -437,7 +464,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT,
GenerateMip<R16G16S>);
GenerateMip<R16G16S>,
ReadColor<R16G16S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_UINT:
......@@ -449,7 +477,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R16G16>);
GenerateMip<R16G16>,
ReadColor<R16G16, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R16_FLOAT:
......@@ -461,7 +490,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R16F>);
GenerateMip<R16F>,
ReadColor<R16F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R16_SINT:
......@@ -473,7 +503,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT,
GenerateMip<R16S>);
GenerateMip<R16S>,
ReadColor<R16S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R16_UINT:
......@@ -485,7 +516,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT,
GenerateMip<R16>);
GenerateMip<R16>,
ReadColor<R16, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_FLOAT:
......@@ -497,7 +529,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
GenerateMip<R32G32B32A32F>);
GenerateMip<R32G32B32A32F>,
ReadColor<R32G32B32A32F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_SINT:
......@@ -509,7 +542,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT,
GenerateMip<R32G32B32A32S>);
GenerateMip<R32G32B32A32S>,
ReadColor<R32G32B32A32S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_UINT:
......@@ -521,7 +555,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT,
GenerateMip<R32G32B32A32>);
GenerateMip<R32G32B32A32>,
ReadColor<R32G32B32A32, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_FLOAT:
......@@ -533,7 +568,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
GenerateMip<R32G32F>);
GenerateMip<R32G32F>,
ReadColor<R32G32F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_SINT:
......@@ -545,7 +581,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT,
GenerateMip<R32G32S>);
GenerateMip<R32G32S>,
ReadColor<R32G32S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_UINT:
......@@ -557,7 +594,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT,
GenerateMip<R32G32>);
GenerateMip<R32G32>,
ReadColor<R32G32, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R32_FLOAT:
......@@ -569,7 +607,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
GenerateMip<R32F>);
GenerateMip<R32F>,
ReadColor<R32F, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R32_SINT:
......@@ -581,7 +620,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT,
GenerateMip<R32S>);
GenerateMip<R32S>,
ReadColor<R32S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R32_UINT:
......@@ -593,7 +633,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT,
GenerateMip<R32>);
GenerateMip<R32>,
ReadColor<R32, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_SINT:
......@@ -605,7 +646,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT,
GenerateMip<R8G8B8A8S>);
GenerateMip<R8G8B8A8S>,
ReadColor<R8G8B8A8S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_SNORM:
......@@ -617,7 +659,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8G8B8A8S>);
GenerateMip<R8G8B8A8S>,
ReadColor<R8G8B8A8S, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UINT:
......@@ -629,7 +672,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT,
GenerateMip<R8G8B8A8>);
GenerateMip<R8G8B8A8>,
ReadColor<R8G8B8A8, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM:
......@@ -641,7 +685,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8B8A8>);
GenerateMip<R8G8B8A8>,
ReadColor<R8G8B8A8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE:
......@@ -653,7 +698,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8B8A8>);
GenerateMip<R8G8B8A8>,
ReadColor<R8G8B8A8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB:
......@@ -665,7 +711,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB,
GenerateMip<R8G8B8A8>);
GenerateMip<R8G8B8A8>,
ReadColor<R8G8B8A8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE:
......@@ -677,7 +724,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8B8A8>);
GenerateMip<R8G8B8A8>,
ReadColor<R8G8B8A8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SINT:
......@@ -689,7 +737,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT,
GenerateMip<R8G8S>);
GenerateMip<R8G8S>,
ReadColor<R8G8S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SNORM:
......@@ -701,7 +750,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8G8S>);
GenerateMip<R8G8S>,
ReadColor<R8G8S, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SNORM_NONRENDERABLE:
......@@ -713,7 +763,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8G8S>);
GenerateMip<R8G8S>,
ReadColor<R8G8S, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UINT:
......@@ -725,7 +776,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT,
GenerateMip<R8G8>);
GenerateMip<R8G8>,
ReadColor<R8G8, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UNORM:
......@@ -737,7 +789,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8>);
GenerateMip<R8G8>,
ReadColor<R8G8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UNORM_NONRENDERABLE:
......@@ -749,7 +802,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8G8>);
GenerateMip<R8G8>,
ReadColor<R8G8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8_SINT:
......@@ -761,7 +815,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT,
GenerateMip<R8S>);
GenerateMip<R8S>,
ReadColor<R8S, GLint>);
return formatInfo;
}
case ANGLE_FORMAT_R8_SNORM:
......@@ -773,7 +828,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8S>);
GenerateMip<R8S>,
ReadColor<R8S, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8_SNORM_NONRENDERABLE:
......@@ -785,7 +841,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM,
GenerateMip<R8S>);
GenerateMip<R8S>,
ReadColor<R8S, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8_UINT:
......@@ -797,7 +854,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT,
GenerateMip<R8>);
GenerateMip<R8>,
ReadColor<R8, GLuint>);
return formatInfo;
}
case ANGLE_FORMAT_R8_UNORM:
......@@ -809,7 +867,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8>);
GenerateMip<R8>,
ReadColor<R8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R8_UNORM_NONRENDERABLE:
......@@ -821,7 +880,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM,
GenerateMip<R8>);
GenerateMip<R8>,
ReadColor<R8, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_R9G9B9E5_SHAREDEXP:
......@@ -833,7 +893,8 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT,
GenerateMip<R9G9B9E5>);
GenerateMip<R9G9B9E5>,
ReadColor<R9G9B9E5, GLfloat>);
return formatInfo;
}
case ANGLE_FORMAT_X24_TYPELESS_G8_UINT:
......@@ -845,6 +906,7 @@ const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT,
nullptr,
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