Fixed a bug where BufferStorage11 was unable to handle NULL data being set.

TRAC #22811

Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
Author: Geoff Lang

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2135 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/BufferStorage11.cpp b/src/libGLESv2/renderer/BufferStorage11.cpp
index 6871f2d..521943f 100644
--- a/src/libGLESv2/renderer/BufferStorage11.cpp
+++ b/src/libGLESv2/renderer/BufferStorage11.cpp
@@ -160,12 +160,20 @@
             bufferDesc.MiscFlags = 0;
             bufferDesc.StructureByteStride = 0;
 
-            D3D11_SUBRESOURCE_DATA initialData;
-            initialData.pSysMem = data;
-            initialData.SysMemPitch = size;
-            initialData.SysMemSlicePitch = 0;
+            if (data)
+            {
+                D3D11_SUBRESOURCE_DATA initialData;
+                initialData.pSysMem = data;
+                initialData.SysMemPitch = size;
+                initialData.SysMemSlicePitch = 0;
 
-            result = device->CreateBuffer(&bufferDesc, &initialData, &mStagingBuffer);
+                result = device->CreateBuffer(&bufferDesc, &initialData, &mStagingBuffer);
+            }
+            else
+            {
+                result = device->CreateBuffer(&bufferDesc, NULL, &mStagingBuffer);
+            }
+
             if (FAILED(result))
             {
                 return gl::error(GL_OUT_OF_MEMORY);
@@ -211,12 +219,20 @@
                 mBufferSize = 0;
             }
 
-            D3D11_SUBRESOURCE_DATA initialData;
-            initialData.pSysMem = data;
-            initialData.SysMemPitch = size;
-            initialData.SysMemSlicePitch = 0;
+            if (data)
+            {
+                D3D11_SUBRESOURCE_DATA initialData;
+                initialData.pSysMem = data;
+                initialData.SysMemPitch = size;
+                initialData.SysMemSlicePitch = 0;
 
-            result = device->CreateBuffer(&bufferDesc, &initialData, &mBuffer);
+                result = device->CreateBuffer(&bufferDesc, &initialData, &mBuffer);
+            }
+            else
+            {
+                result = device->CreateBuffer(&bufferDesc, NULL, &mBuffer);
+            }
+
             if (FAILED(result))
             {
                 return gl::error(GL_OUT_OF_MEMORY);