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;