Commit 341a36cc by Jamie Madill Committed by Commit Bot

Fix zero size buffer robust init crash.

We were not correctly checking for a zero-size buffer, which should not trigger allocating a scratch buffer. BUG=angleproject:1635 Change-Id: Iac0a3d8f1eeeb7b39c59eec411bec78a4f21bcd3 Reviewed-on: https://chromium-review.googlesource.com/513478Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 19ecebe7
...@@ -70,8 +70,9 @@ Error Buffer::bufferData(const Context *context, ...@@ -70,8 +70,9 @@ Error Buffer::bufferData(const Context *context,
const void *dataForImpl = data; const void *dataForImpl = data;
// If we are using robust resource init, make sure the buffer starts cleared. // If we are using robust resource init, make sure the buffer starts cleared.
// Note: the Context is checked for nullptr because of some testing code.
// TODO(jmadill): Investigate lazier clearing. // TODO(jmadill): Investigate lazier clearing.
if (context && context->getGLState().isRobustResourceInitEnabled() && data == nullptr) if (context && context->getGLState().isRobustResourceInitEnabled() && !data && size > 0)
{ {
angle::MemoryBuffer *scratchBuffer = nullptr; angle::MemoryBuffer *scratchBuffer = nullptr;
ANGLE_TRY(context->getScratchBuffer(static_cast<size_t>(size), &scratchBuffer)); ANGLE_TRY(context->getScratchBuffer(static_cast<size_t>(size), &scratchBuffer));
......
...@@ -178,6 +178,19 @@ TEST_P(RobustResourceInitTest, BufferData) ...@@ -178,6 +178,19 @@ TEST_P(RobustResourceInitTest, BufferData)
EXPECT_EQ(expected, actual); EXPECT_EQ(expected, actual);
} }
// Regression test for passing a zero size init buffer with the extension.
TEST_P(RobustResourceInitTest, BufferDataZeroSize)
{
if (!setup())
{
return;
}
GLBuffer buffer;
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 0, nullptr, GL_STATIC_DRAW);
}
ANGLE_INSTANTIATE_TEST(RobustResourceInitTest, ANGLE_INSTANTIATE_TEST(RobustResourceInitTest,
ES2_D3D9(), ES2_D3D9(),
ES2_D3D11(), ES2_D3D11(),
......
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