Commit 11b30612 by Jamie Madill Committed by Commit Bot

D3D11: Store ANGLEFormatSets instead of ANGLEFormats.

This saves us looking up the FormatSet repeatedly. BUG=angleproject:1455 Change-Id: I77890c1eb427e7d087ceaf194a5001b8b03585d4 Reviewed-on: https://chromium-review.googlesource.com/359084Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent aae1e4ae
......@@ -437,9 +437,8 @@ D3D11_INPUT_ELEMENT_DESC quad3DLayout[] = {
{"TEXCOORD", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0},
};
DXGI_FORMAT GetStencilSRVFormat(d3d11::ANGLEFormat angleFormat)
DXGI_FORMAT GetStencilSRVFormat(const d3d11::ANGLEFormatSet &formatSet)
{
auto formatSet = d3d11::GetANGLEFormatSet(angleFormat);
switch (formatSet.texFormat)
{
case DXGI_FORMAT_R32G8X24_TYPELESS:
......@@ -1391,7 +1390,7 @@ gl::Error Blit11::copyAndConvertImpl(const TextureHelper11 &source,
ID3D11DeviceContext *deviceContext = mRenderer->getDeviceContext();
TextureHelper11 sourceStaging;
ANGLE_TRY_RESULT(CreateStagingTexture(GL_TEXTURE_2D, source.getANGLEFormat(), sourceSize,
ANGLE_TRY_RESULT(CreateStagingTexture(GL_TEXTURE_2D, source.getFormatSet(), sourceSize,
StagingAccess::READ, device),
sourceStaging);
......@@ -1465,7 +1464,7 @@ gl::Error Blit11::copyAndConvert(const TextureHelper11 &source,
// ID3D11DevicContext::UpdateSubresource can be called
// using it's mapped data as a source
TextureHelper11 destStaging;
ANGLE_TRY_RESULT(CreateStagingTexture(GL_TEXTURE_2D, dest.getANGLEFormat(), destSize,
ANGLE_TRY_RESULT(CreateStagingTexture(GL_TEXTURE_2D, dest.getFormatSet(), destSize,
StagingAccess::READ_WRITE, device),
destStaging);
......@@ -1871,9 +1870,9 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveDepth(RenderTarget11 *depth)
gl::Box copyBox(0, 0, 0, extents.width, extents.height, 1);
auto copyFunction = GetCopyDepthStencilFunction(depth->getInternalFormat());
auto dsFormatSet = d3d11::GetANGLEFormatSet(depth->getANGLEFormat());
auto dsDxgiInfo = d3d11::GetDXGIFormatSizeInfo(dsFormatSet.texFormat);
const auto &copyFunction = GetCopyDepthStencilFunction(depth->getInternalFormat());
const auto &dsFormatSet = depth->getFormatSet();
const auto &dsDxgiInfo = d3d11::GetDXGIFormatSizeInfo(dsFormatSet.texFormat);
ID3D11Texture2D *destTex = nullptr;
......@@ -1897,7 +1896,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveDepth(RenderTarget11 *depth)
}
d3d11::SetDebugName(destTex, "resolveDepthDest");
TextureHelper11 dest = TextureHelper11::MakeAndPossess2D(destTex, depth->getANGLEFormat());
TextureHelper11 dest = TextureHelper11::MakeAndPossess2D(destTex, depth->getFormatSet());
ANGLE_TRY(copyAndConvert(mResolvedDepthStencil, 0, copyBox, extents, dest, 0, copyBox, extents,
nullptr, 0, 0, 0, 8, dsDxgiInfo.pixelBytes, copyFunction));
return dest;
......@@ -1916,8 +1915,8 @@ gl::Error Blit11::initResolveDepthStencil(const gl::Extents &extents)
releaseResolveDepthStencilResources();
}
auto resolvedFormat = d3d11::ANGLE_FORMAT_R32G32_FLOAT;
auto formatSet = d3d11::GetANGLEFormatSet(resolvedFormat);
auto resolvedFormat = d3d11::ANGLE_FORMAT_R32G32_FLOAT;
const auto &formatSet = d3d11::GetANGLEFormatSet(resolvedFormat);
D3D11_TEXTURE2D_DESC textureDesc;
textureDesc.Width = extents.width;
......@@ -1952,7 +1951,7 @@ gl::Error Blit11::initResolveDepthStencil(const gl::Extents &extents)
}
d3d11::SetDebugName(mResolvedDepthStencilRTView, "Blit11::mResolvedDepthStencilRTView");
mResolvedDepthStencil = TextureHelper11::MakeAndPossess2D(resolvedDepthStencil, resolvedFormat);
mResolvedDepthStencil = TextureHelper11::MakeAndPossess2D(resolvedDepthStencil, formatSet);
return gl::NoError();
}
......@@ -1984,7 +1983,7 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS
if (!mStencilSRV)
{
D3D11_SHADER_RESOURCE_VIEW_DESC srViewDesc;
srViewDesc.Format = GetStencilSRVFormat(depthStencil->getANGLEFormat());
srViewDesc.Format = GetStencilSRVFormat(depthStencil->getFormatSet());
srViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2DMS;
HRESULT hr = device->CreateShaderResourceView(stencilResource, &srViewDesc, &mStencilSRV);
......@@ -2042,13 +2041,13 @@ gl::ErrorOrResult<TextureHelper11> Blit11::resolveStencil(RenderTarget11 *depthS
gl::Box copyBox(0, 0, 0, extents.width, extents.height, 1);
TextureHelper11 dest;
ANGLE_TRY_RESULT(CreateStagingTexture(GL_TEXTURE_2D, depthStencil->getANGLEFormat(), extents,
ANGLE_TRY_RESULT(CreateStagingTexture(GL_TEXTURE_2D, depthStencil->getFormatSet(), extents,
StagingAccess::READ_WRITE, device),
dest);
auto copyFunction = GetCopyDepthStencilFunction(depthStencil->getInternalFormat());
auto dsFormatSet = d3d11::GetANGLEFormatSet(depthStencil->getANGLEFormat());
auto dsDxgiInfo = d3d11::GetDXGIFormatSizeInfo(dsFormatSet.texFormat);
const auto &copyFunction = GetCopyDepthStencilFunction(depthStencil->getInternalFormat());
const auto &dsFormatSet = depthStencil->getFormatSet();
const auto &dsDxgiInfo = d3d11::GetDXGIFormatSizeInfo(dsFormatSet.texFormat);
ANGLE_TRY(copyAndConvertImpl(mResolvedDepthStencil, 0, copyBox, extents, dest, copyBox, extents,
nullptr, 0, 0, 0, 8u, dsDxgiInfo.pixelBytes, copyFunction));
......
......@@ -1331,7 +1331,7 @@ gl::Error Buffer11::PackStorage::packPixels(const gl::FramebufferAttachment &rea
unsigned int srcSubresource = renderTarget->getSubresourceIndex();
TextureHelper11 srcTexture =
TextureHelper11::MakeAndReference(renderTargetResource, renderTarget->getANGLEFormat());
TextureHelper11::MakeAndReference(renderTargetResource, renderTarget->getFormatSet());
mQueuedPackCommand.reset(new PackPixelsParams(params));
......@@ -1340,7 +1340,7 @@ gl::Error Buffer11::PackStorage::packPixels(const gl::FramebufferAttachment &rea
mStagingTexture.getExtents() != srcTextureSize)
{
ANGLE_TRY_RESULT(
CreateStagingTexture(srcTexture.getTextureType(), srcTexture.getANGLEFormat(),
CreateStagingTexture(srcTexture.getTextureType(), srcTexture.getFormatSet(),
srcTextureSize, StagingAccess::READ, mRenderer->getDevice()),
mStagingTexture);
}
......
......@@ -331,8 +331,8 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
return gl::Error(GL_OUT_OF_MEMORY, "Internal render target view pointer unexpectedly null.");
}
const auto &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(
d3d11::GetANGLEFormatSet(renderTarget->getANGLEFormat()).rtvFormat);
const auto &dxgiFormatInfo =
d3d11::GetDXGIFormatInfo(renderTarget->getFormatSet().rtvFormat);
// Check if the actual format has a channel that the internal format does not and set them to the
// default values
......@@ -392,8 +392,8 @@ gl::Error Clear11::clearFramebuffer(const ClearParameters &clearParams,
return error;
}
const auto &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(
d3d11::GetANGLEFormatSet(renderTarget->getANGLEFormat()).dsvFormat);
const auto &dxgiFormatInfo =
d3d11::GetDXGIFormatInfo(renderTarget->getFormatSet().dsvFormat);
unsigned int stencilUnmasked = (stencilAttachment != nullptr) ? (1 << dxgiFormatInfo.stencilBits) - 1 : 0;
bool needMaskedStencilClear = clearParams.clearStencil && (clearParams.stencilWriteMask & stencilUnmasked) != stencilUnmasked;
......
......@@ -358,8 +358,7 @@ gl::Error Framebuffer11::blitImpl(const gl::Rectangle &sourceArea,
GLenum Framebuffer11::getRenderTargetImplementationFormat(RenderTargetD3D *renderTarget) const
{
RenderTarget11 *renderTarget11 = GetAs<RenderTarget11>(renderTarget);
return d3d11::GetANGLEFormatSet(renderTarget11->getANGLEFormat())
.fboImplementationInternalFormat;
return renderTarget11->getFormatSet().fboImplementationInternalFormat;
}
void Framebuffer11::updateColorRenderTarget(size_t colorIndex)
......
......@@ -343,7 +343,7 @@ gl::Error Image11::copyFromTexStorage(const gl::ImageIndex &imageIndex, TextureS
UINT subresourceIndex = storage11->getSubresourceIndex(imageIndex);
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(resource, storage11->getANGLEFormat());
TextureHelper11::MakeAndReference(resource, storage11->getFormatSet());
gl::Box sourceBox(0, 0, 0, mWidth, mHeight, mDepth);
return copyWithoutConversion(gl::Offset(), sourceBox, textureHelper, subresourceIndex);
......@@ -373,7 +373,7 @@ gl::Error Image11::copyFromFramebuffer(const gl::Offset &destOffset,
ASSERT(rt11->getTexture());
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(rt11->getTexture(), rt11->getANGLEFormat());
TextureHelper11::MakeAndReference(rt11->getTexture(), rt11->getFormatSet());
unsigned int sourceSubResource = rt11->getSubresourceIndex();
gl::Box sourceBox(sourceArea.x, sourceArea.y, 0, sourceArea.width, sourceArea.height, 1);
......
......@@ -23,7 +23,7 @@ class Renderer11;
class RenderTarget11 : public RenderTargetD3D
{
public:
RenderTarget11(d3d11::ANGLEFormat angleFormat);
RenderTarget11(const d3d11::ANGLEFormatSet &formatSet);
virtual ~RenderTarget11();
virtual ID3D11Resource *getTexture() const = 0;
......@@ -37,11 +37,11 @@ class RenderTarget11 : public RenderTargetD3D
void signalDirty() override;
angle::BroadcastChannel *getBroadcastChannel() { return &mBroadcastChannel; }
d3d11::ANGLEFormat getANGLEFormat() const { return mANGLEFormat; }
const d3d11::ANGLEFormatSet &getFormatSet() const { return mFormatSet; }
protected:
angle::BroadcastChannel mBroadcastChannel;
d3d11::ANGLEFormat mANGLEFormat;
const d3d11::ANGLEFormatSet &mFormatSet;
};
class TextureRenderTarget11 : public RenderTarget11
......@@ -53,7 +53,7 @@ class TextureRenderTarget11 : public RenderTarget11
ID3D11ShaderResourceView *srv,
ID3D11ShaderResourceView *blitSRV,
GLenum internalFormat,
d3d11::ANGLEFormat angleFormat,
const d3d11::ANGLEFormatSet &formatSet,
GLsizei width,
GLsizei height,
GLsizei depth,
......@@ -62,7 +62,7 @@ class TextureRenderTarget11 : public RenderTarget11
ID3D11Resource *resource,
ID3D11ShaderResourceView *srv,
GLenum internalFormat,
d3d11::ANGLEFormat angleFormat,
const d3d11::ANGLEFormatSet &formatSet,
GLsizei width,
GLsizei height,
GLsizei depth,
......@@ -122,12 +122,7 @@ class SurfaceRenderTarget11 : public RenderTarget11
unsigned int getSubresourceIndex() const override;
private:
// The internal versions of the functions are needed so that they can be safely called
// from the constructor.
GLenum getInternalFormatInternal() const;
SwapChain11 *mSwapChain;
Renderer11 *mRenderer;
bool mDepth;
};
......
......@@ -3143,9 +3143,8 @@ gl::Error Renderer11::createRenderTarget(int width, int height, GLenum format, G
return gl::Error(GL_OUT_OF_MEMORY, "Failed to create render target depth stencil view, result: 0x%X.", result);
}
*outRT =
new TextureRenderTarget11(dsv, texture, srv, format, formatInfo.formatSet->format,
width, height, 1, supportedSamples);
*outRT = new TextureRenderTarget11(dsv, texture, srv, format, *formatInfo.formatSet,
width, height, 1, supportedSamples);
SafeRelease(dsv);
}
......@@ -3173,9 +3172,9 @@ gl::Error Renderer11::createRenderTarget(int width, int height, GLenum format, G
mDeviceContext->ClearRenderTargetView(rtv, clearValues);
}
*outRT = new TextureRenderTarget11(rtv, texture, srv, blitSRV, format,
formatInfo.formatSet->format, width, height, 1,
supportedSamples);
*outRT =
new TextureRenderTarget11(rtv, texture, srv, blitSRV, format, *formatInfo.formatSet,
width, height, 1, supportedSamples);
SafeRelease(rtv);
}
......@@ -3190,9 +3189,9 @@ gl::Error Renderer11::createRenderTarget(int width, int height, GLenum format, G
}
else
{
*outRT = new TextureRenderTarget11(static_cast<ID3D11RenderTargetView *>(nullptr), nullptr,
nullptr, nullptr, format, d3d11::ANGLE_FORMAT_NONE,
width, height, 1, supportedSamples);
*outRT = new TextureRenderTarget11(
static_cast<ID3D11RenderTargetView *>(nullptr), nullptr, nullptr, nullptr, format,
d3d11::GetANGLEFormatSet(d3d11::ANGLE_FORMAT_NONE), width, height, 1, supportedSamples);
}
return gl::Error(GL_NO_ERROR);
......@@ -3562,7 +3561,7 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
ASSERT(rt11->getTexture());
TextureHelper11 textureHelper =
TextureHelper11::MakeAndReference(rt11->getTexture(), rt11->getANGLEFormat());
TextureHelper11::MakeAndReference(rt11->getTexture(), rt11->getFormatSet());
unsigned int sourceSubResource = rt11->getSubresourceIndex();
const gl::Extents &texSize = textureHelper.getExtents();
......@@ -3596,8 +3595,8 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
gl::Extents safeSize(safeArea.width, safeArea.height, 1);
TextureHelper11 stagingHelper;
ANGLE_TRY_RESULT(
CreateStagingTexture(textureHelper.getTextureType(), textureHelper.getANGLEFormat(),
safeSize, StagingAccess::READ, mDevice),
CreateStagingTexture(textureHelper.getTextureType(), textureHelper.getFormatSet(), safeSize,
StagingAccess::READ, mDevice),
stagingHelper);
TextureHelper11 resolvedTextureHelper;
......@@ -3634,7 +3633,7 @@ gl::Error Renderer11::readFromAttachment(const gl::FramebufferAttachment &srcAtt
mDeviceContext->ResolveSubresource(resolveTex2D, 0, textureHelper.getTexture2D(),
sourceSubResource, textureHelper.getFormat());
resolvedTextureHelper =
TextureHelper11::MakeAndReference(resolveTex2D, textureHelper.getANGLEFormat());
TextureHelper11::MakeAndReference(resolveTex2D, textureHelper.getFormatSet());
sourceSubResource = 0;
srcTexture = &resolvedTextureHelper;
......@@ -3697,7 +3696,7 @@ gl::Error Renderer11::packPixels(const TextureHelper11 &textureHelper,
uint8_t *source = static_cast<uint8_t *>(mapping.pData);
int inputPitch = static_cast<int>(mapping.RowPitch);
const auto &angleFormatInfo = d3d11::GetANGLEFormatSet(textureHelper.getANGLEFormat());
const auto &angleFormatInfo = textureHelper.getFormatSet();
ASSERT(angleFormatInfo.glInternalFormat != GL_NONE);
const gl::InternalFormat &sourceFormatInfo =
gl::GetInternalFormatInfo(angleFormatInfo.glInternalFormat);
......@@ -3734,7 +3733,7 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
}
TextureHelper11 drawTexture = TextureHelper11::MakeAndReference(
drawRenderTarget11->getTexture(), drawRenderTarget11->getANGLEFormat());
drawRenderTarget11->getTexture(), drawRenderTarget11->getFormatSet());
unsigned int drawSubresource = drawRenderTarget11->getSubresourceIndex();
ID3D11RenderTargetView *drawRTV = drawRenderTarget11->getRenderTargetView();
ID3D11DepthStencilView *drawDSV = drawRenderTarget11->getDepthStencilView();
......@@ -3756,7 +3755,7 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
if (!stencilBlit)
{
const auto &readFormatSet = d3d11::GetANGLEFormatSet(readTexture.getANGLEFormat());
const auto &readFormatSet = readTexture.getFormatSet();
D3D11_SHADER_RESOURCE_VIEW_DESC viewDesc;
viewDesc.Format = readFormatSet.srvFormat;
......@@ -3778,7 +3777,7 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
{
ASSERT(readRenderTarget11);
readTexture = TextureHelper11::MakeAndReference(readRenderTarget11->getTexture(),
readRenderTarget11->getANGLEFormat());
readRenderTarget11->getFormatSet());
readSubresource = readRenderTarget11->getSubresourceIndex();
readSRV = readRenderTarget11->getBlitShaderResourceView();
if (readSRV == nullptr)
......@@ -3860,7 +3859,7 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
const auto &destFormatInfo = gl::GetInternalFormatInfo(drawRenderTarget->getInternalFormat());
const auto &srcFormatInfo = gl::GetInternalFormatInfo(readRenderTarget->getInternalFormat());
const auto &formatSet = d3d11::GetANGLEFormatSet(drawRenderTarget11->getANGLEFormat());
const auto &formatSet = drawRenderTarget11->getFormatSet();
const DXGI_FORMAT drawDXGIFormat = colorBlit ? formatSet.rtvFormat : formatSet.dsvFormat;
const auto &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(drawDXGIFormat);
......@@ -3898,7 +3897,7 @@ gl::Error Renderer11::blitRenderbufferRect(const gl::Rectangle &readRectIn,
bool partialDSBlit = (dxgiFormatInfo.depthBits > 0 && depthBlit) != (dxgiFormatInfo.stencilBits > 0 && stencilBlit);
if (readRenderTarget11->getANGLEFormat() == drawRenderTarget11->getANGLEFormat() &&
if (readRenderTarget11->getFormatSet().format == drawRenderTarget11->getFormatSet().format &&
!stretchRequired && !outOfBounds && !flipRequired && !partialDSBlit &&
!colorMaskingNeeded && (!(depthBlit || stencilBlit) || wholeBufferCopy))
{
......@@ -4042,7 +4041,7 @@ Renderer11::resolveMultisampledTexture(RenderTarget11 *renderTarget, bool depth,
return mBlit->resolveStencil(renderTarget, depth);
}
const auto &formatSet = d3d11::GetANGLEFormatSet(renderTarget->getANGLEFormat());
const auto &formatSet = renderTarget->getFormatSet();
ASSERT(renderTarget->getSamples() > 1);
......@@ -4069,7 +4068,7 @@ Renderer11::resolveMultisampledTexture(RenderTarget11 *renderTarget, bool depth,
mDeviceContext->ResolveSubresource(resolveTexture, 0, renderTarget->getTexture(),
renderTarget->getSubresourceIndex(), formatSet.texFormat);
return TextureHelper11::MakeAndPossess2D(resolveTexture, renderTarget->getANGLEFormat());
return TextureHelper11::MakeAndPossess2D(resolveTexture, renderTarget->getFormatSet());
}
bool Renderer11::getLUID(LUID *adapterLuid) const
......
......@@ -327,9 +327,9 @@ gl::Error TextureStorage11::getSRVLevels(GLint baseLevel,
return gl::NoError();
}
d3d11::ANGLEFormat TextureStorage11::getANGLEFormat() const
const d3d11::ANGLEFormatSet &TextureStorage11::getFormatSet() const
{
return mTextureFormatSet->format;
return *mTextureFormatSet;
}
gl::Error TextureStorage11::generateSwizzles(const gl::SwizzleState &swizzleTarget)
......@@ -430,8 +430,8 @@ gl::Error TextureStorage11::updateSubresourceLevel(ID3D11Resource *srcTexture,
{
// CopySubresourceRegion cannot copy partial depth stencils, use the blitter instead
Blit11 *blitter = mRenderer->getBlitter();
TextureHelper11 source = TextureHelper11::MakeAndReference(srcTexture, getANGLEFormat());
TextureHelper11 dest = TextureHelper11::MakeAndReference(dstTexture, getANGLEFormat());
TextureHelper11 source = TextureHelper11::MakeAndReference(srcTexture, getFormatSet());
TextureHelper11 dest = TextureHelper11::MakeAndReference(dstTexture, getFormatSet());
return blitter->copyDepthStencil(source, sourceSubresource, copyArea, texSize, dest,
dstSubresource, copyArea, texSize, nullptr);
}
......@@ -1203,8 +1203,8 @@ gl::Error TextureStorage11_2D::getRenderTarget(const gl::ImageIndex &index, Rend
ASSERT(SUCCEEDED(result));
mLevelZeroRenderTarget = new TextureRenderTarget11(
rtv, mLevelZeroTexture, nullptr, nullptr, mInternalFormat,
mTextureFormatSet->format, getLevelWidth(level), getLevelHeight(level), 1, 0);
rtv, mLevelZeroTexture, nullptr, nullptr, mInternalFormat, getFormatSet(),
getLevelWidth(level), getLevelHeight(level), 1, 0);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
......@@ -1233,9 +1233,9 @@ gl::Error TextureStorage11_2D::getRenderTarget(const gl::ImageIndex &index, Rend
result);
}
mRenderTarget[level] = new TextureRenderTarget11(
rtv, texture, srv, blitSRV, mInternalFormat, mTextureFormatSet->format,
getLevelWidth(level), getLevelHeight(level), 1, 0);
mRenderTarget[level] =
new TextureRenderTarget11(rtv, texture, srv, blitSRV, mInternalFormat, getFormatSet(),
getLevelWidth(level), getLevelHeight(level), 1, 0);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
......@@ -1265,7 +1265,7 @@ gl::Error TextureStorage11_2D::getRenderTarget(const gl::ImageIndex &index, Rend
}
mRenderTarget[level] =
new TextureRenderTarget11(dsv, texture, srv, mInternalFormat, mTextureFormatSet->format,
new TextureRenderTarget11(dsv, texture, srv, mInternalFormat, getFormatSet(),
getLevelWidth(level), getLevelHeight(level), 1, 0);
// RenderTarget will take ownership of these resources
......@@ -1567,7 +1567,7 @@ TextureStorage11_EGLImage::TextureStorage11_EGLImage(Renderer11 *renderer, EGLIm
mCurrentRenderTarget = reinterpret_cast<uintptr_t>(renderTarget11);
mMipLevels = 1;
mTextureFormatSet = &d3d11::GetANGLEFormatSet(renderTarget11->getANGLEFormat());
mTextureFormatSet = &renderTarget11->getFormatSet();
mSwizzleFormatSet = &d3d11::GetANGLEFormatSet(mTextureFormatSet->swizzleFormat);
mTextureWidth = renderTarget11->getWidth();
mTextureHeight = renderTarget11->getHeight();
......@@ -2362,8 +2362,8 @@ gl::Error TextureStorage11_Cube::getRenderTarget(const gl::ImageIndex &index,
ASSERT(SUCCEEDED(result));
mLevelZeroRenderTarget[faceIndex] = new TextureRenderTarget11(
rtv, mLevelZeroTexture, nullptr, nullptr, mInternalFormat,
mTextureFormatSet->format, getLevelWidth(level), getLevelHeight(level), 1, 0);
rtv, mLevelZeroTexture, nullptr, nullptr, mInternalFormat, getFormatSet(),
getLevelWidth(level), getLevelHeight(level), 1, 0);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
......@@ -2425,8 +2425,8 @@ gl::Error TextureStorage11_Cube::getRenderTarget(const gl::ImageIndex &index,
d3d11::SetDebugName(rtv, "TexStorageCube.RenderTargetRTV");
mRenderTarget[faceIndex][level] = new TextureRenderTarget11(
rtv, texture, srv, blitSRV, mInternalFormat, mTextureFormatSet->format,
getLevelWidth(level), getLevelHeight(level), 1, 0);
rtv, texture, srv, blitSRV, mInternalFormat, getFormatSet(), getLevelWidth(level),
getLevelHeight(level), 1, 0);
// RenderTarget will take ownership of these resources
SafeRelease(rtv);
......@@ -2459,9 +2459,9 @@ gl::Error TextureStorage11_Cube::getRenderTarget(const gl::ImageIndex &index,
d3d11::SetDebugName(dsv, "TexStorageCube.RenderTargetDSV");
mRenderTarget[faceIndex][level] = new TextureRenderTarget11(
dsv, texture, srv, mInternalFormat, mTextureFormatSet->format, getLevelWidth(level),
getLevelHeight(level), 1, 0);
mRenderTarget[faceIndex][level] =
new TextureRenderTarget11(dsv, texture, srv, mInternalFormat, getFormatSet(),
getLevelWidth(level), getLevelHeight(level), 1, 0);
// RenderTarget will take ownership of these resources
SafeRelease(dsv);
......@@ -2912,7 +2912,7 @@ gl::Error TextureStorage11_3D::getRenderTarget(const gl::ImageIndex &index, Rend
d3d11::SetDebugName(rtv, "TexStorage3D.RTV");
mLevelRenderTargets[mipLevel] = new TextureRenderTarget11(
rtv, texture, srv, blitSRV, mInternalFormat, mTextureFormatSet->format,
rtv, texture, srv, blitSRV, mInternalFormat, getFormatSet(),
getLevelWidth(mipLevel), getLevelHeight(mipLevel), getLevelDepth(mipLevel), 0);
// RenderTarget will take ownership of these resources
......@@ -2969,7 +2969,7 @@ gl::Error TextureStorage11_3D::getRenderTarget(const gl::ImageIndex &index, Rend
d3d11::SetDebugName(rtv, "TexStorage3D.LayerRTV");
mLevelLayerRenderTargets[key] = new TextureRenderTarget11(
rtv, texture, srv, blitSRV, mInternalFormat, mTextureFormatSet->format,
rtv, texture, srv, blitSRV, mInternalFormat, getFormatSet(),
getLevelWidth(mipLevel), getLevelHeight(mipLevel), 1, 0);
// RenderTarget will take ownership of these resources
......@@ -3391,7 +3391,7 @@ gl::Error TextureStorage11_2DArray::getRenderTarget(const gl::ImageIndex &index,
d3d11::SetDebugName(rtv, "TexStorage2DArray.RenderTargetRTV");
mRenderTargets[key] = new TextureRenderTarget11(
rtv, texture, srv, blitSRV, mInternalFormat, mTextureFormatSet->format,
rtv, texture, srv, blitSRV, mInternalFormat, getFormatSet(),
getLevelWidth(mipLevel), getLevelHeight(mipLevel), 1, 0);
// RenderTarget will take ownership of these resources
......@@ -3425,9 +3425,9 @@ gl::Error TextureStorage11_2DArray::getRenderTarget(const gl::ImageIndex &index,
d3d11::SetDebugName(dsv, "TexStorage2DArray.RenderTargetDSV");
mRenderTargets[key] = new TextureRenderTarget11(
dsv, texture, srv, mInternalFormat, mTextureFormatSet->format,
getLevelWidth(mipLevel), getLevelHeight(mipLevel), 1, 0);
mRenderTargets[key] =
new TextureRenderTarget11(dsv, texture, srv, mInternalFormat, getFormatSet(),
getLevelWidth(mipLevel), getLevelHeight(mipLevel), 1, 0);
// RenderTarget will take ownership of these resources
SafeRelease(dsv);
......
......@@ -79,7 +79,7 @@ class TextureStorage11 : public TextureStorage
gl::Error getSRVLevels(GLint baseLevel, GLint maxLevel, ID3D11ShaderResourceView **outSRV);
d3d11::ANGLEFormat getANGLEFormat() const;
const d3d11::ANGLEFormatSet &getFormatSet() const;
protected:
TextureStorage11(Renderer11 *renderer, UINT bindFlags, UINT miscFlags);
......
......@@ -1557,7 +1557,7 @@ void InitConstantBufferDesc(D3D11_BUFFER_DESC *constantBufferDescription, size_t
TextureHelper11::TextureHelper11()
: mTextureType(GL_NONE),
mFormat(DXGI_FORMAT_UNKNOWN),
mANGLEFormat(d3d11::ANGLE_FORMAT_NONE),
mFormatSet(nullptr),
mSampleCount(0),
mTexture2D(nullptr),
mTexture3D(nullptr)
......@@ -1568,7 +1568,7 @@ TextureHelper11::TextureHelper11(TextureHelper11 &&toCopy)
: mTextureType(toCopy.mTextureType),
mExtents(toCopy.mExtents),
mFormat(toCopy.mFormat),
mANGLEFormat(toCopy.mANGLEFormat),
mFormatSet(toCopy.mFormatSet),
mSampleCount(toCopy.mSampleCount),
mTexture2D(toCopy.mTexture2D),
mTexture3D(toCopy.mTexture3D)
......@@ -1578,10 +1578,10 @@ TextureHelper11::TextureHelper11(TextureHelper11 &&toCopy)
// static
TextureHelper11 TextureHelper11::MakeAndReference(ID3D11Resource *genericResource,
d3d11::ANGLEFormat angleFormat)
const d3d11::ANGLEFormatSet &formatSet)
{
TextureHelper11 newHelper;
newHelper.mANGLEFormat = angleFormat;
newHelper.mFormatSet = &formatSet;
newHelper.mTexture2D = d3d11::DynamicCastComObject<ID3D11Texture2D>(genericResource);
newHelper.mTexture3D = d3d11::DynamicCastComObject<ID3D11Texture3D>(genericResource);
newHelper.mTextureType = newHelper.mTexture2D ? GL_TEXTURE_2D : GL_TEXTURE_3D;
......@@ -1591,10 +1591,10 @@ TextureHelper11 TextureHelper11::MakeAndReference(ID3D11Resource *genericResourc
// static
TextureHelper11 TextureHelper11::MakeAndPossess2D(ID3D11Texture2D *texToOwn,
d3d11::ANGLEFormat angleFormat)
const d3d11::ANGLEFormatSet &formatSet)
{
TextureHelper11 newHelper;
newHelper.mANGLEFormat = angleFormat;
newHelper.mFormatSet = &formatSet;
newHelper.mTexture2D = texToOwn;
newHelper.mTextureType = GL_TEXTURE_2D;
newHelper.initDesc();
......@@ -1603,10 +1603,10 @@ TextureHelper11 TextureHelper11::MakeAndPossess2D(ID3D11Texture2D *texToOwn,
// static
TextureHelper11 TextureHelper11::MakeAndPossess3D(ID3D11Texture3D *texToOwn,
d3d11::ANGLEFormat angleFormat)
const d3d11::ANGLEFormatSet &formatSet)
{
TextureHelper11 newHelper;
newHelper.mANGLEFormat = angleFormat;
newHelper.mFormatSet = &formatSet;
newHelper.mTexture3D = texToOwn;
newHelper.mTextureType = GL_TEXTURE_3D;
newHelper.initDesc();
......@@ -1639,7 +1639,7 @@ void TextureHelper11::initDesc()
mFormat = desc3D.Format;
mSampleCount = 1;
}
ASSERT(mFormat == d3d11::GetANGLEFormatSet(mANGLEFormat).texFormat);
ASSERT(mFormatSet && mFormat == mFormatSet->texFormat);
}
TextureHelper11::~TextureHelper11()
......@@ -1662,10 +1662,10 @@ TextureHelper11 &TextureHelper11::operator=(TextureHelper11 &&texture)
mTextureType = texture.mTextureType;
mExtents = texture.mExtents;
mFormat = texture.mFormat;
mANGLEFormat = texture.mANGLEFormat;
mFormatSet = texture.mFormatSet;
mSampleCount = texture.mSampleCount;
mTexture2D = texture.mTexture2D;
mTexture3D = texture.mTexture3D;
mTexture3D = texture.mTexture3D;
texture.reset();
return *this;
}
......@@ -1675,6 +1675,7 @@ void TextureHelper11::reset()
mTextureType = GL_NONE;
mExtents = gl::Extents();
mFormat = DXGI_FORMAT_UNKNOWN;
mFormatSet = nullptr;
mSampleCount = 0;
mTexture2D = nullptr;
mTexture3D = nullptr;
......@@ -1686,13 +1687,11 @@ bool TextureHelper11::valid() const
}
gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
d3d11::ANGLEFormat angleFormat,
const d3d11::ANGLEFormatSet &formatSet,
const gl::Extents &size,
StagingAccess readAndWriteAccess,
ID3D11Device *device)
{
const auto &formatSet = d3d11::GetANGLEFormatSet(angleFormat);
if (textureType == GL_TEXTURE_2D)
{
D3D11_TEXTURE2D_DESC stagingDesc;
......@@ -1721,7 +1720,7 @@ gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
result);
}
return TextureHelper11::MakeAndPossess2D(stagingTex, angleFormat);
return TextureHelper11::MakeAndPossess2D(stagingTex, formatSet);
}
ASSERT(textureType == GL_TEXTURE_3D);
......@@ -1744,7 +1743,7 @@ gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
result);
}
return TextureHelper11::MakeAndPossess3D(stagingTex, angleFormat);
return TextureHelper11::MakeAndPossess3D(stagingTex, formatSet);
}
bool UsePresentPathFast(const Renderer11 *renderer,
......
......@@ -370,16 +370,16 @@ class TextureHelper11 : angle::NonCopyable
TextureHelper11 &operator=(TextureHelper11 &&texture);
static TextureHelper11 MakeAndReference(ID3D11Resource *genericResource,
d3d11::ANGLEFormat angleFormat);
const d3d11::ANGLEFormatSet &formatSet);
static TextureHelper11 MakeAndPossess2D(ID3D11Texture2D *texToOwn,
d3d11::ANGLEFormat angleFormat);
const d3d11::ANGLEFormatSet &formatSet);
static TextureHelper11 MakeAndPossess3D(ID3D11Texture3D *texToOwn,
d3d11::ANGLEFormat angleFormat);
const d3d11::ANGLEFormatSet &formatSet);
GLenum getTextureType() const { return mTextureType; }
gl::Extents getExtents() const { return mExtents; }
DXGI_FORMAT getFormat() const { return mFormat; }
d3d11::ANGLEFormat getANGLEFormat() const { return mANGLEFormat; }
const d3d11::ANGLEFormatSet &getFormatSet() const { return *mFormatSet; }
int getSampleCount() const { return mSampleCount; }
ID3D11Texture2D *getTexture2D() const { return mTexture2D; }
ID3D11Texture3D *getTexture3D() const { return mTexture3D; }
......@@ -393,7 +393,7 @@ class TextureHelper11 : angle::NonCopyable
GLenum mTextureType;
gl::Extents mExtents;
DXGI_FORMAT mFormat;
d3d11::ANGLEFormat mANGLEFormat;
const d3d11::ANGLEFormatSet *mFormatSet;
int mSampleCount;
ID3D11Texture2D *mTexture2D;
ID3D11Texture3D *mTexture3D;
......@@ -406,7 +406,7 @@ enum class StagingAccess
};
gl::ErrorOrResult<TextureHelper11> CreateStagingTexture(GLenum textureType,
d3d11::ANGLEFormat angleFormat,
const d3d11::ANGLEFormatSet &formatSet,
const gl::Extents &size,
StagingAccess readAndWriteAccess,
ID3D11Device *device);
......
......@@ -38,7 +38,7 @@ struct LoadImageFunctionInfo
bool requiresConversion;
};
struct ANGLEFormatSet
struct ANGLEFormatSet final : angle::NonCopyable
{
ANGLEFormatSet();
ANGLEFormatSet(ANGLEFormat format,
......@@ -52,8 +52,6 @@ struct ANGLEFormatSet
ANGLEFormat swizzleFormat,
MipGenerationFunction mipGenerationFunction,
ColorReadFunction colorReadFunction);
ANGLEFormatSet(const ANGLEFormatSet &) = default;
ANGLEFormatSet &operator=(const ANGLEFormatSet &) = default;
ANGLEFormat format;
......
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