Commit 62114aae by Courtney Goeltzenleuchter Committed by Commit Bot

glBufferSubData: Exit early if size is zero

glBufferSubData is calling vkMapMemory with a size of zero is invalid. Check for that and exit early if found. Bug: angleproject:2790 Change-Id: I965badeb3aa2cec1adc24dd7ff5695f8aa3e553d Reviewed-on: https://chromium-review.googlesource.com/1194610 Commit-Queue: Courtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org>
parent 4230d484
...@@ -4925,7 +4925,7 @@ void Context::bufferSubData(BufferBinding target, ...@@ -4925,7 +4925,7 @@ void Context::bufferSubData(BufferBinding target,
GLsizeiptr size, GLsizeiptr size,
const void *data) const void *data)
{ {
if (data == nullptr) if (data == nullptr || size == 0)
{ {
return; return;
} }
......
...@@ -78,7 +78,7 @@ gl::Error BufferVk::setData(const gl::Context *context, ...@@ -78,7 +78,7 @@ gl::Error BufferVk::setData(const gl::Context *context,
vk::AllocateBufferMemory(contextVk, memoryPropertyFlags, &mBuffer, &mBufferMemory)); vk::AllocateBufferMemory(contextVk, memoryPropertyFlags, &mBuffer, &mBufferMemory));
} }
if (data) if (data && size > 0)
{ {
ANGLE_TRY(setDataImpl(contextVk, static_cast<const uint8_t *>(data), size, 0)); ANGLE_TRY(setDataImpl(contextVk, static_cast<const uint8_t *>(data), size, 0));
} }
......
...@@ -124,6 +124,9 @@ TEST_P(BufferDataTest, ZeroNonNULLData) ...@@ -124,6 +124,9 @@ TEST_P(BufferDataTest, ZeroNonNULLData)
TEST_P(BufferDataTest, NULLResolvedData) TEST_P(BufferDataTest, NULLResolvedData)
{ {
// TODO(jmadill) http://anglebug.com/2644
ANGLE_SKIP_TEST_IF(IsVulkan());
glBindBuffer(GL_ARRAY_BUFFER, mBuffer); glBindBuffer(GL_ARRAY_BUFFER, mBuffer);
glBufferData(GL_ARRAY_BUFFER, 128, nullptr, GL_DYNAMIC_DRAW); glBufferData(GL_ARRAY_BUFFER, 128, nullptr, GL_DYNAMIC_DRAW);
...@@ -139,6 +142,9 @@ TEST_P(BufferDataTest, NULLResolvedData) ...@@ -139,6 +142,9 @@ TEST_P(BufferDataTest, NULLResolvedData)
// path. // path.
TEST_P(BufferDataTest, RepeatedDrawWithDynamic) TEST_P(BufferDataTest, RepeatedDrawWithDynamic)
{ {
// TODO(jmadill) http://anglebug.com/2644
ANGLE_SKIP_TEST_IF(IsVulkan());
std::vector<GLfloat> data; std::vector<GLfloat> data;
for (int i = 0; i < 16; ++i) for (int i = 0; i < 16; ++i)
{ {
...@@ -479,7 +485,12 @@ TEST_P(BufferDataTestES3, NoBufferInitDataCopyBug) ...@@ -479,7 +485,12 @@ TEST_P(BufferDataTestES3, NoBufferInitDataCopyBug)
// http://anglebug.com/2644 // http://anglebug.com/2644
// Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against. // Use this to select which configurations (e.g. which renderer, which GLES major version) these tests should be run against.
ANGLE_INSTANTIATE_TEST(BufferDataTest, ES2_D3D9(), ES2_D3D11(), ES2_OPENGL(), ES2_OPENGLES()); ANGLE_INSTANTIATE_TEST(BufferDataTest,
ES2_D3D9(),
ES2_D3D11(),
ES2_OPENGL(),
ES2_OPENGLES(),
ES2_VULKAN());
ANGLE_INSTANTIATE_TEST(BufferDataTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES()); ANGLE_INSTANTIATE_TEST(BufferDataTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(IndexedBufferCopyTest, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES()); ANGLE_INSTANTIATE_TEST(IndexedBufferCopyTest, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
......
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