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