Heuristically optimize buffer usage.
TRAC #16343
Signed-off-by: Daniel Koch
Author: Nicolas Capens
git-svn-id: https://angleproject.googlecode.com/svn/trunk@616 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/VertexDataManager.cpp b/src/libGLESv2/VertexDataManager.cpp
index 4d4f66a..a7716ce 100644
--- a/src/libGLESv2/VertexDataManager.cpp
+++ b/src/libGLESv2/VertexDataManager.cpp
@@ -127,7 +127,7 @@
if (translated[i].active && attribs[i].mArrayEnabled)
{
Buffer *buffer = attribs[i].mBoundBuffer.get();
- StaticVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
+ StaticVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
if (staticBuffer)
{
@@ -158,7 +158,7 @@
if (translated[i].active && attribs[i].mArrayEnabled)
{
Buffer *buffer = attribs[i].mBoundBuffer.get();
- ArrayVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
+ ArrayVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : mStreamingBuffer;
if (vertexBuffer)
@@ -173,10 +173,10 @@
{
if (translated[i].active)
{
- Buffer *buffer = attribs[i].mBoundBuffer.get();
-
if (attribs[i].mArrayEnabled)
{
+ Buffer *buffer = attribs[i].mBoundBuffer.get();
+
if (!buffer && attribs[i].mPointer == NULL)
{
// This is an application error that would normally result in a crash, but we catch it and return an error
@@ -186,7 +186,7 @@
const FormatConverter &converter = formatConverter(attribs[i]);
- StaticVertexBuffer *staticBuffer = buffer ? buffer->getVertexBuffer() : NULL;
+ StaticVertexBuffer *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
ArrayVertexBuffer *vertexBuffer = staticBuffer ? staticBuffer : static_cast<ArrayVertexBuffer*>(mStreamingBuffer);
UINT streamOffset = -1;
@@ -242,6 +242,19 @@
}
}
+ for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
+ {
+ if (translated[i].active && attribs[i].mArrayEnabled)
+ {
+ Buffer *buffer = attribs[i].mBoundBuffer.get();
+
+ if (buffer)
+ {
+ buffer->promoteStaticUsage(count * attribs[i].typeSize());
+ }
+ }
+ }
+
return GL_NO_ERROR;
}