Add a path to BufferStorage11 to point to D3D11 constant buffer data storage for uniform buffer objects.

TRAC #22852

Signed-off-by: Geoff Lang
Signed-off-by: Nicolas Capens
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2290 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/BufferStorage11.cpp b/src/libGLESv2/renderer/BufferStorage11.cpp
index d6e47aa..87dc414 100644
--- a/src/libGLESv2/renderer/BufferStorage11.cpp
+++ b/src/libGLESv2/renderer/BufferStorage11.cpp
@@ -360,6 +360,17 @@
         bufferDesc->CPUAccessFlags = 0;
         break;
 
+      case GL_UNIFORM_BUFFER:
+        bufferDesc->Usage = D3D11_USAGE_DYNAMIC;
+        bufferDesc->BindFlags = D3D11_BIND_CONSTANT_BUFFER;
+        bufferDesc->CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+
+        // Constant buffers must be of a limited size, and aligned to 16 byte boundaries
+        // For our purposes we ignore any buffer data past the maximum constant buffer size
+        bufferDesc->ByteWidth = roundUp(bufferDesc->ByteWidth, 16u);
+        bufferDesc->ByteWidth = std::min(bufferDesc->ByteWidth, mRenderer->getMaxUniformBufferSize());
+        break;
+
       default:
         UNREACHABLE();
         break;