diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Buffer.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/Buffer.cpp | 115 |
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(); } } |