Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / Buffer.cpp
index e7d2c00..7d31a82 100644 (file)
 // [OpenGL ES 2.0.24] section 2.9 page 21.
 
 #include "libGLESv2/Buffer.h"
-
-#include "libGLESv2/renderer/VertexBuffer.h"
-#include "libGLESv2/renderer/IndexBuffer.h"
-#include "libGLESv2/renderer/BufferStorage.h"
+#include "libGLESv2/renderer/BufferImpl.h"
 #include "libGLESv2/renderer/Renderer.h"
 
 namespace gl
 {
 
-Buffer::Buffer(rx::Renderer *renderer, GLuint id)
+Buffer::Buffer(rx::BufferImpl *impl, GLuint id)
     : RefCountObject(id),
-      mRenderer(renderer),
+      mBuffer(impl),
       mUsage(GL_DYNAMIC_DRAW),
+      mSize(0),
       mAccessFlags(0),
       mMapped(GL_FALSE),
       mMapPointer(NULL),
       mMapOffset(0),
-      mMapLength(0),
-      mBufferStorage(NULL),
-      mStaticVertexBuffer(NULL),
-      mStaticIndexBuffer(NULL),
-      mUnmodifiedDataUse(0)
+      mMapLength(0)
 {
-    mBufferStorage = renderer->createBufferStorage();
 }
 
 Buffer::~Buffer()
 {
-    delete mBufferStorage;
-    delete mStaticVertexBuffer;
-    delete mStaticIndexBuffer;
+    delete mBuffer;
 }
 
 void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
 {
-    mBufferStorage->clear();
-    mIndexRangeCache.clear();
-    mBufferStorage->setData(data, size, 0);
-
     mUsage = usage;
-
-    invalidateStaticData();
-
-    if (usage == GL_STATIC_DRAW)
-    {
-        mStaticVertexBuffer = new rx::StaticVertexBufferInterface(mRenderer);
-        mStaticIndexBuffer = new rx::StaticIndexBufferInterface(mRenderer);
-    }
+    mSize = size;
+    mBuffer->setData(data, size, usage);
 }
 
 void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
 {
-    mBufferStorage->setData(data, size, offset);
-    mIndexRangeCache.invalidateRange(offset, size);
-    invalidateStaticData();
+    mBuffer->setSubData(data, size, offset);
 }
 
 void Buffer::copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
 {
-    mBufferStorage->copyData(source->mBufferStorage, size, sourceOffset, destOffset);
-    invalidateStaticData();
+    mBuffer->copySubData(source->getImplementation(), sourceOffset, destOffset, size);
 }
 
 GLvoid *Buffer::mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access)
 {
     ASSERT(!mMapped);
+    ASSERT(offset + length <= mSize);
 
-    void *dataPointer = mBufferStorage->map(access);
+    void *dataPointer = mBuffer->map(offset, length, access);
 
     mMapped = GL_TRUE;
-    mMapPointer = static_cast<GLvoid*>(static_cast<GLubyte*>(dataPointer) + offset);
+    mMapPointer = static_cast<GLvoid*>(static_cast<GLubyte*>(dataPointer));
     mMapOffset = static_cast<GLint64>(offset);
     mMapLength = static_cast<GLint64>(length);
     mAccessFlags = static_cast<GLint>(access);
@@ -92,7 +71,7 @@ void Buffer::unmap()
 {
     ASSERT(mMapped);
 
-    mBufferStorage->unmap();
+    mBuffer->unmap();
 
     mMapped = GL_FALSE;
     mMapPointer = NULL;
@@ -101,94 +80,10 @@ void Buffer::unmap()
     mAccessFlags = 0;
 }
 
-rx::BufferStorage *Buffer::getStorage() const
-{
-    return mBufferStorage;
-}
-
-GLint64 Buffer::size() const
-{
-    return static_cast<GLint64>(mBufferStorage->getSize());
-}
-
-GLenum Buffer::usage() const
-{
-    return mUsage;
-}
-
-GLint Buffer::accessFlags() const
-{
-    return mAccessFlags;
-}
-
-GLboolean Buffer::mapped() const
-{
-    return mMapped;
-}
-
-GLvoid *Buffer::mapPointer() const
-{
-    return mMapPointer;
-}
-
-GLint64 Buffer::mapOffset() const
-{
-    return mMapOffset;
-}
-
-GLint64 Buffer::mapLength() const
-{
-    return mMapLength;
-}
-
 void Buffer::markTransformFeedbackUsage()
 {
-    mBufferStorage->markTransformFeedbackUsage();
-    invalidateStaticData();
-}
-
-rx::StaticVertexBufferInterface *Buffer::getStaticVertexBuffer()
-{
-    return mStaticVertexBuffer;
-}
-
-rx::StaticIndexBufferInterface *Buffer::getStaticIndexBuffer()
-{
-    return mStaticIndexBuffer;
-}
-
-void Buffer::invalidateStaticData()
-{
-    if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
-    {
-        delete mStaticVertexBuffer;
-        mStaticVertexBuffer = NULL;
-
-        delete mStaticIndexBuffer;
-        mStaticIndexBuffer = NULL;
-    }
-
-    mUnmodifiedDataUse = 0;
-}
-
-// Creates static buffers if sufficient used data has been left unmodified
-void Buffer::promoteStaticUsage(int dataSize)
-{
-    if (!mStaticVertexBuffer && !mStaticIndexBuffer)
-    {
-        mUnmodifiedDataUse += dataSize;
-
-        if (mUnmodifiedDataUse > 3 * mBufferStorage->getSize())
-        {
-            mStaticVertexBuffer = new rx::StaticVertexBufferInterface(mRenderer);
-            mStaticIndexBuffer = new rx::StaticIndexBufferInterface(mRenderer);
-        }
-    }
-}
-
-rx::IndexRangeCache *Buffer::getIndexRangeCache()
-{
-    return &mIndexRangeCache;
+    // TODO: Only used by the DX11 backend. Refactor to a more appropriate place.
+    mBuffer->markTransformFeedbackUsage();
 }
 
 }