Commit 8ec383e6 by Jamie Madill Committed by Commit Bot

Use array template aliases in TextureStorage11.

This cleans up some of the iteration logic. BUG=angleproject:2151 Change-Id: I8d80a8d732ee808babbb4859290b648b4fa67b4d Reviewed-on: https://chromium-review.googlesource.com/673138 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 136a2742
......@@ -325,7 +325,9 @@ using UniformBlockBindingMask = angle::BitSet<IMPLEMENTATION_MAX_COMBINED_SHADER
using DrawBufferMask = angle::BitSet<IMPLEMENTATION_MAX_DRAW_BUFFERS>;
using ContextID = uintptr_t;
}
constexpr size_t CUBE_FACE_COUNT = 6;
} // namespace gl
namespace rx
{
......
......@@ -374,7 +374,7 @@ gl::Error TextureStorage11::generateSwizzles(const gl::Context *context,
void TextureStorage11::markLevelDirty(int mipLevel)
{
if (mipLevel >= 0 && static_cast<unsigned int>(mipLevel) < ArraySize(mSwizzleCache))
if (mipLevel >= 0 && static_cast<size_t>(mipLevel) < mSwizzleCache.size())
{
// The default constructor of SwizzleState has GL_INVALID_INDEX for all channels which is
// not a valid swizzle combination
......@@ -394,9 +394,9 @@ void TextureStorage11::markLevelDirty(int mipLevel)
void TextureStorage11::markDirty()
{
for (unsigned int mipLevel = 0; mipLevel < ArraySize(mSwizzleCache); mipLevel++)
for (size_t mipLevel = 0; mipLevel < mSwizzleCache.size(); ++mipLevel)
{
markLevelDirty(mipLevel);
markLevelDirty(static_cast<int>(mipLevel));
}
}
......@@ -1633,14 +1633,14 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer11 *renderer,
{
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{
for (unsigned int face = 0; face < CUBE_FACE_COUNT; face++)
for (unsigned int face = 0; face < gl::CUBE_FACE_COUNT; face++)
{
mAssociatedImages[face][level] = nullptr;
mRenderTarget[face][level] = nullptr;
}
}
for (unsigned int face = 0; face < CUBE_FACE_COUNT; face++)
for (unsigned int face = 0; face < gl::CUBE_FACE_COUNT; face++)
{
mLevelZeroRenderTarget[face] = nullptr;
}
......@@ -1662,7 +1662,7 @@ gl::Error TextureStorage11_Cube::onDestroy(const gl::Context *context)
{
for (unsigned int level = 0; level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; level++)
{
for (unsigned int face = 0; face < CUBE_FACE_COUNT; face++)
for (unsigned int face = 0; face < gl::CUBE_FACE_COUNT; face++)
{
if (mAssociatedImages[face][level] != nullptr)
{
......@@ -1804,11 +1804,11 @@ void TextureStorage11_Cube::associateImage(Image11 *image, const gl::ImageIndex
const GLint layerTarget = index.layerIndex;
ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(CUBE_FACE_COUNT));
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
if (0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS)
{
if (0 <= layerTarget && layerTarget < static_cast<GLint>(CUBE_FACE_COUNT))
if (0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT))
{
mAssociatedImages[layerTarget][level] = image;
}
......@@ -1822,7 +1822,7 @@ void TextureStorage11_Cube::verifyAssociatedImageValid(const gl::ImageIndex &ind
const GLint layerTarget = index.layerIndex;
ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(CUBE_FACE_COUNT));
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
// This validation check should never return false. It means the Image/TextureStorage
// association is broken.
ASSERT(mAssociatedImages[layerTarget][level] == expectedImage);
......@@ -1835,7 +1835,7 @@ void TextureStorage11_Cube::disassociateImage(const gl::ImageIndex &index, Image
const GLint layerTarget = index.layerIndex;
ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(CUBE_FACE_COUNT));
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
ASSERT(mAssociatedImages[layerTarget][level] == expectedImage);
mAssociatedImages[layerTarget][level] = nullptr;
}
......@@ -1850,11 +1850,11 @@ gl::Error TextureStorage11_Cube::releaseAssociatedImage(const gl::Context *conte
const GLint layerTarget = index.layerIndex;
ASSERT(0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS);
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(CUBE_FACE_COUNT));
ASSERT(0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT));
if ((0 <= level && level < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS))
{
if (0 <= layerTarget && layerTarget < static_cast<GLint>(CUBE_FACE_COUNT))
if (0 <= layerTarget && layerTarget < static_cast<GLint>(gl::CUBE_FACE_COUNT))
{
// No need to let the old Image recover its data, if it is also the incoming Image.
if (mAssociatedImages[layerTarget][level] != nullptr &&
......@@ -1920,7 +1920,7 @@ gl::Error TextureStorage11_Cube::ensureTextureExists(int mipLevels)
desc.Width = mTextureWidth;
desc.Height = mTextureHeight;
desc.MipLevels = mipLevels;
desc.ArraySize = CUBE_FACE_COUNT;
desc.ArraySize = gl::CUBE_FACE_COUNT;
desc.Format = mFormatInfo.texFormat;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
......@@ -1970,7 +1970,7 @@ gl::Error TextureStorage11_Cube::getRenderTarget(const gl::Context *context,
const int level = index.mipIndex;
ASSERT(level >= 0 && level < getLevelCount());
ASSERT(faceIndex >= 0 && faceIndex < static_cast<GLint>(CUBE_FACE_COUNT));
ASSERT(faceIndex >= 0 && faceIndex < static_cast<GLint>(gl::CUBE_FACE_COUNT));
if (!mRenderTarget[faceIndex][level])
{
......@@ -2089,7 +2089,7 @@ gl::Error TextureStorage11_Cube::createSRV(const gl::Context *context,
srvDesc.Texture2DArray.MostDetailedMip = mTopLevel + baseLevel;
srvDesc.Texture2DArray.MipLevels = mipLevels;
srvDesc.Texture2DArray.FirstArraySlice = 0;
srvDesc.Texture2DArray.ArraySize = CUBE_FACE_COUNT;
srvDesc.Texture2DArray.ArraySize = gl::CUBE_FACE_COUNT;
}
else
{
......@@ -2139,7 +2139,7 @@ gl::Error TextureStorage11_Cube::getSwizzleTexture(const TextureHelper11 **outTe
desc.Width = mTextureWidth;
desc.Height = mTextureHeight;
desc.MipLevels = mMipLevels;
desc.ArraySize = CUBE_FACE_COUNT;
desc.ArraySize = gl::CUBE_FACE_COUNT;
desc.Format = format.texFormat;
desc.SampleDesc.Count = 1;
desc.SampleDesc.Quality = 0;
......@@ -2173,7 +2173,7 @@ gl::Error TextureStorage11_Cube::getSwizzleRenderTarget(int mipLevel,
rtvDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2DARRAY;
rtvDesc.Texture2DArray.MipSlice = mTopLevel + mipLevel;
rtvDesc.Texture2DArray.FirstArraySlice = 0;
rtvDesc.Texture2DArray.ArraySize = CUBE_FACE_COUNT;
rtvDesc.Texture2DArray.ArraySize = gl::CUBE_FACE_COUNT;
ANGLE_TRY(mRenderer->allocateResource(rtvDesc, mSwizzleTexture.get(),
&mSwizzleRenderTargets[mipLevel]));
......
......@@ -34,6 +34,12 @@ class SwapChain11;
class Image11;
struct Renderer11DeviceCaps;
template <typename T>
using TexLevelArray = std::array<T, gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS>;
template <typename T>
using CubeFaceArray = std::array<T, gl::CUBE_FACE_COUNT>;
class TextureStorage11 : public TextureStorage
{
public:
......@@ -149,7 +155,7 @@ class TextureStorage11 : public TextureStorage
unsigned int mTextureHeight;
unsigned int mTextureDepth;
gl::SwizzleState mSwizzleCache[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<gl::SwizzleState> mSwizzleCache;
TextureHelper11 mDropStencilTexture;
private:
......@@ -174,8 +180,8 @@ class TextureStorage11 : public TextureStorage
const d3d11::SharedSRV **outSRV);
SRVCache mSrvCache;
std::array<d3d11::SharedSRV, gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS> mLevelSRVs;
std::array<d3d11::SharedSRV, gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS> mLevelBlitSRVs;
TexLevelArray<d3d11::SharedSRV> mLevelSRVs;
TexLevelArray<d3d11::SharedSRV> mLevelBlitSRVs;
};
class TextureStorage11_2D : public TextureStorage11
......@@ -222,7 +228,7 @@ class TextureStorage11_2D : public TextureStorage11
d3d11::SharedSRV *outSRV) const override;
TextureHelper11 mTexture;
std::unique_ptr<RenderTarget11> mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<std::unique_ptr<RenderTarget11>> mRenderTarget;
bool mHasKeyedMutex;
// These are members related to the zero max-LOD workaround.
......@@ -240,9 +246,9 @@ class TextureStorage11_2D : public TextureStorage11
// Swizzle-related variables
TextureHelper11 mSwizzleTexture;
d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<d3d11::RenderTargetView> mSwizzleRenderTargets;
Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<Image11 *> mAssociatedImages;
};
class TextureStorage11_External : public TextureStorage11
......@@ -393,21 +399,18 @@ class TextureStorage11_Cube : public TextureStorage11
DXGI_FORMAT resourceFormat,
d3d11::SharedSRV *srv) const;
static const size_t CUBE_FACE_COUNT = 6;
TextureHelper11 mTexture;
std::unique_ptr<RenderTarget11> mRenderTarget[CUBE_FACE_COUNT]
[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
CubeFaceArray<TexLevelArray<std::unique_ptr<RenderTarget11>>> mRenderTarget;
// Level-zero workaround members. See TextureStorage11_2D's workaround members for a description.
TextureHelper11 mLevelZeroTexture;
std::unique_ptr<RenderTarget11> mLevelZeroRenderTarget[CUBE_FACE_COUNT];
CubeFaceArray<std::unique_ptr<RenderTarget11>> mLevelZeroRenderTarget;
bool mUseLevelZeroTexture;
TextureHelper11 mSwizzleTexture;
d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<d3d11::RenderTargetView> mSwizzleRenderTargets;
Image11 *mAssociatedImages[CUBE_FACE_COUNT][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
CubeFaceArray<TexLevelArray<Image11 *>> mAssociatedImages;
};
class TextureStorage11_3D : public TextureStorage11
......@@ -448,13 +451,13 @@ class TextureStorage11_3D : public TextureStorage11
typedef std::pair<int, int> LevelLayerKey;
std::map<LevelLayerKey, std::unique_ptr<RenderTarget11>> mLevelLayerRenderTargets;
std::unique_ptr<RenderTarget11> mLevelRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<std::unique_ptr<RenderTarget11>> mLevelRenderTargets;
TextureHelper11 mTexture;
TextureHelper11 mSwizzleTexture;
d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<d3d11::RenderTargetView> mSwizzleRenderTargets;
Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<Image11 *> mAssociatedImages;
};
class TextureStorage11_2DArray : public TextureStorage11
......@@ -525,7 +528,7 @@ class TextureStorage11_2DArray : public TextureStorage11
TextureHelper11 mTexture;
TextureHelper11 mSwizzleTexture;
d3d11::RenderTargetView mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
TexLevelArray<d3d11::RenderTargetView> mSwizzleRenderTargets;
typedef std::map<LevelLayerRangeKey, Image11 *> ImageMap;
ImageMap mAssociatedImages;
......
......@@ -446,7 +446,7 @@ TextureStorage9_Cube::TextureStorage9_Cube(Renderer9 *renderer, GLenum internalf
: TextureStorage9(renderer, GetTextureUsage(internalformat, renderTarget))
{
mTexture = nullptr;
for (size_t i = 0; i < CUBE_FACE_COUNT; ++i)
for (size_t i = 0; i < gl::CUBE_FACE_COUNT; ++i)
{
mRenderTarget[i] = nullptr;
}
......@@ -467,7 +467,7 @@ TextureStorage9_Cube::~TextureStorage9_Cube()
{
SafeRelease(mTexture);
for (size_t i = 0; i < CUBE_FACE_COUNT; ++i)
for (size_t i = 0; i < gl::CUBE_FACE_COUNT; ++i)
{
SafeDelete(mRenderTarget[i]);
}
......@@ -515,7 +515,7 @@ gl::Error TextureStorage9_Cube::getRenderTarget(const gl::Context *context,
{
ASSERT(outRT);
ASSERT(index.mipIndex == 0);
ASSERT(index.layerIndex >= 0 && static_cast<size_t>(index.layerIndex) < CUBE_FACE_COUNT);
ASSERT(index.layerIndex >= 0 && static_cast<size_t>(index.layerIndex) < gl::CUBE_FACE_COUNT);
if (mRenderTarget[index.layerIndex] == nullptr && isRenderTarget())
{
......@@ -608,7 +608,7 @@ gl::Error TextureStorage9_Cube::copyToStorage(const gl::Context *context,
TextureStorage9_Cube *dest9 = GetAs<TextureStorage9_Cube>(destStorage);
int levels = getLevelCount();
for (int f = 0; f < static_cast<int>(CUBE_FACE_COUNT); f++)
for (int f = 0; f < static_cast<int>(gl::CUBE_FACE_COUNT); f++)
{
for (int i = 0; i < levels; i++)
{
......
......@@ -148,10 +148,8 @@ class TextureStorage9_Cube : public TextureStorage9
gl::Error copyToStorage(const gl::Context *context, TextureStorage *destStorage) override;
private:
static const size_t CUBE_FACE_COUNT = 6;
IDirect3DCubeTexture9 *mTexture;
RenderTarget9 *mRenderTarget[CUBE_FACE_COUNT];
RenderTarget9 *mRenderTarget[gl::CUBE_FACE_COUNT];
};
}
......
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