gl::Buffer now uses an rx::BufferStorage to store the data.
TRAC #22297
Signed-off-by: Jamie Madill
Signed-off-by: Nicolas Capens
Author: Geoff Lang
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1883 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/IndexDataManager.cpp b/src/libGLESv2/renderer/IndexDataManager.cpp
index e009205..e58a5ae 100644
--- a/src/libGLESv2/renderer/IndexDataManager.cpp
+++ b/src/libGLESv2/renderer/IndexDataManager.cpp
@@ -130,6 +130,8 @@
if (buffer != NULL)
{
+ BufferStorage *storage = buffer->getStorage();
+
switch (type)
{
case GL_UNSIGNED_BYTE: alignedOffset = (offset % sizeof(GLubyte) == 0); break;
@@ -138,18 +140,19 @@
default: UNREACHABLE(); alignedOffset = false;
}
- if (indexTypeSize(type) * count + offset > static_cast<std::size_t>(buffer->size()))
+ if (indexTypeSize(type) * count + offset > storage->getSize())
{
return GL_INVALID_OPERATION;
}
- indices = static_cast<const GLubyte*>(buffer->data()) + offset;
+ indices = static_cast<const GLubyte*>(storage->getData()) + offset;
}
StreamingIndexBufferInterface *streamingBuffer = (type == GL_UNSIGNED_INT) ? mStreamingBufferInt : mStreamingBufferShort;
StaticIndexBufferInterface *staticBuffer = buffer ? buffer->getStaticIndexBuffer() : NULL;
IndexBufferInterface *indexBuffer = streamingBuffer;
+ BufferStorage *storage = buffer ? buffer->getStorage() : NULL;
UINT streamOffset = 0;
if (staticBuffer && staticBuffer->getIndexType() == type && alignedOffset)
@@ -173,7 +176,7 @@
if (staticBuffer->getBufferSize() == 0 && alignedOffset)
{
indexBuffer = staticBuffer;
- convertCount = buffer->size() / indexTypeSize(type);
+ convertCount = storage->getSize() / indexTypeSize(type);
}
else
{
@@ -199,7 +202,7 @@
return GL_OUT_OF_MEMORY;
}
- convertIndices(type, staticBuffer ? buffer->data() : indices, convertCount, output);
+ convertIndices(type, staticBuffer ? storage->getData() : indices, convertCount, output);
if (!indexBuffer->unmapBuffer())
{
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index aab13ca..88af239 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -965,8 +965,9 @@
if (type != GL_NONE && elementArrayBuffer)
{
gl::Buffer *indexBuffer = elementArrayBuffer;
+ BufferStorage *storage = indexBuffer->getStorage();
intptr_t offset = reinterpret_cast<intptr_t>(indices);
- indices = static_cast<const GLubyte*>(indexBuffer->data()) + offset;
+ indices = static_cast<const GLubyte*>(storage->getData()) + offset;
}
if (!mLineLoopIB)
@@ -1057,8 +1058,9 @@
if (type != GL_NONE && elementArrayBuffer)
{
gl::Buffer *indexBuffer = elementArrayBuffer;
+ BufferStorage *storage = indexBuffer->getStorage();
intptr_t offset = reinterpret_cast<intptr_t>(indices);
- indices = static_cast<const GLubyte*>(indexBuffer->data()) + offset;
+ indices = static_cast<const GLubyte*>(storage->getData()) + offset;
}
if (!mTriangleFanIB)
diff --git a/src/libGLESv2/renderer/Renderer9.cpp b/src/libGLESv2/renderer/Renderer9.cpp
index 8934949..d837192 100644
--- a/src/libGLESv2/renderer/Renderer9.cpp
+++ b/src/libGLESv2/renderer/Renderer9.cpp
@@ -1436,8 +1436,9 @@
if (type != GL_NONE && elementArrayBuffer)
{
gl::Buffer *indexBuffer = elementArrayBuffer;
+ BufferStorage *storage = indexBuffer->getStorage();
intptr_t offset = reinterpret_cast<intptr_t>(indices);
- indices = static_cast<const GLubyte*>(indexBuffer->data()) + offset;
+ indices = static_cast<const GLubyte*>(storage->getData()) + offset;
}
UINT startIndex = 0;
diff --git a/src/libGLESv2/renderer/VertexBuffer11.cpp b/src/libGLESv2/renderer/VertexBuffer11.cpp
index cde9ae8..8b46ca1 100644
--- a/src/libGLESv2/renderer/VertexBuffer11.cpp
+++ b/src/libGLESv2/renderer/VertexBuffer11.cpp
@@ -94,7 +94,8 @@
const char *input = NULL;
if (buffer)
{
- input = static_cast<const char*>(buffer->data()) + static_cast<int>(attrib.mOffset);
+ BufferStorage *storage = buffer->getStorage();
+ input = static_cast<const char*>(storage->getData()) + static_cast<int>(attrib.mOffset);
}
else
{
diff --git a/src/libGLESv2/renderer/VertexBuffer9.cpp b/src/libGLESv2/renderer/VertexBuffer9.cpp
index 00caeee..cf5a375 100644
--- a/src/libGLESv2/renderer/VertexBuffer9.cpp
+++ b/src/libGLESv2/renderer/VertexBuffer9.cpp
@@ -104,7 +104,8 @@
const char *input = NULL;
if (buffer)
{
- input = static_cast<const char*>(buffer->data()) + static_cast<int>(attrib.mOffset);
+ BufferStorage *storage = buffer->getStorage();
+ input = static_cast<const char*>(storage->getData()) + static_cast<int>(attrib.mOffset);
}
else
{
diff --git a/src/libGLESv2/renderer/VertexDataManager.cpp b/src/libGLESv2/renderer/VertexDataManager.cpp
index 99d03d5..00a1633 100644
--- a/src/libGLESv2/renderer/VertexDataManager.cpp
+++ b/src/libGLESv2/renderer/VertexDataManager.cpp
@@ -87,11 +87,12 @@
gl::Buffer *buffer = attribs[i].mBoundBuffer.get();
StaticVertexBufferInterface *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
+ BufferStorage *storage = buffer ? buffer->getStorage() : NULL;
if (staticBuffer)
{
if (staticBuffer->getBufferSize() == 0)
{
- int totalCount = elementsInBuffer(attribs[i], buffer->size());
+ int totalCount = elementsInBuffer(attribs[i], storage->getSize());
staticBuffer->reserveVertexSpace(attribs[i], totalCount, 0);
}
else if (staticBuffer->lookupAttribute(attribs[i]) == -1)
@@ -126,6 +127,8 @@
StaticVertexBufferInterface *staticBuffer = buffer ? buffer->getStaticVertexBuffer() : NULL;
VertexBufferInterface *vertexBuffer = staticBuffer ? staticBuffer : static_cast<VertexBufferInterface*>(mStreamingBuffer);
+ BufferStorage *storage = buffer ? buffer->getStorage() : NULL;
+
std::size_t streamOffset = -1;
unsigned int outputElementSize = 0;
@@ -137,7 +140,7 @@
if (streamOffset == -1)
{
// Convert the entire buffer
- int totalCount = elementsInBuffer(attribs[i], buffer->size());
+ int totalCount = elementsInBuffer(attribs[i], storage->getSize());
int startIndex = attribs[i].mOffset / attribs[i].stride();
streamOffset = staticBuffer->storeVertexAttributes(attribs[i], -startIndex, totalCount, 0);