Commit e9cc78a1 by Corentin Wallez

Make Buffer11::mBuffersStorages an array instead of a map

BUG=angleproject:516 Change-Id: I7f969435a89c0063b504628d2ec3321cc02df7ce Reviewed-on: https://chromium-review.googlesource.com/283243Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent bc3b5e63
......@@ -234,17 +234,18 @@ Buffer11::Buffer11(Renderer11 *renderer)
mRenderer(renderer),
mSize(0),
mMappedStorage(nullptr),
mBufferStorages(BUFFER_USAGE_COUNT, nullptr),
mConstantBufferStorageAdditionalSize(0),
mMaxConstantBufferLruCount(0),
mReadUsageCount(0),
mHasSystemMemoryStorage(false)
{}
mReadUsageCount(0)
{
}
Buffer11::~Buffer11()
{
for (auto &p : mBufferStorages)
for (auto &storage : mBufferStorages)
{
SafeDelete(p.second);
SafeDelete(storage);
}
for (auto &p : mConstantBufferRangeStoragesCache)
......@@ -488,16 +489,12 @@ void Buffer11::markBufferUsage()
// Free the system memory storage if we decide it isn't being used very often.
const unsigned int usageLimit = 5;
if (mReadUsageCount > usageLimit && mHasSystemMemoryStorage)
BufferStorage *&sysMemUsage = mBufferStorages[BUFFER_USAGE_SYSTEM_MEMORY];
if (mReadUsageCount > usageLimit && sysMemUsage != nullptr)
{
auto systemMemoryStorageIt = mBufferStorages.find(BUFFER_USAGE_SYSTEM_MEMORY);
ASSERT(systemMemoryStorageIt != mBufferStorages.end());
if (getLatestBufferStorage() != systemMemoryStorageIt->second)
if (getLatestBufferStorage() != sysMemUsage)
{
SafeDelete(systemMemoryStorageIt->second);
mBufferStorages.erase(systemMemoryStorageIt);
mHasSystemMemoryStorage = false;
SafeDelete(sysMemUsage);
}
}
}
......@@ -632,12 +629,8 @@ gl::Error Buffer11::packPixels(ID3D11Texture2D *srcTexture, UINT srcSubresource,
Buffer11::BufferStorage *Buffer11::getBufferStorage(BufferUsage usage)
{
BufferStorage *newStorage = nullptr;
auto directBufferIt = mBufferStorages.find(usage);
if (directBufferIt != mBufferStorages.end())
{
newStorage = directBufferIt->second;
}
ASSERT(0 <= usage && usage < BUFFER_USAGE_COUNT);
BufferStorage *&newStorage = mBufferStorages[usage];
if (!newStorage)
{
......@@ -648,7 +641,6 @@ Buffer11::BufferStorage *Buffer11::getBufferStorage(BufferUsage usage)
else if (usage == BUFFER_USAGE_SYSTEM_MEMORY)
{
newStorage = new SystemMemoryStorage(mRenderer);
mHasSystemMemoryStorage = true;
}
else if (usage == BUFFER_USAGE_EMULATED_INDEXED_VERTEX)
{
......@@ -659,8 +651,6 @@ Buffer11::BufferStorage *Buffer11::getBufferStorage(BufferUsage usage)
// buffer is not allocated, create it
newStorage = new NativeStorage(mRenderer, usage);
}
mBufferStorages.insert(std::make_pair(usage, newStorage));
}
// resize buffer
......@@ -772,10 +762,9 @@ Buffer11::BufferStorage *Buffer11::getLatestBufferStorage() const
// 1 or 2 will be present.
BufferStorage *latestStorage = nullptr;
DataRevision latestRevision = 0;
for (auto it = mBufferStorages.begin(); it != mBufferStorages.end(); it++)
for (auto &storage : mBufferStorages)
{
BufferStorage *storage = it->second;
if (!latestStorage || storage->getDataRevision() > latestRevision)
if (storage && (!latestStorage || storage->getDataRevision() > latestRevision))
{
latestStorage = storage;
latestRevision = storage->getDataRevision();
......
......@@ -30,6 +30,8 @@ enum BufferUsage
BUFFER_USAGE_UNIFORM,
BUFFER_USAGE_SYSTEM_MEMORY,
BUFFER_USAGE_EMULATED_INDEXED_VERTEX,
BUFFER_USAGE_COUNT,
};
struct PackPixelsParams
......@@ -88,7 +90,7 @@ class Buffer11 : public BufferD3D
BufferStorage *mMappedStorage;
std::map<BufferUsage, BufferStorage*> mBufferStorages;
std::vector<BufferStorage*> mBufferStorages;
struct ConstantBufferCacheEntry
{
......@@ -110,7 +112,6 @@ class Buffer11 : public BufferD3D
std::map<DXGI_FORMAT, BufferSRVPair> mBufferResourceViews;
unsigned int mReadUsageCount;
bool mHasSystemMemoryStorage;
void markBufferUsage();
NativeStorage *getStagingStorage();
......
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