summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Buffer.cpp')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/Buffer.cpp115
1 files changed, 39 insertions, 76 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Buffer.cpp b/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
index c007d5d9e9..a47b8f402f 100644
--- a/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
@@ -1,6 +1,6 @@
#include "precompiled.h"
//
-// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -10,117 +10,80 @@
// [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) : RefCountObject(id)
+Buffer::Buffer(rx::BufferImpl *impl, GLuint id)
+ : RefCountObject(id),
+ mBuffer(impl),
+ mUsage(GL_DYNAMIC_DRAW),
+ mSize(0),
+ mAccessFlags(0),
+ mMapped(GL_FALSE),
+ mMapPointer(NULL),
+ mMapOffset(0),
+ mMapLength(0)
{
- mRenderer = renderer;
- mUsage = GL_DYNAMIC_DRAW;
-
- mBufferStorage = renderer->createBufferStorage();
- mStaticVertexBuffer = NULL;
- mStaticIndexBuffer = NULL;
- mUnmodifiedDataUse = 0;
}
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);
-
- if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
- {
- invalidateStaticData();
- }
-
- mUnmodifiedDataUse = 0;
+ mBuffer->setSubData(data, size, offset);
}
-rx::BufferStorage *Buffer::getStorage() const
+void Buffer::copyBufferSubData(Buffer* source, GLintptr sourceOffset, GLintptr destOffset, GLsizeiptr size)
{
- return mBufferStorage;
+ mBuffer->copySubData(source->getImplementation(), size, sourceOffset, destOffset);
}
-unsigned int Buffer::size() const
+GLvoid *Buffer::mapRange(GLintptr offset, GLsizeiptr length, GLbitfield access)
{
- return mBufferStorage->getSize();
-}
+ ASSERT(!mMapped);
+ ASSERT(offset + length <= mSize);
-GLenum Buffer::usage() const
-{
- return mUsage;
-}
+ void *dataPointer = mBuffer->map(offset, length, access);
-rx::StaticVertexBufferInterface *Buffer::getStaticVertexBuffer()
-{
- return mStaticVertexBuffer;
-}
+ mMapped = GL_TRUE;
+ mMapPointer = static_cast<GLvoid*>(static_cast<GLubyte*>(dataPointer));
+ mMapOffset = static_cast<GLint64>(offset);
+ mMapLength = static_cast<GLint64>(length);
+ mAccessFlags = static_cast<GLint>(access);
-rx::StaticIndexBufferInterface *Buffer::getStaticIndexBuffer()
-{
- return mStaticIndexBuffer;
+ return mMapPointer;
}
-void Buffer::invalidateStaticData()
+void Buffer::unmap()
{
- delete mStaticVertexBuffer;
- mStaticVertexBuffer = NULL;
-
- delete mStaticIndexBuffer;
- mStaticIndexBuffer = NULL;
+ ASSERT(mMapped);
- mUnmodifiedDataUse = 0;
-}
+ mBuffer->unmap();
-// 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);
- }
- }
+ mMapped = GL_FALSE;
+ mMapPointer = NULL;
+ mMapOffset = 0;
+ mMapLength = 0;
+ mAccessFlags = 0;
}
-rx::IndexRangeCache *Buffer::getIndexRangeCache()
+void Buffer::markTransformFeedbackUsage()
{
- return &mIndexRangeCache;
+ // TODO: Only used by the DX11 backend. Refactor to a more appropriate place.
+ mBuffer->markTransformFeedbackUsage();
}
}