From dce86de8e79d91952c7b21f3bd63bcb1b9f9e7e9 Mon Sep 17 00:00:00 2001 From: Andrew Knight Date: Fri, 5 Apr 2013 15:14:46 +0300 Subject: ANGLE: Avoid memory copies on buffers when data is null With data=0, ANGLE can crash when setting the buffer data. As this should be a legal operation, don't perform a memcpy when data is null. Change-Id: I3fa1260482549b1da50d7a68001a65decb98f258 Reviewed-by: Friedemann Kleint --- .../src/libGLESv2/renderer/BufferStorage11.cpp | 22 ++++++++++++++++------ .../src/libGLESv2/renderer/BufferStorage9.cpp | 3 ++- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'src/3rdparty/angle') diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp index 4c37bdbf60..7fe9e6b762 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp +++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp @@ -182,7 +182,8 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int return gl::error(GL_OUT_OF_MEMORY); } - memcpy(mappedResource.pData, data, size); + if (data) + memcpy(mappedResource.pData, data, size); context->Unmap(mStagingBuffer, 0); } @@ -211,12 +212,21 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int mBufferSize = 0; } - D3D11_SUBRESOURCE_DATA initialData; - initialData.pSysMem = data; - initialData.SysMemPitch = size; - initialData.SysMemSlicePitch = 0; - result = device->CreateBuffer(&bufferDesc, &initialData, &mBuffer); + if (data) + { + D3D11_SUBRESOURCE_DATA initialData; + initialData.pSysMem = data; + initialData.SysMemPitch = size; + initialData.SysMemSlicePitch = 0; + + result = device->CreateBuffer(&bufferDesc, &initialData, &mBuffer); + } + else + { + result = device->CreateBuffer(&bufferDesc, NULL, &mBuffer); + } + if (FAILED(result)) { return gl::error(GL_OUT_OF_MEMORY); diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp index 7fc14fc073..4468461871 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp +++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp @@ -54,7 +54,8 @@ void BufferStorage9::setData(const void* data, unsigned int size, unsigned int o } mSize = std::max(mSize, offset + size); - memcpy(reinterpret_cast(mMemory) + offset, data, size); + if (data) + memcpy(reinterpret_cast(mMemory) + offset, data, size); } void BufferStorage9::clear() -- cgit v1.2.3