Commit c5b8b59c by Gregoire Payen de La Garanderie Committed by Jamie Madill

Don't delete sysmem storage if it is the latest storage.

BUG=angleproject:965 Change-Id: I9b4b042e3f9bde3ce713a02aa353b5f3a5cff49e Reviewed-on: https://chromium-review.googlesource.com/263711Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Tested-by: 's avatarGregoire Payen de La Garanderie <Gregory.Payen@imgtec.com>
parent 9638c352
...@@ -434,10 +434,13 @@ void Buffer11::markBufferUsage() ...@@ -434,10 +434,13 @@ void Buffer11::markBufferUsage()
auto systemMemoryStorageIt = mBufferStorages.find(BUFFER_USAGE_SYSTEM_MEMORY); auto systemMemoryStorageIt = mBufferStorages.find(BUFFER_USAGE_SYSTEM_MEMORY);
ASSERT(systemMemoryStorageIt != mBufferStorages.end()); ASSERT(systemMemoryStorageIt != mBufferStorages.end());
if (getLatestBufferStorage() != systemMemoryStorageIt->second)
{
SafeDelete(systemMemoryStorageIt->second); SafeDelete(systemMemoryStorageIt->second);
mBufferStorages.erase(systemMemoryStorageIt); mBufferStorages.erase(systemMemoryStorageIt);
mHasSystemMemoryStorage = false; mHasSystemMemoryStorage = false;
} }
}
} }
ID3D11Buffer *Buffer11::getBuffer(BufferUsage usage) ID3D11Buffer *Buffer11::getBuffer(BufferUsage usage)
......
...@@ -194,3 +194,37 @@ TYPED_TEST(UniformBufferTest, UnboundUniformBuffer) ...@@ -194,3 +194,37 @@ TYPED_TEST(UniformBufferTest, UnboundUniformBuffer)
drawQuad(mProgram, "position", 0.5f); drawQuad(mProgram, "position", 0.5f);
EXPECT_GL_ERROR(GL_INVALID_OPERATION); EXPECT_GL_ERROR(GL_INVALID_OPERATION);
} }
// Update a UBO many time and verify that ANGLE uses the latest version of the data.
// https://code.google.com/p/angleproject/issues/detail?id=965
TYPED_TEST(UniformBufferTest, UniformBufferManyUpdates)
{
int px = getWindowWidth() / 2;
int py = getWindowHeight() / 2;
ASSERT_GL_NO_ERROR();
float data[4];
glBindBuffer(GL_UNIFORM_BUFFER, mUniformBuffer);
glBufferData(GL_UNIFORM_BUFFER, sizeof(data), NULL, GL_DYNAMIC_DRAW);
glUniformBlockBinding(mProgram, mUniformBufferIndex, 0);
glBindBufferBase(GL_UNIFORM_BUFFER, 0, mUniformBuffer);
EXPECT_GL_NO_ERROR();
// Repeteadly update the data and draw
for (size_t i = 0; i < 10; ++i)
{
data[0] = (i + 10.f) / 255.f;
data[1] = (i + 20.f) / 255.f;
data[2] = (i + 30.f) / 255.f;
data[3] = (i + 40.f) / 255.f;
glBufferSubData(GL_UNIFORM_BUFFER, 0, sizeof(data), data);
drawQuad(mProgram, "position", 0.5f);
EXPECT_GL_NO_ERROR();
EXPECT_PIXEL_EQ(px, py, i + 10, i + 20, i + 30, i + 40);
}
}
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