summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/VertexBuffer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/VertexBuffer.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/VertexBuffer.cpp293
1 files changed, 0 insertions, 293 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/VertexBuffer.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/VertexBuffer.cpp
deleted file mode 100644
index 7c2d5aec70..0000000000
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/VertexBuffer.cpp
+++ /dev/null
@@ -1,293 +0,0 @@
-//
-// Copyright (c) 2002-2012 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.
-//
-
-// VertexBuffer.cpp: Defines the abstract VertexBuffer class and VertexBufferInterface
-// class with derivations, classes that perform graphics API agnostic vertex buffer operations.
-
-#include "libANGLE/renderer/d3d/VertexBuffer.h"
-
-#include "common/mathutil.h"
-#include "libANGLE/renderer/d3d/BufferD3D.h"
-#include "libANGLE/renderer/d3d/RendererD3D.h"
-#include "libANGLE/VertexAttribute.h"
-
-namespace rx
-{
-
-// VertexBuffer Implementation
-unsigned int VertexBuffer::mNextSerial = 1;
-
-VertexBuffer::VertexBuffer() : mRefCount(1)
-{
- updateSerial();
-}
-
-VertexBuffer::~VertexBuffer()
-{
-}
-
-void VertexBuffer::updateSerial()
-{
- mSerial = mNextSerial++;
-}
-
-unsigned int VertexBuffer::getSerial() const
-{
- return mSerial;
-}
-
-void VertexBuffer::addRef()
-{
- mRefCount++;
-}
-
-void VertexBuffer::release()
-{
- ASSERT(mRefCount > 0);
- mRefCount--;
-
- if (mRefCount == 0)
- {
- delete this;
- }
-}
-
-// VertexBufferInterface Implementation
-VertexBufferInterface::VertexBufferInterface(BufferFactoryD3D *factory, bool dynamic)
- : mFactory(factory), mVertexBuffer(factory->createVertexBuffer()), mDynamic(dynamic)
-{
-}
-
-VertexBufferInterface::~VertexBufferInterface()
-{
- if (mVertexBuffer)
- {
- mVertexBuffer->release();
- }
-}
-
-unsigned int VertexBufferInterface::getSerial() const
-{
- return mVertexBuffer->getSerial();
-}
-
-unsigned int VertexBufferInterface::getBufferSize() const
-{
- return mVertexBuffer->getBufferSize();
-}
-
-gl::Error VertexBufferInterface::setBufferSize(unsigned int size)
-{
- if (mVertexBuffer->getBufferSize() == 0)
- {
- return mVertexBuffer->initialize(size, mDynamic);
- }
-
- return mVertexBuffer->setBufferSize(size);
-}
-
-gl::ErrorOrResult<unsigned int> VertexBufferInterface::getSpaceRequired(
- const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding,
- GLsizei count,
- GLsizei instances) const
-{
- unsigned int spaceRequired = 0;
- ANGLE_TRY_RESULT(mFactory->getVertexSpaceRequired(attrib, binding, count, instances),
- spaceRequired);
-
- // Align to 16-byte boundary
- unsigned int alignedSpaceRequired = roundUp(spaceRequired, 16u);
-
- if (alignedSpaceRequired < spaceRequired)
- {
- return gl::OutOfMemory()
- << "Vertex buffer overflow in VertexBufferInterface::getSpaceRequired.";
- }
-
- return alignedSpaceRequired;
-}
-
-gl::Error VertexBufferInterface::discard()
-{
- return mVertexBuffer->discard();
-}
-
-VertexBuffer *VertexBufferInterface::getVertexBuffer() const
-{
- return mVertexBuffer;
-}
-
-// StreamingVertexBufferInterface Implementation
-StreamingVertexBufferInterface::StreamingVertexBufferInterface(BufferFactoryD3D *factory,
- std::size_t initialSize)
- : VertexBufferInterface(factory, true), mWritePosition(0), mReservedSpace(0)
-{
- // TODO(jmadill): Make an initialize method that can return an error.
- ANGLE_SWALLOW_ERR(setBufferSize(static_cast<unsigned int>(initialSize)));
-}
-
-StreamingVertexBufferInterface::~StreamingVertexBufferInterface()
-{
-}
-
-gl::Error StreamingVertexBufferInterface::reserveSpace(unsigned int size)
-{
- unsigned int curBufferSize = getBufferSize();
- if (size > curBufferSize)
- {
- ANGLE_TRY(setBufferSize(std::max(size, 3 * curBufferSize / 2)));
- mWritePosition = 0;
- }
- else if (mWritePosition + size > curBufferSize)
- {
- ANGLE_TRY(discard());
- mWritePosition = 0;
- }
-
- return gl::NoError();
-}
-
-gl::Error StreamingVertexBufferInterface::storeDynamicAttribute(const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding,
- GLenum currentValueType,
- GLint start,
- GLsizei count,
- GLsizei instances,
- unsigned int *outStreamOffset,
- const uint8_t *sourceData)
-{
- unsigned int spaceRequired = 0;
- ANGLE_TRY_RESULT(getSpaceRequired(attrib, binding, count, instances), spaceRequired);
-
- // Protect against integer overflow
- angle::CheckedNumeric<unsigned int> checkedPosition(mWritePosition);
- checkedPosition += spaceRequired;
- if (!checkedPosition.IsValid())
- {
- return gl::OutOfMemory()
- << "Internal error, new vertex buffer write position would overflow.";
- }
-
- ANGLE_TRY(reserveSpace(mReservedSpace));
- mReservedSpace = 0;
-
- ANGLE_TRY(mVertexBuffer->storeVertexAttributes(attrib, binding, currentValueType, start, count,
- instances, mWritePosition, sourceData));
-
- if (outStreamOffset)
- {
- *outStreamOffset = mWritePosition;
- }
-
- mWritePosition += spaceRequired;
-
- return gl::NoError();
-}
-
-gl::Error StreamingVertexBufferInterface::reserveVertexSpace(const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding,
- GLsizei count,
- GLsizei instances)
-{
- unsigned int requiredSpace = 0;
- ANGLE_TRY_RESULT(mFactory->getVertexSpaceRequired(attrib, binding, count, instances),
- requiredSpace);
-
- // Align to 16-byte boundary
- auto alignedRequiredSpace = rx::CheckedRoundUp(requiredSpace, 16u);
- alignedRequiredSpace += mReservedSpace;
-
- // Protect against integer overflow
- if (!alignedRequiredSpace.IsValid())
- {
- return gl::OutOfMemory()
- << "Unable to reserve " << requiredSpace
- << " extra bytes in internal vertex buffer, it would result in an overflow.";
- }
-
- mReservedSpace = alignedRequiredSpace.ValueOrDie();
-
- return gl::NoError();
-}
-
-// StaticVertexBufferInterface Implementation
-StaticVertexBufferInterface::AttributeSignature::AttributeSignature()
- : type(GL_NONE), size(0), stride(0), normalized(false), pureInteger(false), offset(0)
-{
-}
-
-bool StaticVertexBufferInterface::AttributeSignature::matchesAttribute(
- const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding) const
-{
- size_t attribStride = ComputeVertexAttributeStride(attrib, binding);
-
- if (type != attrib.type || size != attrib.size || static_cast<GLuint>(stride) != attribStride ||
- normalized != attrib.normalized || pureInteger != attrib.pureInteger)
- {
- return false;
- }
-
- size_t attribOffset =
- (static_cast<size_t>(ComputeVertexAttributeOffset(attrib, binding)) % attribStride);
- return (offset == attribOffset);
-}
-
-void StaticVertexBufferInterface::AttributeSignature::set(const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding)
-{
- type = attrib.type;
- size = attrib.size;
- normalized = attrib.normalized;
- pureInteger = attrib.pureInteger;
- offset = stride = static_cast<GLuint>(ComputeVertexAttributeStride(attrib, binding));
- offset = static_cast<size_t>(ComputeVertexAttributeOffset(attrib, binding)) %
- ComputeVertexAttributeStride(attrib, binding);
-}
-
-StaticVertexBufferInterface::StaticVertexBufferInterface(BufferFactoryD3D *factory)
- : VertexBufferInterface(factory, false)
-{
-}
-
-StaticVertexBufferInterface::~StaticVertexBufferInterface()
-{
-}
-
-bool StaticVertexBufferInterface::matchesAttribute(const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding) const
-{
- return mSignature.matchesAttribute(attrib, binding);
-}
-
-void StaticVertexBufferInterface::setAttribute(const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding)
-{
- return mSignature.set(attrib, binding);
-}
-
-gl::Error StaticVertexBufferInterface::storeStaticAttribute(const gl::VertexAttribute &attrib,
- const gl::VertexBinding &binding,
- GLint start,
- GLsizei count,
- GLsizei instances,
- const uint8_t *sourceData)
-{
- unsigned int spaceRequired = 0;
- ANGLE_TRY_RESULT(getSpaceRequired(attrib, binding, count, instances), spaceRequired);
- ANGLE_TRY(setBufferSize(spaceRequired));
-
- ASSERT(attrib.enabled);
- ANGLE_TRY(mVertexBuffer->storeVertexAttributes(attrib, binding, GL_NONE, start, count,
- instances, 0, sourceData));
-
- mSignature.set(attrib, binding);
- mVertexBuffer->hintUnmapResource();
- return gl::NoError();
-}
-
-} // namespace rx